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.

Ниже представлены три таблицы и их данные.

emp:

Я бы имя град зарплата отдел
1201 гопал управляющий делами 50 000 TP
1202 Manisha Корректор 50 000 TP
1203 Халил php dev 30 000 AC
1204 прасант php dev 30 000 AC
1204 Кранти админ 20 000 TP

emp_add:

Я бы hno улица город
1201 288A вгири младенец
1202 108I aoc втор-плохо
1203 144Z пгутта гид
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

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

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

Следующий синтаксис используется для дополнительной опции в команде импорта 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 таблицу в каталог HDFS emp /.

$ $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 таблица с полями, разделенными запятыми (,).

1206, satish p, grp des, 20000, GR