Apache Sqoop

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:42, 1 марта 2019.
Apache Sqoop
Sqoop-logo.png
Разработчики: Apache Software Foundation
Постоянный выпуск: 1.4.7/ Декабрь 2017
Состояние разработки: Активное
Написана на: Java
Операционная система: Кросс-платформенная
Тип ПО: Инструмент для управление данными
Лицензия: Apache License
Веб-сайт sqoop.apache.org

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

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

Описание

Sqoop поддерживает добавочную загрузку отдельной таблицы или SQL-запроса произвольной формы, а также сохраненные задания, которые можно запускать несколько раз для импорта обновлений, сделанных в базу данных с момента последнего импорта. Импорт также можно использовать для заполнения таблиц в [[Apache Hive|Hive] или HBase. Экспорт можно использовать для помещения данных из Hadoop в реляционную базу данных.

Sqoop получил название от «SQL-to-Hadoop». Sqoop стал проектом Apache высшего уровня в марте 2012 года.

Informatica предоставляет соединитель на основе Sqoop версии 10.1. Начиная с версии 4.5 программного обеспечения, Pentaho предоставляет шаги соединителя на основе Sqoop с открытым исходным кодом, Sqoop Import и Sqoop Export, в своем наборе ETL Pentaho Data Integration. Microsoft использует соединитель на основе Sqoop для передачи данных из баз данных Microsoft SQL Server в Hadoop. Couchbase, Inc. также предоставляет соединитель Couchbase Server-Hadoop с помощью Sqoop.

Системы реляционных баз данных широко используются для взаимодействия с традиционными бизнес-приложениями. Таким образом, системы реляционных баз данных стали одним из источников, генерирующих большие данные. Поскольку мы имеем дело с большими данными, Hadoop хранит и обрабатывает большие данные с использованием различных сред обработки, таких как MapReduce, Hive, HBase, Cassandra, Pig и т. Д., И сред хранения, таких как HDFS, для достижения преимуществ распределенных вычислений и распределенного хранения. Чтобы хранить и анализировать большие данные из реляционных баз данных, данные должны передаваться между системами баз данных и распределенной файловой системой Hadoop (HDFS). Sqoop действует как промежуточный уровень между Hadoop и системами реляционных баз данных. Вы можете импортировать данные и экспортировать данные между системами реляционных баз данных и Hadoop и его экосистемами напрямую, используя sqoop.

Особенности

Особенности Sqoop:

  • Автоматизирует большую часть процесса.
  • Использует инфраструктуру MapReduce для импорта и экспорта данных, что обеспечивает параллельный механизм и отказоустойчивость.
  • Облегчает работу разработчиков, предоставляя интерфейс командной строки. Разработчики просто должны предоставить основную информацию, такую как источник, место назначения и детали аутентификации базы данных.
  • Предоставляет много важных функций.
  • Поддержка Apache Accumulo.


Функции

Apache Sqoop выполняет следующие действия для интеграции перемещения больших объемов данных между Hadoop и структурированными хранилищами данных:

  • Импортировать последовательные наборы данных из мэйнфрейма. Удовлетворяет растущую потребность переносить данные с мэйнфреймов на HDFS;
  • Импорт напрямую в ORCFile. Улучшенное сжатие и облегченное индексирование для повышения производительности запросов;
  • Импорт данных. Перемещает определенные данные из внешних хранилищ и EDW в Hadoop, чтобы оптимизировать экономическую эффективность комбинированного хранения и обработки данных;
  • Параллельная передача данных. Для более быстрой работы и оптимального использования системы;
  • Быстрые копии данных. Из внешних систем в Hadoop;
  • Эффективный анализ данных. Повышает эффективность анализа данных путем объединения структурированных данных с неструктурированными данными в озере данных схемы при чтении;
  • Балансировки нагрузки. Смягчает чрезмерную нагрузку при хранении и обработке на другие системы.

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

Необходимы следующие знания для работы с Apache Sqoop:

  • базовые знания компьютерной технологии и терминологии
  • знакомство с интерфейсами командной строки, например bash
  • СУБД
  • знакомство с Hadoop и базовые знания по его эксплуатации

Перед тем, как начать использовать Sqoop, должен быть установлен и настроен Hadoop. Sqoop в настоящее время поддерживает следующие версии Hadoop: 0.20, 0.23, 1.0, 2.0. Предполагается, что вы используете среду Linux и Linux-подобную. В случае использования Windows, можно использовать Cygwin X для выполнения большинства задач, связанных с Sqoop. На MacOS X можно увидеть несколько ошибок совместимости. Sqoop преимущественно работает на Linux.

Основы использования

Со Sqoop вы можете импортировать данные из СУБД или мэйфремов в HDFS. Исходные данные для процесса импорта представляют собой либо таблицы баз данных, либо наборы данных для мэйнфреймов. Для баз данных Sqoop будет читать таблицу построчно в HDFS. Для наборов данных мэйнфреймов Sqoop будет читать записи из каждого набора данных в HDFS. На выходе процесса импорта получается набор файлов, содержащих копию импортированной таблицы или наборов данных. Процесс импорта выполняется параллельно. По этой причине результат импорта будет находиться в нескольких файлах. Эти файлы могут иметь вид текстовых с разделителями или двоичных Avro или SequenceFile, содержащих сериализованные данные записи.

Побочным продуктом процесса импорта является сгенерированный Java класс, который может инкапсулировать один ряд импортированной таблицы. Этот класс используется в процессе импорта. Исходный код java для этого класса нужен для использования в последующей обработке данных MapReduce. Этот класс может сериализовывать и десериализовывать данных в формат SequenceFile. Он также может разобрать текстовую форму записи с разделителями. Эти возможности позволяют быстро разрабатывать приложения MapReduce, использующие HDFS записи в конвейере обработки.

После манипуляции импортированными записями вы имеете набор данных, который может быть экспортирован обратно в СУБД. Процесс экспорта в Sqoop будет читать набор текстовых файлов с разделителями из HDFS параллельно, разбирать записи и вставлять их в виде новых строк в таблице целевой БД для использованиями внешними приложениями или пользователями.

Sqoop включает в себя некоторые другие команды, которые позволяют просматривать БД, с которой вы работаете. Например, можно получить список доступных схем баз данных и таблиц в схеме. Sqoop также имеет примитивную облоку выполнения SQL.

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

Импорт данных

Рисунок 1 – Импорт данных в Sqoop

Следующая команда используется для импорта всех данных из таблицы с именем ORDERS из базы данных MySQL:

 $ sqoop import --connect jdbc:mysql://localhost/acmedb --table ORDERS --username test --password **** 

В этой команде использованы следующие параметры:

  • import: подкоманда предписывает Sqoop инициализировать импорт
  • --connect <строка подключения>, --username <имя пользователя>, --password <пароль>: эти параметры соединения, использующиеся для соединения с БД. Они ничем не отличаются от параметров соединения, которые используются при подключении к БД через соединения JDBC.
  • --table <имя таблицы>: параметр определяет таблицу, которая будет импортирована

Импорт осуществляется в два этапа. На первом этапе Sqoop просматривает базу данных, чтобы собрать необходимые метаданные для импортируемых данных. Второй этап представляет собой работу Hadoop, которую Sqoop загружает в кластер. Это та работа, которая передает данные, используя метаданные, полученные на предыдущем шаге.

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

По умолчанию эти файлы содержат поля, разделённые запятыми, с новыми строками, отделящими различные записи. Можно легко переопределить формат, в котором копируются данные, явно указав разделитель полей и символ, разбивающий записи.

Экспорт данных

Рисунок 2 – Экспорт данных в Sqoop

В некоторых случаях данные, обработанные с помощью Hadoop могут быть необходимы в работащих системах, чтобы помочь запустить дополнительные критически важные бизнес-функции. Sqoop может быть использован для экспорта таких данных во внешние хранилища, если это необходимо. Если данные, полученные Hadoop, соответствуют таблице ORDERS в базе данных где-либо еще, можно заполнить её следующей командой:

 $ sqoop export --connect jdbc:mysql://localhost/acmedb --table ORDERS --username test --password **** --export-dir /user/arvind/ORDERS 

В этой команде использованы следующие параметры:

  • --connect <строка подключения>, --username <имя пользователя>, --password <пароль>: это параметры соединения, которые используются для соединения с базой данных. Они ничем не отличаются от тех, которые используются для подключения к базе данных через соединение JDBC.
  • --table <имя таблицы>: этот параметр определяет таблицу, которая будет заполняться.
  • --export-Dir <путь к каталогу>: это каталог, из которого будут экспортированы данные.

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

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

Подключение к серверу базы данных

Sqoop предназначен для импорта таблиц из базы данных в HDFS. Для этого необходимо указать строку соединения, которая описывает, как подключиться к базе данных. Строка соединения похожа на URL и передается Sqoop с параметром --connect. Это описывает сервер и базу данных для подключения; можно также указать порт. Например:

 $ sqoop import --connect jdbc:mysql://database.example.com/employees 

Эта строка будет подключаться к указанной базе данных MySQL сотрудников на хосте database.example.com. Очень важно не использовать URL localhost, если вы собираетесь использовать Sqoop с распределённым кластером Hadoop. Строка соединения будет использоваться на узлах TaskTracker всего кластера MapReduce. Если указать буквенное имя локального адреса, каждый узел подключиться к разным базам (или, наиболее вероятно, не подключиться совсем). Вместо этого вы должны использовать полное имя хоста или IP-адрес хоста базы данных, которые можно увидеть на всех удаленных узлах.

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

Установка Apache Sqoop

Чтобы установить Sqoop версии 1.4.6, следуйте следующим шагам:

1. Скачайте Sqoop

 wget www.apache.org/dyn/closer.cgl/sqoop/1.4.6

2. Распакуетйе tar архив

 sudo tar -zxvf sqoop-1.4.6.bin hadoop1.0.0.tar.gz

3. Перенесите файлы в директорию Sqoop

 sudo mv sqoop-1.4.6.bin hadoop1.0.0 /usr/lib/sqoop

4. Перейдите в директорию Sqoop

 cd /usr/lib/sqoop/sqoop-1.4.6.bin_hadoop-1.0.0

5. Выполните команду

 sudo mv ./* /usr/lib/sqoop

6. Открыть файл .bashrc

 sudo nano ~/.bashrc

7. Добавить следующие строки в конец файла

 export SQOOP_HOME=/usr/lib/sqoop
 export PATH=$PATH:$SQOOP_HOME/bin

8. Проверить успешность установки Sqoop следующей командой

 sqoop version

Источники

  1. Официальный сайт Sqoop // sqoop.apache [2011-2019]. Дата обновления: 18.01.2019. URL: http://sqoop.apache.org/ (дата обращения: 22.02.2019)
  2. Apache Sqoop OVERVIEW // hortonworks [2011-2019]. URL: https://hortonworks.com/apache/sqoop/ (дата обращения: 22.02.2019)
  3. Sqoop Wikipedia // wikipedia [2001-2019]. URL: https://en.wikipedia.org/wiki/Sqoop (дата обращения: 22.02.2019)
  4. Fundamentals of Apache Sqoop // dezyre [2019]. URL: https://www.dezyre.com/hadoop-tutorial/hadoop-sqoop-tutorial (дата обращения: 22.02.2019)

Ссылки