Підручник з Apache Sqoop: ArchiТекстура, команди та приклад
⚡ Розумний підсумок
Apache Sqoop переміщує великі обсяги даних між реляційними базами даних та HDFS, використовуючи архітектуру конекторів, генеруючи завдання MapReduce, які імпортують таблиці в Hive або HBase та експортують оброблені результати назад у вихідну систему.
Що таке SQOOP у Hadoop?
Апач Скуп (SQL-to-Hadoop) – це інструмент, призначений для підтримки масового експорту та імпорту даних у HDFS зі структурованих сховищ даних, таких як реляційні бази даних, корпоративні сховища даних та NoSQL-системи. Це інструмент міграції даних, заснований на архітектурі конекторів, яка підтримує плагіни для забезпечення підключення до нових зовнішніх систем.
Прикладом використання Hadoop Sqoop є підприємство, яке виконує нічний імпорт Sqoop для завантаження даних за день із робочої транзакційної RDBMS у Вулик сховище даних для подальшого аналізу.
Далі в цьому посібнику з Apache Sqoop ми дізнаємося про архітектуру Apache Sqoop.
Скуп Archiтектура
Все існуюче Системи управління базами даних розроблені з SQL стандарт на увазі. Проте кожна СУБД певною мірою відрізняється щодо діалекту. Таким чином, ця різниця створює проблеми, коли мова йде про передачу даних між системами. Конектори Sqoop — це компоненти, які допомагають подолати ці проблеми.
Передача даних між Sqoop Hadoop і зовнішньою системою зберігання даних стала можливою за допомогою конекторів Sqoop.
Sqoop має конектори для роботи з низкою популярних реляційних баз даних, у тому числі MySQL, PostgreSQL, Oracle, SQL Server і DB2. Кожен із цих конекторів знає, як взаємодіяти з пов’язаною з ним СУБД. Існує також загальний конектор JDBC для підключення до будь-якої бази даних, яка підтримує Javaпротокол JDBC. Крім того, Sqoop також забезпечує оптимізований MySQL та PostgreSQL конектори, які використовують специфічні для бази даних API для ефективного виконання масових передач.
На діаграмі нижче клієнт Sqoop розміщено між зовнішнім сховищем даних та кластером Hadoop, з рівнем конектора з одного боку та HDFS, Hive та HBase з іншого.
Під шаром з'єднувача Sqoop генерує Java клас, який відображає один рядок таблиці, а потім надсилає лише карту MapReduce завдання. Кожне завдання зіставлення зчитує власний фрагмент діапазону розділених стовпців, тому пропускна здатність масштабується залежно від кількості мапперів, а не від одного курсора JDBC.
На додаток до цього, Sqoop має різні сторонні конектори для сховищ даних, починаючи від корпоративних сховища даних (включаючи Netezza, Teradata та Oracle) до магазинів NoSQL (таких як Couchbase). Однак ці роз’єми не постачаються з пакетом Sqoop; їх потрібно завантажити окремо, і їх можна легко додати до наявної інсталяції Sqoop.
Навіщо нам Sqoop?
Аналітична обробка за допомогою Hadoop вимагає завантаження величезних обсягів даних із різних джерел у кластери Hadoop. Цей процес масового завантаження даних у Hadoop із різнорідних джерел і подальшої їх обробки супроводжується певним набором проблем. Підтримка та забезпечення узгодженості даних і забезпечення ефективного використання ресурсів – це деякі фактори, які слід враховувати перед вибором правильного підходу до завантаження даних.
Основні проблеми:
- Завантаження даних за допомогою скриптів — Традиційний підхід використання скриптів для завантаження даних не підходить для масового завантаження даних у Hadoop; цей підхід є неефективним та дуже трудомістким.
- Прямий доступ до зовнішніх даних через застосунок Map-Reduce — Надання прямого доступу до даних, що зберігаються на зовнішніх системах (без завантаження в Hadoop), для програм, що використовують метод зменшення мап, ускладнює ці програми. Тому цей підхід не є здійсненним.
Окрім можливості роботи з величезними обсягами даних, Hadoop може працювати з даними в кількох різних формах. Тому для завантаження таких різнорідних даних у Hadoop були розроблені різні інструменти. Скуп та Потік є два таких інструменти завантаження даних.
Далі в цьому підручнику Sqoop із прикладами ми дізнаємося про різницю між Sqoop, Flume і HDFS.
Sqoop проти Flume проти HDFS у Hadoop
| Скуп | Потік | HDFS |
|---|---|---|
| Sqoop використовується для імпорту даних зі структурованих джерел даних, таких як RDBMS. | Flue використовується для переміщення масових потокових даних у HDFS. | HDFS — це розподілена файлова система, яка використовується екосистемою Hadoop для зберігання даних. |
| Sqoop має архітектуру на основі конектора. Конектори знають, як підключитися до відповідного джерела даних і отримати дані. | Flume має агентну архітектуру. Тут написаний код (який називається «агентом»), який піклується про отримання даних. | HDFS має розподілену архітектуру, де дані розподіляються між кількома вузлами даних. |
| HDFS – це місце призначення для імпорту даних за допомогою Sqoop. | Дані надходять до HDFS через нуль або більше каналів. | HDFS є ідеальним місцем для зберігання даних. |
| Завантаження даних Sqoop не керується подіями. | Завантаження даних Flume може керуватися подією. | HDFS просто зберігає дані, надані їй будь-якими засобами. |
| Щоб імпортувати дані з джерел структурованих даних, потрібно використовувати лише команди Sqoop, оскільки його конектори знають, як взаємодіяти з джерелами структурованих даних і отримувати дані з них. | Для завантаження потокових даних, таких як твіти, створені в Twitter, або файли журналів веб-сервера, слід використовувати Flume. Агенти Flume створені для отримання потокових даних. | HDFS має власні вбудовані команди оболонки для зберігання даних. HDFS не може імпортувати потокові дані. |
Основні характеристики Sqoop
Наведене вище порівняння пояснює, до якого місця належить Sqoop. Наведений нижче набір функцій визначає, чи підходить він для конкретного завдання з обробки даних.
- Повне завантаження: Одна команда копіює всю таблицю, і
import-all-tablesкопіює кожну таблицю в схемі за один прохід. - Збільшувальне навантаження:
appendрежим tracks монотонно зростаючий стовпець, такий як сурогатний ключ, тоді якlastmodifiedрежим tracks стовпець з міткою часу, тому передаються лише нові або змінені рядки. - Паралельне перенесення: Розділений стовпець розділяє діапазон ключів між завданнями мапування, а кількість маперів встановлює, скільки з них виконуються одночасно.
- Імпорт запитів у довільній формі: Результат довільного SQL-запиту можна імпортувати замість цілої таблиці, що зберігає об'єднання та фільтри на стороні бази даних.
- Пряме завантаження на склад: Імпорт може створити та заповнити Вулик таблицю або записувати безпосередньо в таблицю HBase, а не зупинятиping у необроблених файлах HDFS.
- Стиснення та формати файлів: Вивід може бути записаний у вигляді тексту з роздільниками, SequenceFile, Avro або Parquet, з додатковим стисненням на рівні кодека.
- Безпека: Sqoop інтегрується з Kerberos, а облікові дані можна зчитувати з файлу паролів або запитувати на їх введення замість того, щоб вводити їх у командному рядку.
Команди імпорту та експорту Sqoop
Обидва напрямки передачі виконуються через одну утиліту командного рядка. Інструмент імпорту переміщує рядки з бази даних до Hadoop, а інструмент експорту переміщує файли з Hadoop назад у таблицю бази даних.
Типовий імпорт вказує на JDBC-з'єднання, вихідну таблицю, каталог призначення, розділений стовпець та кількість маперів:
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
Експорт виконує зворотний потік. Він зчитує файли з роздільниками, які вже знаходяться в каталозі HDFS, і вставляє їх у існуючу таблицю, тому цільову таблицю потрібно створити спочатку:
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 ','
Щоденне завдання рідко потребує двічі всієї таблиці. Інкрементальний імпорт записує найвище значення, яке вже було отримано, і починає звідти під час наступного запуску:
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
Ці аргументи зустрічаються майже в кожній роботі:
| аргументація | Що воно контролює |
|---|---|
--connect |
JDBC URL вихідної або цільової бази даних. |
--table |
Таблиця, з якої зчитується під час імпорту або записується під час експорту. |
--target-dir |
Каталог HDFS, який отримує імпорт. Він ще не повинен існувати. |
--export-dir |
Каталог HDFS, файли якого зчитуються експортом. |
--split-by |
Стовпець, діапазон якого розділено між завданнями карти. |
--num-mappers (-m) |
Кількість паралельних завдань з картами. Значення за замовчуванням — чотири. |
--incremental |
Вибирає append or lastmodified зміна tracкороль. |
--hive-import |
Створює відповідну таблицю Hive та завантажує в неї імпортовані дані. |
⚠️ Увага: Експорт не є окремою транзакцією. Кожне завдання зіставлення записів створює власний пакет, тому збій на півдорозі може залишити частину даних у цільовій таблиці. Маршрутизуйте запис через проміжну таблицю, коли завантаження має бути за принципом «все або нічого».
Стан проекту Sqoop та сучасні альтернативи
Одна деталь версії має значення, перш ніж будь-яка з наведених вище команд потрапить до планувальника.
Розробники Sqoop проголосували за завершення проекту у червні 2021 року, а перехід до Апачі Аттік завершено у липні 2021 року. Вебсайт, списки розсилки, репозиторій git, випуск tracker та завантаження залишаються доступними, але лише для читання, і подальші релізи не плануються. Останній реліз для виробництва — Sqoop 1.4.7 у 2017 році; окрема лінійка Sqoop 2 (1.99.x) так і не досягла паритету функцій і ніколи не була оголошена готовою до виробництва.
Існуючі завдання Sqoop все ще виконуються, а комерційні дистрибутиви Hadoop продовжують постачати та підтримувати інструмент на власних платформах. Однак нова робота з прийому даних зазвичай будується на одній із цих платформ:
| Alternative | Найкраще підходить |
|---|---|
| Spark з джерелом даних JDBC | Таблиця пакетів extracts, які вже знаходяться всередині Spark конвеєр, з розділеним читанням замість мапперів. |
| Apache NiFi | Візуально налаштована маршрутизація на основі потоку між багатьма гетерогенними системами. |
| Kafka Connect з роз'ємом CDC | Безперервний збір даних про зміни замість щонічного пакетного вікна. |
| Керовані ETL-платформи, такі як Таленд | Попередньо створені з'єднувачі, планування та походження без рукописних завдань. |

