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

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

sqoop dark
Архитектура Sqoop
sqoop light
Архитектура Sqoop

Sqoop автоматизирует большинство процессов и использует базу данных для описания структуры импортируемых данных. Sqoop использует MapReduce для импорта и экспорта данных, что делает возможным параллельную обработку и обеспечивает отказоустойчивость.

Используя Sqoop, можно импортировать данные из реляционной базы данных или мейнфреймов в HDFS. Входными данными для импорта может служить таблица базы данных или dataset мейнфрейма. В случае с базами данных Sqoop считывает данные таблицы в HDFS построчно. Для мейнфрейм-dataset Sqoop считывает записи из каждого мейнфрейм-dataset в HDFS.

В результате импорта появляется набор файлов, содержащий копию импортируемых таблиц или dataset. Процесс импорта может выполняться параллельно и по этой причине результаты сохраняются в нескольких файлах. Обычно это текстовые файлы с разделителями (например, формат CSV).

Процесс импорта и экспорта

Побочным результатом импорта также является Java-класс, который инкапсулирует одну строку импортируемой таблицы. Sqoop использует этот класс для внутренних нужд в процессе импорта.

Данные из этого класса могут быть (де)сериализованы в формат SequenceFile. Также класс может парсить записи, содержащие текст с разделителями. Это позволяет быстро создавать MapReduce-приложения, которые используют хранимые в HDFS записи, в пайплайнах обработки. Также существует возможность парсить данные с разделителями, используя любые удобные инструменты.

После обработки импортированных записей (например, используя MapReduce или Hive), вы получите итоговый набор данных, который можно экспортировать обратно в реляционную базу данных. При экспорте данных Sqoop параллельно считывает данные с разделителями из HDFS, преобразует данные в записи и вставляет в виде новых строк в таблицу БД для дальнейшего чтения внешними приложениям или пользователями.

Пользовательская настройка

В Sqoop имеются команды, позволяющие увидеть структуру базы данных, с которой вы работаете. Например, для отображения всех доступных баз данных (схем) используйте sqoop-list-databases, а чтобы увидеть все таблицы в базе — используйте инструмент sqoop-list-tables. Sqoop также включает в себя простую оболочку выполнения SQL (sqoop-eval).

Большинство аспектов импорта, экспорта и генерации кода можно кастомизировать. Для баз данных имеется возможность задать строки или столбцы для импорта. Можно указать особые разделители и символы экранирования для данных, хранящихся в файлах, а также формат файлов. Также можно изменить имена классов и пакетов в генерируемом коде.

Требования к инфраструктуре

Перед использованием Sqoop должен быть установлен и настроен Hadoop.

Sqoop работает и тестируется на Linux-системах.

Использование

Sqoop — это набор связанных инструментов (tools). Для вызова Sqoop нужно указать инструмент, который необходимо использовать и передать аргументы, контролирующие поведение инструмента.

Если Sqoop компилируется из исходного кода, можно использовать Sqoop без формального процесса установки, вызывая исполняемый файл bin/sqoop. Для пользователей, которые используют пакетную инсталляцию Sqoop (например, распространяемые в виде RPM-пакетов с Apache Bigtop) исполняемый файл находится в /usr/bin/sqoop.

Sqoop поставляется c инструментом справки. Чтобы отобразить список всех доступных инструментов, выполните команду sqoop help. Чтобы увидеть справочную информацию для конкретного инструмента, выполните команду sqoop help <tool-name>, например, sqoop help import. Также можно добавить флаг --help к любой команде, например sqoop import --help.

Общие и специальные аргументы

Для контроля поведения инструментов Sqoop можно использовать общие и специальные аргументы. Можно указать общие аргументы -conf, -D и другие сразу после имени вызываемого инструмента, но перед аргументами, специфичными для определенного инструмента (например, connect).

Обратите внимание, что перед общими аргументами Hadoop используется одиночное тире (-), в то время как аргументы для инструментов начинаются с двойного тире (--), если только последние не состоят из одного символа, как например -P.

Передача аргументов через файл настроек

При использовании Sqoop параметры командной строки, которые остаются неизменными от запуска к запуску, можно поместить в отдельный файл настроек для удобства.

Файл настроек — это текстовый файл, в котором каждая строка содержит параметр настройки. Строки с параметрами должны иметь такую же очередность, как если бы эти параметры были указаны в командной строке. Один параметр можно указать на нескольких строках, используя символ (\\) в конце промежуточной строки.

Также в файле можно указывать комментарии, которые начинаются с символа #. Комментарии должны начинаться с новой строки и не могут быть смешаны с текстом настроек. При считывании настроек из файла все комментарии и пустые строки игнорируются. Игнорируются все пробелы, кроме случаев, когда параметры помещены в кавычки. Параметры в кавычках должны быть указаны на одной строке и не должны иметь переносов.

Параметр командой строки, который содержит путь к файлу с настройками может иметь произвольную позицию среди других параметров. Важно, чтобы параметры в файле настроек соответствовали правилам очередности, вне зависимости от местоположения файла настроек: сначала указываются общие параметры (например, настройки подключения по jdbc), затем — параметры, специфичные для инструментов (например, импорта) и в конце — параметры, предназначенные для передачи дочерним программам. Чтобы использовать файл настроек, создайте файл настроек в произвольной локации и укажите путь к нему, используя аргумент --options-file. При использовании файла настроек содержимое файла "разворачивается" в командной строке перед вызовом определенного инструмента. При необходимости можно использовать несколько файлов с настройками для вызова одного инструмента.

Например, ниже представлены альтернативные способы вызова Sqoop для импорта:

$ sqoop import --connect jdbc:mysql://localhost/db --username foo --table TEST
$ sqoop --options-file /users/homer/work/import.txt --table TEST

Где файл настроек /users/homer/work/import.txt имеет следующее содержимое:

import
--connect
jdbc:mysql://localhost/db
--username
foo
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней