В этой главе описывается, как импортировать данные из базы данных 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 с разделенными запятыми (,) полями.