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