Az SQOOP architektúra alapos bemutatása

Az Apache Sqoop egy adatbeviteli eszköz, amelyet a tömeges adatok hatékony átvitelére terveztek az Apache Hadoop és a strukturált adattárolók, például relációs adatbázisok között, és fordítva.

A blog részeként elmagyarázom, hogyan működik az architektúra egy Sqoop parancs végrehajtásakor. Kitérek olyan részletekre, mint a jar létrehozása a Codegen segítségével, a MapReduce job végrehajtása és az Sqoop import / export parancs futtatásának különböző szakaszai.

Codegen

A Codegen megértése elengedhetetlen, mivel ez belsőleg átalakítja Sqoop munkánkat egy jar-ba, amely több Java osztályból áll, mint például POJO, ORM, és egy osztályból, amely a DBWritable-t valósítja meg, kiterjesztve az SqoopRecord-ot a relációs adatbázisok adatainak olvasására és írására Hadoop-ba és helyettesekre. versa.

Létrehozhat egy Codegen kódot az alábbiak szerint, hogy ellenőrizze a jar részeként jelenlévő osztályokat.

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

A kimeneti jar a helyi fájlrendszerbe kerül. Kap egy Jar fájlt, Java fájlt és java fájlokat, amelyeket .class fájlokká fordítanak:

Lássuk a létrehozandó kódrészletet.

ORM osztály a „termékek” táblához // Objektum-relációs mod, amelyet leképezésre hoztak létre:

Setter & Getter módszerek az értékek megszerzéséhez:

Belsőleg a JDBC által készített utasításokat használja a Hadoop-hoz való íráshoz, a ResultSet pedig a Hadoop-ból származó adatok olvasásához.

Sqoop Import

A hagyományos relációs adatbázisokból származó adatok Hadoopba történő importálására szolgál.

Lássunk egy mintadarabot ugyanarról.

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

A következő lépések belsőleg zajlanak az sqoop végrehajtása során.

1. lépés : Streaming módon olvassa el a MySQL adatait. Különböző műveleteket végez, mielőtt az adatokat HDFS-be írja.

Ennek a folyamatnak a részeként először előállít egy kódot (tipikus térképcsökkentő kód), amely nem más, mint Java kód. A Java kód használatával megpróbálja importálni.

  • Generálja a kódot. (Hadoop MR)
  • Fordítsa le a kódot, és állítsa elő a Jar fájlt.
  • Küldje el a Jar fájlt, és hajtsa végre az importálási műveleteket

Az importálás során bizonyos döntéseket kell hoznia arról, hogy az adatokat hogyan lehet több szálra osztani, hogy az Sqoop import méretezhető legyen.

2. lépés : Ismerje meg az adatok szerkezetét és hajtsa végre a CodeGen programot

A fenti SQL utasítás segítségével egy rekordot fog kapni az oszlopok nevével együtt. Ezen információk felhasználásával kivonja az oszlopok, az adattípus stb. Metaadatait.

3. lépés : Hozza létre a java fájlt, fordítsa le és hozzon létre egy jar fájlt

A kódgenerálás részeként meg kell értenie az adatok szerkezetét, és ezt az objektumot belsőleg kell alkalmaznia a bejövő adatokra, hogy megbizonyosodjon arról, hogy az adatokat helyesen másolták-e a céladatbázisra. Minden egyedi táblának van egy Java fájlja, amely az adatok szerkezetéről szól.

Ezt a jar fájlt befecskendezik az Sqoop bináris fájlokba, hogy a struktúrát a bejövő adatokra alkalmazzák.

4. lépés : Törölje a célkönyvtárat, ha az már létezik.

5. lépés : Importálja az adatokat

Itt csatlakozik egy erőforrás-kezelőhöz, megszerzi az erőforrást és elindítja az alkalmazásfőnököt.

Az adatok egyenlő elosztása a térképi feladatok között belsőleg végrehajt egy határkérdést az elsődleges kulcs alapján

hogy megtalálja a táblázatban a rekordok minimális és maximális számát.

A maximális szám alapján el fogja osztani a leképezők számával és felosztja az egyes térképezők között.

Alapértelmezés szerint 4 leképezőt használ:

Ezeket a feladatokat különböző végrehajtókon hajtja végre, az alábbiak szerint:

A leképezők alapértelmezett száma a következő paraméter beállításával módosítható:

Tehát esetünkben 4 szálat használ. Mindegyik szál egymást kizáró részhalmazokat dolgoz fel, vagyis mindegyik szál más adatokat dolgoz fel, mint a többi.

A különböző értékek megtekintéséhez nézze meg az alábbiakat:

Az egyes végrehajtó csomópontok alatt végrehajtott műveletek:

Ha Sqooop kaptárimportálást hajt végre, a végrehajtás részeként egy további lépés történik.

6. lépés : Adatok másolása a kaptár táblába

Sqoop Export

Ezt használják az adatok exportálására a Hadoop-ból a hagyományos relációs adatbázisokba.

Lássunk egy mintadarabot ugyanarról:

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 Architecture in Depth with code.
  • HDFS Architecture in Depth with code.

If you would like too, you can connect with me on LinkedIn - Jayvardhan Reddy.

If you enjoyed reading this article, you can click the clap and let others know about it. If you would like me to add anything else, please feel free to leave a response ?