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.

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é.
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:
- 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ý.
- 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-tableszkopíruje každou tabulku ve schématu najednou. - Přírůstkové zatížení:
appendzpůsob tracks monotónně rostoucí sloupec, jako je například zástupný klíč, zatímcolastmodifiedzpů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. |

