Výukový program Apache Sqoop: Architextura, příkazy a příklad

⚡ Chytré shrnutí

Apache Sqoop přesouvá hromadná data mezi relačními databázemi a HDFS pomocí architektury konektorů a generuje úlohy MapReduce, které importují tabulky do Hive nebo HBase a exportují zpracované výsledky zpět do zdrojového systému.

  • 🔘 Definice: Sqoop přenáší hromadná data mezi strukturovanými úložišti a HDFS prostřednictvím konektorové vrstvy založené na pluginech.
  • ☑️ Archistruktura: Každá úloha se zkompiluje do programu MapReduce, který pracuje pouze s mapou a jehož úlohy paralelně stahují jednotlivé části tabulky.
  • (Tj. Konektory: Kryt dodávaných ovladačů MySQL, PostgreSQL, Oracle, SQL Server a DB2, plus obecný záložní JDBC.
  • 🧪 příkazy: Nástroj pro import načte tabulku do HDFS, Hive nebo HBase; nástroj pro export vloží zpracované soubory zpět do tabulky.
  • 🛠️ Režimy zatížení: Úplné načtení kopíruje celou tabulku, zatímco inkrementální režimy append a lastmodified načítají pouze nové řádky.
  • ⚠️ Stav projektu: Sqoop se v červenci 2021 přestěhoval do podkroví Apache Attic, takže Spark JDBC a NiFi nyní nesou nové kanály (pipeline).

Výukový program Apache Sqoop pokrývající architekturu, konektory a příkazy pro import a export

Co je SQOOP v Hadoopu?

Apache Sqoop (SQL-to-Hadoop) je nástroj určený pro podporu hromadného exportu a importu dat do HDFS ze strukturovaných datových úložišť, jako jsou relační databáze, podnikové datové sklady a NoSQL systémy. Jedná se o nástroj pro migraci dat založený na architektuře konektorů, která podporuje pluginy pro zajištění konektivity k novým externím systémům.

Příkladem použití Hadoop Sqoop je podnik, který spouští noční import Sqoop pro načtení denních dat z produkčního transakčního RDBMS do Úl datový sklad pro další analýzu.

Dále se v tomto tutoriálu Apache Sqoop seznámíme s architekturou Apache Sqoop.

Sqoop Architecture

Všechny stávající Systémy pro správu databází jsou navrženy s SQL standard v mysli. Každý DBMS se však do určité míry liší s ohledem na dialekt. Tento rozdíl tedy představuje problémy, pokud jde o přenosy dat mezi systémy. Sqoop Connectors jsou komponenty, které pomáhají překonat tyto výzvy.

Přenos dat mezi Sqoop Hadoop a externím úložným systémem je možný pomocí konektorů Sqoop.

Sqoop má konektory pro práci s řadou oblíbených relačních databází, včetně MySQL, PostgreSQL, Oracle, SQL Server a DB2. Každý z těchto konektorů ví, jak interagovat s přidruženým DBMS. K dispozici je také obecný konektor JDBC pro připojení k jakékoli databázi, která podporuje Javaprotokol JDBC. Kromě toho Sqoop také poskytuje optimalizované MySQL a PostgreSQL konektory, které používají rozhraní API specifická pro databázi k efektivnímu provádění hromadných přenosů.

Níže uvedený diagram umisťuje klienta Sqoop mezi externí úložiště dat a cluster Hadoop, s vrstvou konektoru na jedné straně a HDFS, Hive a HBase na straně druhé.

Schéma architektury Sqoop znázorňující vrstvu konektoru propojující RDBMS s clusterem Hadoop

Pod vrstvou konektoru Sqoop generuje Java třída, která zrcadlí jeden řádek tabulky a poté odešle pouze mapu MapReduce úloha. Každá úloha mapování čte svůj vlastní segment rozsahu rozdělených sloupců, takže propustnost se škáluje s počtem mapovačů, nikoli s jedním kurzorem JDBC.

Kromě toho nabízí Sqoop různé konektory třetích stran pro datová úložiště, od podnikových datové sklady (včetně Netezza, Teradata a Oracle) do obchodů NoSQL (jako je Couchbase). Tyto konektory se však nedodávají se svazkem Sqoop; ty je třeba stáhnout samostatně a lze je snadno přidat do stávající instalace Sqoop.

Proč potřebujeme Sqoop?

Analytické zpracování pomocí Hadoop vyžaduje načítání obrovského množství dat z různých zdrojů do clusterů Hadoop. Tento proces hromadného načítání dat do Hadoopu z heterogenních zdrojů a jejich následného zpracování s sebou nese určitou sadu výzev. Udržování a zajištění konzistence dat a zajištění efektivního využití zdrojů jsou některé faktory, které je třeba zvážit před výběrem správného přístupu k načítání dat.

Hlavní problémy:

  1. Načítání dat pomocí skriptů — Tradiční přístup skriptování dat není vhodný pro hromadné načítání dat do Hadoopu; je neefektivní a velmi časově náročný.
  2. Přímý přístup k externím datům prostřednictvím aplikace Map-Reduce — Poskytování přímého přístupu k datům uloženým v externích systémech (bez načítání do Hadoopu) pro aplikace map-reduce tyto aplikace komplikuje. Tento přístup tedy není proveditelný.

Kromě schopnosti pracovat s obrovskými daty dokáže Hadoop pracovat s daty v několika různých formách. Pro načítání takových heterogenních dat do Hadoopu byly vyvinuty různé nástroje. Sqoop a Tok jsou dva takové nástroje načítání dat.

Dále v tomto tutoriálu Sqoop s příklady se dozvíme o rozdílu mezi Sqoop, Flume a HDFS.

Sqoop vs Flume vs HDFS v Hadoopu

Sqoop Tok HDFS
Sqoop se používá pro import dat ze strukturovaných datových zdrojů, jako je RDBMS. Flume se používá pro přesun hromadných datových proudů do HDFS. HDFS je distribuovaný souborový systém používaný ekosystémem Hadoop k ukládání dat.
Sqoop má architekturu založenou na konektorech. Konektory vědí, jak se připojit k příslušnému zdroji dat a načíst data. Flume má architekturu založenou na agentech. Zde je napsán kód (který se nazývá 'agent'), který se stará o načítání dat. HDFS má distribuovanou architekturu, kde jsou data distribuována přes více datových uzlů.
HDFS je cíl pro import dat pomocí Sqoop. Data proudí do HDFS přes žádný nebo více kanálů. HDFS je konečným cílem pro ukládání dat.
Načítání dat Sqoop není řízeno událostmi. Načtení dat kanálu může být řízeno událostí. HDFS pouze ukládá data, která mu byla poskytnuta jakýmkoli způsobem.
Aby bylo možné importovat data ze zdrojů strukturovaných dat, je třeba používat pouze příkazy Sqoop, protože jeho konektory vědí, jak interagovat se zdroji strukturovaných dat a získávat z nich data. Aby bylo možné načíst streamovaná data, jako jsou tweety generované na Twitteru nebo soubory protokolu webového serveru, měl by být použit Flume. Agenti flume jsou navrženi pro načítání streamovaných dat. HDFS má vlastní vestavěné příkazy shellu pro ukládání dat. HDFS nemůže importovat streamovaná data.

Klíčové vlastnosti Sqoopu

Výše uvedené srovnání vysvětluje, kam Sqoop patří. Níže uvedená sada funkcí určuje, zda se hodí pro konkrétní úlohu ingestování.

  • Plně naložen: Jeden příkaz zkopíruje celou tabulku a import-all-tables zkopíruje každou tabulku ve schématu najednou.
  • Přírůstkové zatížení: append způsob tracks monotónně rostoucí sloupec, jako je například zástupný klíč, zatímco lastmodified způsob tracks sloupec s časovým razítkem, takže se přenášejí pouze nové nebo změněné řádky.
  • Paralelní přenos: Rozdělený sloupec rozděluje rozsah klíčů mezi úlohy mapování a počet mapovačů určuje, kolik jich bude spuštěno najednou.
  • Import dotazů ve volném formátu: Výsledek libovolného SQL příkazu lze importovat místo celé tabulky, což ponechává spojení a filtry na straně databáze.
  • Přímé naložení do skladu: Import může vytvořit a naplnit Úl tabulku nebo zapisovat přímo do tabulky HBase, místo aby se zastavilping v nezpracovaných souborech HDFS.
  • Komprese a formáty souborů: Výstup lze zapsat jako text s oddělovači, SequenceFile, Avro nebo Parquet s volitelnou kompresí na úrovni kodeků.
  • Zabezpečení Sqoop se integruje s Kerberos a přihlašovací údaje lze číst ze souboru s hesly nebo je lze vyzvat k zadání namísto zadávání na příkazovém řádku.

Příkazy pro import a export Sqoop

Oba směry přenosu probíhají prostřednictvím jednoho nástroje příkazového řádku. Nástroj pro import přesouvá řádky z databáze do Hadoopu a nástroj pro export přesouvá soubory z Hadoopu zpět do databázové tabulky.

Typický import pojmenovává JDBC připojení, zdrojovou tabulku, cílový adresář, rozdělený sloupec a počet mapperů:

sqoop import \
  --connect jdbc:mysql://localhost:3306/employees \
  --username hadoop \
  --password-file /user/hadoop/.mysql.password \
  --table employees \
  --target-dir /user/hadoop/warehouse/employees \
  --split-by emp_no \
  --num-mappers 4

Export obrací tok. Přečte soubory s oddělovači, které se již nacházejí v adresáři HDFS, a vloží je do existující tabulky, takže cílová tabulka musí být nejprve vytvořena:

sqoop export \
  --connect jdbc:mysql://localhost:3306/employees \
  --username hadoop \
  --password-file /user/hadoop/.mysql.password \
  --table employee_summary \
  --export-dir /user/hadoop/warehouse/employee_summary \
  --input-fields-terminated-by ','

Noční úloha málokdy potřebuje celou tabulku dvakrát. Inkrementální import zaznamená nejvyšší hodnotu, kterou již zaznamenal, a při dalším spuštění začne odtud:

sqoop import \
  --connect jdbc:mysql://localhost:3306/sales \
  --table orders \
  --incremental append \
  --check-column order_id \
  --last-value 15000 \
  --target-dir /user/hadoop/warehouse/orders

Toto jsou argumenty, které se objevují téměř v každé práci:

Argument Co ovládá
--connect JDBC URL zdrojové nebo cílové databáze.
--table Tabulka, ze které se čte při importu nebo do které se zapisuje při exportu.
--target-dir Adresář HDFS, který přijímá import. Nesmí již existovat.
--export-dir Adresář HDFS, jehož soubory jsou čteny exportem.
--split-by Sloupec, jehož rozsah je rozdělen mezi úlohy mapování.
--num-mappers (-m) Počet paralelních mapových úloh. Výchozí hodnota je čtyři.
--incremental Vybere append or lastmodified přeměna trackrál.
--hive-import Vytvoří odpovídající tabulku Hive a načte do ní importovaná data.

⚠️ Pozor: Export není jednorázová transakce. Každá úloha mapování potvrzuje svou vlastní dávku, takže selhání v polovině může zanechat část dat v cílové tabulce. Směrujte zápis přes pracovní tabulku, když zápis musí být proveden typu „všechno nebo nic“.

Stav projektu Sqoop a moderní alternativy

Před odesláním kteréhokoli z výše uvedených příkazů do plánovače je důležitý jeden detail verze.

Vývojáři Sqoop hlasovali pro ukončení projektu v červnu 2021 a přechod na Apačské podkroví dokončeno v červenci 2021. Webové stránky, e-mailové seznamy, git repozitář, problém tracSoubory ke stažení i soubory ker zůstávají k dispozici, ale pouze pro čtení, a další vydání se neplánují. Poslední produkční verzí je Sqoop 1.4.7 z roku 2017; samostatná řada Sqoop 2 (1.99.x) nikdy nedosáhla parity funkcí a nikdy nebyla prohlášena za připravenou k produkčnímu prostředí.

Stávající úlohy Sqoop stále běží a komerční distribuce Hadoopu nadále dodávají a podporují tento nástroj na svých vlastních platformách. Nové ingestování je však obvykle postaveno na jedné z těchto platforem:

Alternativní Nejlépe sedí
Spark s datovým zdrojem JDBC Dávková tabulka extracts, které již sedí uvnitř Spark pipeline s rozdělenými čtecími parametry místo mapovačů.
Apache NiFi Vizuálně konfigurované směrování založené na toku dat mezi mnoha heterogenními systémy.
Kafka Connect s konektorem CDC Nepřetržitý sběr změnových dat namísto nočního dávkového okna.
Spravované ETL platformy, jako například Talend Předpřipravené konektory, plánování a linie bez ručně psaných úloh.

Nejčastější dotazy

Sqoop 1 je jediný klient příkazového řádku, který se používá v každém tutoriálu. Sqoop 2 přidal server, REST API a webové uživatelské rozhraní, ale nikdy nedosáhl parity funkcí a nebyl označen jako připravený pro produkční prostředí, takže verze 1.4.x zůstala standardní.

Modeluje profilování zdrojových tabulek pro odvození typů, klíčů a rozdělení sloupců, navrhuje hranice oddílů z distribuce řádků a signalizuje posun schématu před přerušením načítání. Také navrhuje inkrementální kontrolu sloupců detekcí monotónního chování nebo chování s časovým razítkem ve vzorových datech.

Copilot rychle navrhuje kostru argumentů, ale kombinuje syntaxi Sqoop 1 a Sqoop 2 a vymýšlí příznaky, které žádná verze neakceptuje. Před naplánováním úlohy zkontrolujte každý argument v uživatelské příručce Sqoop pro nainstalovanou verzi.

Sqoop nemůže samostatně vybrat rozdělený sloupec a import selže. Buď explicitně pojmenujte vhodný číselný nebo datový sloupec jako rozdělený sloupec, nebo vynuťte jednu úlohu mapování, která serializuje přenos.

Heslo zadané na příkazovém řádku je viditelné pro kohokoli, kdo zobrazuje procesy. Uložte ho do souboru HDFS, který je čitelný pouze pro vlastníka úlohy, a uveďte na něj argument password-file, nebo použijte interaktivní výzvu.

Výchozí je text s oddělenými částmi. Podporovány jsou také SequenceFile, Avro a Parquet, každý z nich je vybrán vlastním argumentem. Sloupcový Parquet je vhodný pro pozdější analytické dotazy, zatímco text s oddělenými částmi zůstává nejjednodušší pro kontrolu a zadání do exportu.

Čtyři jsou výchozí hodnota a rozumný začátek. Více mapovačů znamená více souběžných připojení k databázi, takže praktickým stropem je to, co zdrojový server toleruje, spíše než to, co dokáže naplánovat cluster Hadoop.

A Java běhové prostředí, nakonfigurovaný Hadoop klient, který má přístup ke clusteru, a soubor JAR ovladače JDBC pro cílovou databázi umístěný v adresáři knihovny Sqoop. Chybějící soubory JAR ovladače jsou nejčastějším selháním při prvním spuštění.

Shrňte tento příspěvek takto: