Обзор работы Sqoop

Обзор

Sqoop — это инструмент для переноса данных между Hadoop и реляционной базой данных или мейнфреймом, использующий YARN для параллельных вычислений. В большинстве случаев Sqoop применяется для импорта данных из системы управления базами данных (СУБД), таких как PostgreSQL, MySQL и других, в распределенную файловую систему Hadoop (HDFS) — с последующей обработкой данных в Hadoop MapReduce и экспортом данных назад в СУБД.

Архитектура Sqoop
Архитектура Sqoop
Архитектура Sqoop
Архитектура Sqoop

Основные функции 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.

Процесс выполнения команды import
Процесс выполнения команды import
Процесс выполнения команды import
Процесс выполнения команды import

Результатом импорта является набор файлов, содержащих копию импортированной таблицы или наборов данных. Эти файлы могут быть в виде текстовых файлов с разделителями (например, с запятыми или символами табуляции, разделяющими каждое поле) или двоичных файлов 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

 

  • Поскольку Hive не поддерживает экранирование символов новой строки и разделителей полей в строках, избегайте использования экранирующих и заключающих символов в качестве разделителей полей и записей. Если при импорте данных в Hive указаны опции escaped-by, enclosed-by или optionally-enclosed-by, Sqoop выведет предупреждение.

  • Hive может работать некорректно с данными, которые содержат разделители строк по умолчанию (\n и \r) или разделители столбцов (\01) в Hive. Используйте опцию hive-drop-import-delims, чтобы удалить эти символы при импорте, или опцию hive-delims-replacement, чтобы заменить их указанной строкой.

  • Sqoop передает разделители полей и записей в Hive. Если никакие разделители не установлены при выполнении команды hive-import, в качестве разделителя полей будет использован ^A, а в качестве разделителя записей — \n, чтобы соответствовать значениям по умолчанию Hive.

Более подробно о том, как импортировать данные в 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 этой строки в целевую ячейку.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней