Учебники

Sqoop — Импорт

В этой главе описывается, как импортировать данные из базы данных MySQL в Hadoop HDFS. «Инструмент импорта» импортирует отдельные таблицы из РСУБД в HDFS. Каждая строка в таблице рассматривается как запись в HDFS. Все записи хранятся в виде текстовых данных в текстовых файлах или в виде двоичных данных в файлах Avro и Sequence.

Синтаксис

Следующий синтаксис используется для импорта данных в HDFS.

$ sqoop import (generic-args) (import-args) 
$ sqoop-import (generic-args) (import-args)

пример

Давайте рассмотрим пример трех таблиц с именами emp , emp_add и emp_contact , которые находятся в базе данных с именем userdb на сервере базы данных MySQL.

Три таблицы и их данные следующие.

эй:

Я бы название градус оплата труда отдел
1201 Гопал менеджер 50000 TP
1202 Маниша Корректор 50000 TP
1203 Халил php dev 30000 переменный ток
1204 Prasanth php dev 30000 переменный ток
1204 kranthi админ 20000 TP

emp_add:

Я бы HNO улица город
1201 288A vgiri jublee
1202 108I AOC втор-плохо
1203 144Z pgutta ГИД
1204 78B Старый город втор-плохо
1205 720x Hitec втор-плохо

emp_contact:

Я бы phno Эл. адрес
1201 2356742 [email protected]
1202 1661663 [email protected]
1203 8887776 [email protected]
1204 9988774 [email protected]
1205 1231231 [email protected]

Импорт таблицы

Инструмент Sqoop ‘import’ используется для импорта данных таблицы из таблицы в файловую систему Hadoop в виде текстового файла или двоичного файла.

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

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp --m 1

Если оно выполнено успешно, вы получите следующий вывод.

14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/12/22 15:24:56 INFO tool.CodeGenTool: Beginning code generation
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
14/12/22 15:25:11 INFO orm.CompilationManager: Writing jar file: 
   /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:25:40 INFO mapreduce.Job: The url to track the job: 
   http://localhost:8088/proxy/application_1419242001831_0001/
14/12/22 15:26:45 INFO mapreduce.Job: Job job_1419242001831_0001 running in uber mode : 
   false
14/12/22 15:26:45 INFO mapreduce.Job: map 0% reduce 0%
14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds 
   (0.8165 bytes/sec)
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.

Чтобы проверить импортированные данные в HDFS, используйте следующую команду.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Он показывает данные таблицы emp и поля разделяются запятой (,).

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP

Импорт в целевой каталог

Мы можем указать целевой каталог при импорте табличных данных в HDFS с помощью инструмента импорта Sqoop.

Ниже приведен синтаксис для указания целевого каталога в качестве опции для команды импорта Sqoop.

--target-dir <new or exist directory in HDFS>

Следующая команда используется для импорта данных таблицы emp_add в каталог / queryresult.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--target-dir /queryresult

Следующая команда используется для проверки импортированных данных в каталоге / queryresult в форме таблицы emp_add .

$ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

Он покажет вам данные таблицы emp_add с разделенными запятыми (,) полями.

1201, 288A, vgiri,   jublee
1202, 108I, aoc,     sec-bad
1203, 144Z, pgutta,  hyd
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Импортировать подмножество табличных данных

Мы можем импортировать подмножество таблицы, используя предложение ‘where’ в инструменте импорта Sqoop. Он выполняет соответствующий запрос SQL на соответствующем сервере базы данных и сохраняет результат в целевом каталоге в HDFS.

Синтаксис предложения where следующий.

--where <condition>

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

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--where city =’sec-bad’” \
--target-dir /wherequery

Следующая команда используется для проверки импортированных данных в каталоге / wherequery из таблицы emp_add .

$ $HADOOP_HOME/bin/hadoop fs -cat /wherequery/part-m-*

Он покажет вам данные таблицы emp_add с разделенными запятыми (,) полями.

1202, 108I, aoc,     sec-bad
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Добавочный импорт

Инкрементальный импорт — это метод, который импортирует только недавно добавленные строки в таблицу. Для выполнения инкрементального импорта необходимо добавить опции «incremental», «check-column» и «last-value».

Следующий синтаксис используется для параметра приращения в команде импорта Sqoop.

--incremental <mode>
--check-column <column name>
--last value <last check column value>

Предположим, что новые данные добавлены в таблицу emp следующим образом:

1206, satish p, grp des, 20000, GR

Следующая команда используется для выполнения добавочного импорта в таблицу emp .

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp \
--m 1 \
--incremental append \
--check-column id \
-last value 1205

Следующая команда используется для проверки импортированных данных из таблицы emp в каталог emp / HDFS.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Он показывает вам данные таблицы emp с разделенными запятыми (,) полями.

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP
1206, satish p, grp des, 20000, GR

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

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*1

Он показывает новые добавленные строки в таблицу emp с разделенными запятыми (,) полями.