Follow Us on Twitter

Big Data integratie met de Oracle database

Gepubliceerd in

December 2016 - In het tijdperk van de Big Data heeft de relationele database nog steeds een stevige voet aan de grond. Waar Big Data-technologieën zoals Hadoop goed kunnen omgaan met grote (on)gestructureerde datavolumes, blijft een relationele database de keuze voor Online Transaction Processing (OLTP) en gemodelleerde data. Kunnen de twee technologieën elkaar wel goed aanvullen? In dit Whitebook bespreken we een aantal manieren om gegevens van een Big Data platform en de Oracle database te integreren.

Inleiding

Een Big Data platform wordt ingezet als antwoord op de steeds toenemende hoeveelheid data binnen een organisatie. Het bestaat vaak uit meerdere technologieën die ontworpen zijn om die grote volumes data gedistribueerd op te slaan en te verwerken. Waar een traditionele database op een bepaald punt het plafond bereikt om deze volumes aan te kunnen en het te duur wordt om capaciteit toe te voegen (scale up), is een belangrijk uitgangspunt van een Big Data platform dat het uitgebreid kan worden met relatief goedkope hardware (scale out). Het doel hiervan is om zowel data als processen te spreiden over de verschillende nodes in het Big Data cluster.

Hadoop

Apache Hadoop is een van de bekendste spelers in Big Data. Het framework is ontworpen voor gedistribueerde opslag en verwerking van grote volumes data. De horizontale schaalbaarheid van Hadoop maakt clusters van 1 tot duizenden machines mogelijk. De architectuur is zo ontworpen dat uitval afgevangen wordt door het framework zelf en dus een high available service impliceert.

Hadoop Distrubuted File System architectuur

Hadoop Distributed File System (HDFS) architectuur

Waar je Hadoop gebruikt als platform om grote datavolumes batch georiënteerd te verwerken tot een eindresultaat, is een relationele database meer geschikt om op dit resultaat real-time analyse te doen. Immers, een relationele database is ontworpen voor snelle responsetijden door bijvoorbeeld de mogelijkheid tot indexeren van data, iets wat in Hadoop niet bestaat. De twee technologieën kunnen naast elkaar worden ingezet. Stel je voor dat het Hadoop cluster een taak heeft uitgevoerd waarbij duizenden bestanden doorzocht en verwerkt werden tot een waardevol eindresultaat voor een organisatie, wat zijn dan de mogelijkheden om deze in een Oracle database in te laden voor verdere analyse?

Oracle Big Data Connectors

Als onderdeel van de Oracle Big Data Appliance heeft Oracle connectors ontwikkeld die bedoeld zijn om data in een Hadoop cluster te kunnen integreren met de (Exadata) database. De connectors zijn er in verschillende smaken en faciliteren zowel datastromen in als uit de Oracle database.

SQL Connector voor HDFS

De SQL Connector voor HDFS stelt je in staat om vanuit de Oracle database rechtstreeks data te benaderen uit het Hadoop Distributed File System (HDFS). Het bestaat uit een toolset dat de definitie van een external table genereert en een preprocessor die een HDFS-stream opent naar delimited- of Oracle Datapumpfiles. Een use case voor deze connector zou kunnen zijn het integreren van data uit het Hadoop cluster in de SQL- of PL/SQL context van de Oracle database, bijvoorbeeld een bestaand batchproces. Je gebruikt deze connector in het algemeen voor relatief kleine datasets en is vooral handig om in de SQL- of PL/SQL context ad hoc queries te kunnen schrijven.

Op de databaseserver heb je een Hadoop client installatie nodig, waarvan de tools gebruikt worden om de data op het cluster te benaderen. De preprocessor, "hdfs_stream" verricht het echte werk. Eigenlijk is het een script dat de individuele bestandspaden uit de locationfiles leest en de bestanden ophaalt uit het Hadoop cluster om ze net als reguliere lokale tekstbestanden benaderbaar te maken in de database als external table.

Een nadeel van deze methode in combinatie met meerdere files, al dan niet verdeeld over verschillende locationfiles, is dat als er een bronbestand in het Hadoop cluster wordt toegevoegd deze niet automatisch opgepikt wordt door de external table. Hiervoor kun je wel de external table command-line tool de optie –publish meegeven, zodat de external table definitie in Oracle niet opnieuw gecreëerd wordt, maar wel de locationfiles bijgewerkt worden met HDFS-paden naar op dat moment aanwezige bestanden in Hadoop.
Een voorbeeld van de creatie van een externe tabel in Oracle met de command line tool:

Hadoop jar $OSCH_HOME/jlib/orahdfs.jar oracle.Hadoop.exttab.ExternalTable \
-D oracle.Hadoop.exttab.sourceType=text \
-D oracle.Hadoop.exttab.fieldTerminator=, \
-D oracle.Hadoop.exttab.tableName=BACKBLAZE_EXT_TAB \
-D oracle.Hadoop.exttab.columnNames=MEASURE_DATE,SERIAL_NUMBER,MODEL,CAPACITY_BYTES,FAILURE \
-D oracle.Hadoop.exttab.colMap.MEASURE_DATE.columnType=DATE \
-D oracle.Hadoop.exttab.colMap.SERIAL_NUMBER.columnType=VARCHAR2 \
-D oracle.Hadoop.exttab.colMap.MODEL.columnType=VARCHAR2 \
-D oracle.Hadoop.exttab.colMap.CAPACITY_BYTES.columnType=NUMBER \ -D oracle.Hadoop.exttab.colMap.FAILURE.columnType=NUMBER \ -D oracle.Hadoop.exttab.colMap.MEASURE_DATE.dateMask=YYYY-MM-DD \ -D oracle.Hadoop.exttab.locationFileCount=8 \ -D oracle.Hadoop.exttab.dataPaths="hdfs:///user/public/backblaze/*.csv" \ -D oracle.Hadoop.exttab.columnCount=6 \ -D oracle.Hadoop.exttab.defaultDirectory=BACKBLAZE_EXT_DIR \ -D oracle.Hadoop.connection.url=jdbc:oracle:thin:@//db01.vanluytelaar.com:1521/db01.vanluytelaar.com \ -D oracle.Hadoop.connection.user=HDFSUSER \ -createTable

Oracle Loader for Hadoop

De Oracle Loader for Hadoop is een Java MapReduce applicatie, wat wil zeggen dat de resources van het Hadoop cluster gebruikt wordt om de data te filteren, partitioneren, sorteren en te converteren naar een specifiek formaat, waaronder Oracle Data Pump files. Het input formaat van de bestanden kan bijvoorbeeld delimited text, een Hive tabel, Avro of user defined zijn, waarbij de laatste een eigen Java implementatie vereist die een rij verwerkt. Je gebruikt deze loader om periodiek data vanuit Hadoop naar de Oracle database te laden.

Het idee is dat in de Oracle database een (gepartitioneerde) doeltabel bestaat. Op basis van de definitie van die tabel zal de Oracle Loader for Hadoop een taak definiëren die de brondata converteert naar de juiste datatypes van de doeltabel en opdeelt volgens het gebruikte partitioning schema. Wanneer de job wordt uitgevoerd op het Hadoop cluster zullen een geconfigureerd aantal Reduce-processen opgestart worden die parallel de data voor één of meerdere partities voor hun rekening nemen.

Een mooie toevoeging hierbij is de sampling feature, die een deel van de brondata analyseert en de toewijzingen van de partities aan een specifieke Reducer optimaliseert. Het is een load balancing mechanisme om het probleem van scheve verhoudingen in het datavolume op te lossen, bijvoorbeeld als één datapartitie in verhouding veel meer records bevat dan de anderen.

Oracle Data Integrator Application Adapter for Hadoop

Deze adapter is een verzameling Oracle Data Integrator (ODI) knowlegde modules, waarmee je op een visuele manier data van en naar het Hadoop cluster kunt laden. Deze knowledge modules genereren op een gebruikersvriendelijke manier de metadata om:

  • MapReduce jobs te creëren die data valideren en transformeren in Hadoop
  • Data te kunnen laden van een lokaal filesysteem in Hadoop
  • Data te laden van Hadoop naar een Oracle database

Oracle Data Integrator Application Adapter for Hadoop

Schematisch overzicht ODI Application adapter for Hadoop

De knowledge modules leunen stevig op Hive, een datawarehousesysteem dat als basis Hadoop gebruikt. Het biedt een omgeving om via Hive Query Language (HQL), een taal die in de basis heel sterk lijkt op SQL, waarbij de queries transparant worden omgezet in MapReduce-jobs.

Oracle GoldenGate for Big Bata

GoldenGate for Big Data is een extensie op het Java Delivery framework van Oracle GoldenGate wat integratie met Java applicaties mogelijk maakt. Met deze extensies is het mogelijk om Change Capture data (CDC) vanuit de database redo log files te streamen naar verschillende  applicaties waaronder:

  • Flume: een service voor het verzamelen en verplaatsen van grote hoeveelheden (log) data in een centrale datastore, gebaseerd op events.
  • Kafka: een gedistribueerde en fouttolerante message broker voor event data streams gebaseerd op het publish/subscribe mechanisme. Elke consumer data kan afnemen voor verdere verwerking en op zijn beurt weer een andere datastroom vormen, bijvoorbeeld met opslag in Hadoop als doel.
  • Cassandra: een high available gedistribueerde NoSQL Database voor opslag van grote en brede data.

Doordat de architectuur van GoldenGate (zie het Whitebook datareplicatie met GoldenGate) impliceert dat de brondatabase niet of nauwelijks belast wordt, maakt dit een uitermate geschikte oplossing voor het offloaden van data in een Big Data oplossing.

Apache Sqoop

Waarschijnlijk de meest eenvoudige manier om gegevens van een Oracle database naar Hadoop te laden is Sqoop (SQL to Hadoop). Het is een tool die ontworpen is om efficiënt en parallel data te verplaatsen tussen  en relationele of gestructureerde databases. Met Sqoop kunnen bijvoorbeeld data van tabellen, schema's en SQL-statements van een Oracle database geïmporteerd worden in HDFS of een Hive tabel. Het enige wat je verder nodig hebt is de JDBC driver van de database vendor. Sqoop maakt een Mapreduce job, waarbij elk van de reducers een deel van de data importeert op basis van de "split-by"-parameter, of als deze weggelaten wordt volgens de definitie van de primary key op de tabel. Als voorbeeld importeert het volgende commando de DISK_LOG tabel uit de Oracle database met 8 taken in een Hive tabel:

sqoop import --connect jdbc:oracle:thin:hdfsuser/password@//db01.vanluytelaar.com:1521/db01 --split-by ID --table DISK_LOG -m 8 --hive-import

Conclusie

Algemeen kunnen we stellen dat een Big Data platform pas interessant wordt als het te verwerken volume en (voorspellende) analyses daarop dusdanig omvangrijk worden dat het niet meer behapbaar is in een relationele database. Doordat in een Big Data platform de processen naar de data gebracht worden en niet andersom zoals in een traditionele database is het een architectuur die veel gemakkelijker horizontaal schaalbaar is, maar minder geschikt voor ad hoc analyse zoals we die kennen uit de traditionele Business Intelligence wereld.
Een steeds terugkerend architectuurplaatje is dan ook het centraal opslaan van brondata met hoog en groot volume, die op zichzelf meestal weinig businesswaarde biedt. Typische voorbeelden zijn:

  • transactiedata van een OLTP-systeem (via GoldenGate) in het Hadoop cluster
  • Ongefilterde data uit een IoT-netwerk
  • Clickdata uit een E-commerce systeem

Daarna kunnen specifieke taken gemaakt kunnen worden die deze data aggregeren en transformeren tot gestructureerde sets met waarde. Deze gereduceerde datasets kunnen vervolgens weer in een relationele database ingeladen worden en eventueel gecombineerd worden met bestaande masterdata voor verdere analyse.

Ik denk dat er dus nog zeker plaats is voor de relationele database naast het Big Data platform, met name voor exploitatie van data in Business Intelligence omgevingen waarbij snelle response gewenst is en waar we kunnen leunen op bewezen en breed geadopteerde kennis van bijvoorbeeld SQL en security. We moeten echter wel goed de markt in de gaten houden: tools zoals bijvoorbeeld Cloudera's Impala, een Massively Parallel Processing (MPP) SQL-implementatie voor Hadoop kunnen wellicht de noodzaak wegnemen om datasets te verplaatsen naar andere systemen zoals relationele databases voor real-time analyse.

Referenties

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.