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