Синхронизация данных Mysql и hadoop (миграция), нужно знать Sqoop

база данных

Предыдущая статьяКак синхронизировать данные из Mysql в Hbase в режиме реального времени, подскажут мощные StreamsetsМы говорили о том, как использовать Streamsets для синхронизации (миграции) данных в реальном времени из mysql в hbase. Преимущества использования Streamsets заключаются в простом развертывании, гибкой настройке и отсутствии необходимости в написании кода.

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

Если в вашей работе вам необходимо синхронизировать данные в реляционных базах данных (Mysql, Oracle и т.д.) с hadoop (HDFS, hive, hbase) или синхронизировать данные в hadoop с реляционными базами данных, то эта статья должна вам помочь.

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

Знакомство

Название Sqoop, если присмотреться, немного похоже на результат слияния двух слов sql и hadoop. На самом деле это очевидно из названия: это инструмент, используемый для передачи данных в реляционных базах данных и Hadoop друг в друга, и это преобразование является двунаправленным. Взгляните на картинку ниже, чтобы увидеть с первого взгляда:

Из реляционной базы данных в Hadoop мы называем это импортом, а из Hadoop в реляционную базу данных — экспортом. Далее в статье вы увидите два режима соответствующих команд «импорт» и «экспорт».

Установить

Что касается установки Sqoop, я не буду его здесь представлять.В Интернете есть много руководств.Поскольку это инструмент, он также очень удобен и прост в установке. Следует отметить, что Sqoop имеет две основные версии: Sqoop1 и Sqoop2.

доступОфициальный сайт Sqoop, 1.4.x на официальном сайте — Sqoop1, 1.99.* — Sqoop2.

Что касается разницы между Sqoop1 и Sqoop2, то в народе она такова:

  1. Sqoop1 — это просто клиентский инструмент, Sqoop2 присоединяется к серверу для централизованного управления соединителями.
  2. Sqoop1 работает через командную строку и работает одним способом, в то время как Sqoop2 имеет больше способов работы, таких как API-интерфейс REST, веб-страница
  3. Sqoop2 добавляет механизм безопасности разрешений

Для автора Sqoop — это инструмент синхронизации, командной строки достаточно для удовлетворения рабочих потребностей, и большая часть синхронизации данных происходит в одной локальной сети (нет безопасности данных и других вопросов), поэтому я выбираю Sqoop1 (конкретный версия 1.4.6)

Рамочный принцип

Как видно из рисунка выше, Sqoop Client использует команду оболочки для использования sqoop, а Task Translater в sqoop преобразует команду в задачу mapreduce в Hadoop для определенных операций с данными. Это можно понимать так, например, в сценарии синхронизации данных таблицы в Mysql с хаупом, Sqoop разделит записи таблицы на несколько частей, и каждая часть будет разбита на свой собственный маппер для реализации хаупа ( для обеспечения эффективности синхронизации). Вы можете обнаружить, что на самом деле здесь нет сокращения в mapreduce, только карта.

Практичный

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

Запустите sqoop help, чтобы увидеть, какие операции предоставляет Sqoop, как показано ниже.

На самом деле, эти операции будут соответствовать одному за другим исполняемым файлам скриптов в каталоге sqoop bin.Если вы хотите узнать подробности, вы можете открыть эти скрипты для просмотра

Несколько часто используемых операций или команд в работе:

  1. list-databases : просмотр доступных баз данных.
  2. list-tables: просмотрите, какие таблицы находятся в базе данных.
  3. импорт: реляционная база данных для синхронизации данных Hadoop
  4. экспорт: синхронизация данных Hadoop с реляционной базой данных
  5. версия : Посмотреть версию Sqoop

список баз данных

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/ --username root --password 12345678

таблица списка

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/databasename --username root --password 12345678

mysql в hdfs

sqoop import
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root
--password 12345678
--table tablename
--target-dir /hadoopDir/
--fields-terminalted-by '\t'
-m 1
--check-column id
--last-value num
--incremental append

--connect : URL-адрес базы данных JDBC, за которым следует имя базы данных, — это имя базы данных, к которой вы хотите подключиться.

--table : таблица базы данных

--username : имя пользователя базы данных

--password : пароль базы данных

--target-dir : целевой каталог HDFS

--fields-terminated-by : разделитель между каждым полем после импорта данных

-m : количество одновременных картографов

--check-column : указать ссылочный столбец для добавочного импорта, здесь id (первичный ключ)

--last-value : последнее значение последнего импорта

--incremental append : метод импорта является инкрементным

Примечание. В сценариях, где на работе требуется инкрементная синхронизация, мы можем использовать --incremental append и --last-value. Например, здесь мы используем id в качестве эталонного столбца.Если последняя синхронизация достигла 1000, в этот раз мы хотим синхронизировать только новые данные, мы можем привести параметр --last-value 1000.

mysql в улей

используйте imort --create-hive-table

sqoop import 
--create-hive-table 
-m 1 
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root 
--password 12345678 
--table tablename
--hive-import 
--hive-database databasename_hive 
--hive-overwrite 
--hive-table tablename_hive

mysql в hbase

hbase shell
create_namespace 'database_tmp'
create 'database_tmp:table_tmp','info'

sqoop import 
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username 'root' 
--password '12345678' 
--table 'tablename' 
--hbase-table 'database_tmp:table_tmp' 
--hbase-row-key 'id' 
--column-family 'info'

Сначала войдите в оболочку hbase, создайте пространство имен и базу данных. database_tmp — это пространство имен, а table_tmp — это база данных.

hdfs в mysql

sqoop export
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root
--password '12345678' 
--table tablename
--m 1
--export-dir /hadoopDir/
--input-fields-terminated-by '\t'
--columns="column1,column2"

--columns : указать, какие столбцы экспортировать

улей в mysql

Друзья, знающие hive, знают, что настоящие данные hive — это на самом деле данные на диске hdfs, поэтому операция синхронизации из hive в mysql аналогична операции из hdfs в mysql.

hbase в mysql

В настоящее время Sqoop не предоставляет операцию прямой синхронизации данных hbase с mysql.

Резюме. В сценариях синхронизации данных, таких как sql-to-hadoop и hadoop-sql, Sqoop является очень эффективным и гибким инструментом, и вы можете использовать его для работы с данными.