En grundig introduktion til SQOOP-arkitektur

Apache Sqoop er et dataindtagelsesværktøj designet til effektiv overførsel af bulkdata mellem Apache Hadoop og strukturerede datalagre som relationsdatabaser og omvendt.

Som en del af denne blog vil jeg forklare, hvordan arkitekturen fungerer ved udførelse af en Sqoop-kommando. Jeg dækker detaljer som krukkegenerering via Codegen, udførelse af MapReduce-job og de forskellige faser, der er involveret i kørsel af en Sqoop import / eksportkommando.

Codegen

Det er vigtigt at forstå Codegen, da dette internt konverterer vores Sqoop-job til en krukke, der består af flere Java-klasser som POJO, ORM og en klasse, der implementerer DBWritable, der udvider SqoopRecord til at læse og skrive dataene fra relationsdatabaser til Hadoop & vice- omvendt.

Du kan oprette en Codegen eksplicit som vist nedenfor for at kontrollere de klasser, der er til stede som en del af krukken.

sqoop codegen \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_db \ -- username retail_user \ -- password ******* \ -- table products

Outputburken skrives i dit lokale filsystem. Du får en Jar-fil, Java-fil og java-filer, der er samlet til .class-filer:

Lad os se et uddrag af den kode, der genereres.

ORM-klasse for tabel 'produkter' // Objektrelationelt modal genereret til kortlægning:

Setter & Getter metoder til at få værdier:

Internt bruger det JDBC-udarbejdede udsagn til at skrive til Hadoop og ResultSet for at læse data fra Hadoop.

Import af Sqoop

Det bruges til at importere data fra traditionelle relationsdatabaser til Hadoop.

Lad os se et prøveuddrag til det samme.

sqoop import \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_db \ -- username retail_user \ -- password ******* \ -- table products \ -- warehouse-dir /user/jvanchir/sqoop_prac/import_table_dir \ -- delete-target-dir

Følgende trin finder sted internt under udførelsen af ​​sqoop.

Trin 1 : Læs data fra MySQL på streaming-måde. Det udfører forskellige operationer, før de skriver dataene i HDFS.

Som en del af denne proces genererer den først kode (typisk Map-reduceringskode), som kun er Java-kode. Ved hjælp af denne Java-kode vil den prøve at importere.

  • Generer koden. (Hadoop MR)
  • Kompilér koden, og generer Jar-filen.
  • Indsend Jar-filen, og udfør importhandlingerne

Under importen skal den tage bestemte beslutninger om, hvordan data skal opdeles i flere tråde, så Sqoop-import kan skaleres.

Trin 2 : Forstå datastrukturen og udfør CodeGen

Ved hjælp af ovenstående SQL-sætning henter den en post sammen med kolonnenavnene. Ved hjælp af disse oplysninger ekstraheres metadataoplysningerne for kolonnerne, datatype osv.

Trin 3 : Opret java-filen, kompiler den, og generer en jar-fil

Som en del af kodegenerering skal den forstå datastrukturen, og den skal anvende objektet på de indgående data internt for at sikre, at dataene kopieres korrekt til måldatabasen. Hver unikke tabel har en Java-fil, der taler om datastrukturen.

Denne jar-fil injiceres i Sqoop-binære filer for at anvende strukturen på indgående data.

Trin 4 : Slet målmappen, hvis den allerede findes.

Trin 5 : Importer dataene

Her opretter den forbindelse til en ressourcemanager, henter ressourcen og starter applikationsmasteren.

For at udføre lige fordeling af data mellem kortopgaverne udfører den internt en grænseforespørgsel baseret på den primære nøgle som standard

for at finde det mindste og maksimale antal optagelser i tabellen.

Based on the max count, it will divide by the number of mappers and split it amongst each mapper.

It uses 4 mappers by default:

It executes these jobs on different executors as shown below:

The default number of mappers can be changed by setting the following parameter:

So in our case, it uses 4 threads. Each thread processes mutually exclusive subsets, that is each thread processes different data from the others.

To see the different values, check out the below:

Operations that are being performed under each executor nodes:

In case you perform a Sqooop hive import, one extra step as part of the execution takes place.

Step 6: Copy data to hive table

Sqoop Export

This is used to export data from Hadoop into traditional relational databases.

Let’s see a sample snippet for the same:

sqoop export \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_export \ -- username retail_user \ -- password ******* \ -- table product_sqoop_exp \ -- export-dir /user/jvanchir/sqoop_prac/import_table_dir/products

On executing the above command, the execution steps (1–4) similar to Sqoop import take place, but the source data is read from the file system (which is nothing but HDFS). Here it will use boundaries upon block size to divide the data and it is internally taken care by Sqoop.

The processing splits are done as shown below:

After connecting to the respective database to which the records are to be exported, it will issue a JDBC insert command to read data from HDFS and store it into the database as shown below.

Now that we have seen how Sqoop works internally, you can determine the flow of execution from jar generation to execution of a MapReduce task on the submission of a Sqoop job.

Note: The commands that were executed related to this post are added as part of my GIT account.

Similarly, you can also read more here:

  • Hive Arkitektur i dybden med kode .
  • HDFS-arkitektur i dybden med kode .

Hvis du også vil, kan du oprette forbindelse til mig på LinkedIn - Jayvardhan Reddy.

Hvis du nød at læse denne artikel, kan du klikke på klappen og fortælle andre om det. Hvis du vil have mig til at tilføje noget andet, er du velkommen til at efterlade et svar?