Обзор работы Sqoop
Обзор
Sqoop — это инструмент для переноса данных между Hadoop и реляционной базой данных или мейнфреймом, использующий YARN для параллельных вычислений. В большинстве случаев Sqoop применяется для импорта данных из системы управления базами данных (СУБД), таких как PostgreSQL, MySQL и других, в распределенную файловую систему Hadoop (HDFS) — с последующей обработкой данных в Hadoop MapReduce и экспортом данных назад в СУБД.
Основные функции Sqoop:
-
Параллельный импорт и экспорт
Sqoop позволяет импортировать данные из RDBMS и мэйнфреймов в HDFS, Hive или HBase, и экспортировать данные из HDFS в удаленные хранилища данных. Sqoop CLI поддерживает несколько вариантов импорта, таких как импорт всех таблиц, определенных столбцов и строк, результатов SQL-запроса, инкрементный импорт и несколько специфических для RDBMS опций.
-
SQL-запросы
С помощью команды
sqoop eval
можно выполнять простые SQL-запросы в базе данных и отображать результаты. -
Запросы к базе данных
Sqoop предоставляет команды, которые позволяют получить список доступных баз данных на хосте и список доступных таблиц в базе данных.
-
Генерация кода
С помощью команды
sqoop codegen
можно генерировать DAO-классы на основе структуры схемы таблицы. -
Интеграция с Kerberos Security
Sqoop поддерживает протокол аутентификации Kerberos, который позволяет хостам общаться через незащищенную сеть.
Большинство функций предоставляются в виде команд Sqoop CLI.
Ниже пример вывода команды sqoop help
:
usage: sqoop COMMAND [ARGS] Available commands: codegen Generate code to interact with database records create-hive-table Import a table definition into Hive eval Evaluate a SQL statement and display the results export Export an HDFS directory to a database table help List available commands import Import a table from a database to HDFS import-all-tables Import tables from a database to HDFS import-mainframe Import datasets from a mainframe server to HDFS job Work with saved jobs list-databases List available databases on a server list-tables List available tables in a database merge Merge results of incremental imports metastore Run a standalone Sqoop metastore version Display version information
Компоненты
В Arenadata Hadoop сервис Sqoop имеет два компонента: Sqoop Metastore и Sqoop Client.
Sqoop Metastore хранит информацию о созданных задачах (jobs). Эти задачи содержат параметры для команды import
или export
и могут быть повторно запущены по своему идентификатору.
Компонент Sqoop Client позволяет выполнять команды Sqoop CLI.
Процесс выполнения команд import и export
Для выполнения задачи импорта или экспорта Sqoop сначала собирает метаданные из целевой базы данных, затем создает задачу только для мепперов (mapper), где каждый меппер подключается к базе данных через JDBC и копирует часть данных в HDFS.
При импорте целых таблиц Sqoop считывает строки таблицы построчно в HDFS. При импорте из мэйнфрейма Sqoop считывает записи из каждого набора данных в HDFS.
Результатом импорта является набор файлов, содержащих копию импортированной таблицы или наборов данных. Эти файлы могут быть в виде текстовых файлов с разделителями (например, с запятыми или символами табуляции, разделяющими каждое поле) или двоичных файлов Avro или SequenceFiles.
Во время экспорта Sqoop анализирует набор файлов данных из HDFS, разделяет их на отдельные записи и вставляет их как новые строки в целевую базу данных.
Интеграция с другими сервисами
Hive
Sqoop может создать представление данных в Hive в процессе импорта или уже после загрузки данных в HDFS.
Если таблица Hive уже существует, ее можно перезаписать с помощью опции --hive-overwrite
.
Если данные были скопированы непосредственно в HDFS, Sqoop может импортировать их в Hive, сгенерировав скрипт Hive. Этот скрипт включает операцию CREATE TABLE
, которая создает столбцы с использованием типов Hive, и оператор LOAD DATA INPATH
для перемещения файлов данных в директорию хранилища Hive.
Sqoop может импортировать данные в определенную партицию в Hive, если указаны аргументы --hive-partition-key
и --hive-partition-value
.
Более подробно о том, как импортировать данные в Hive с помощью Sqoop, читайте в статье Примеры использования Sqoop для импорта и экспорта данных между PostgreSQL и Hive.
HBase
Sqoop также может импортировать данные в таблицу HBase, если указана опция --hbase-table
. Каждая строка исходной таблицы будет преобразована в операцию HBase Put
для строки в таблице назначения. Ключ для каждой строки берется из столбца исходной таблицы.
По умолчанию Sqoop использует столбец split-by
в качестве столбца ключа строки. Если он не указан, Sqoop попытается определить столбец первичного ключа исходной таблицы в случае его наличия. Вы можете вручную указать столбец ключа строки с помощью --hbase-row-key
. Каждый столбец будет помещен в одно семейство столбцов, которое необходимо передать в опции --column-family
.
Если целевая таблица и семейство столбцов не существуют, задача Sqoop завершится с ошибкой. Указанная опция --hbase-create-table
позволяет создать целевую таблицу и семейство столбцов в процессе ипорта, используя параметры по умолчанию из конфигурации HBase.
В настоящее время Sqoop сериализует все значения в HBase, преобразуя каждое поле в его строковое представление, а затем вставляет байты UTF-8 этой строки в целевую ячейку.