- Sqoop 教程
- Sqoop - 首頁
- Sqoop - 簡介
- Sqoop - 安裝
- Sqoop - 匯入
- Sqoop - 匯入所有表
- Sqoop - 匯出
- Sqoop - Sqoop 作業
- Sqoop - 程式碼生成
- Sqoop - Eval
- Sqoop - 列出資料庫
- Sqoop - 列出表
- Sqoop 有用資源
- Sqoop - 常見問題解答
- Sqoop - 快速指南
- Sqoop - 有用資源
- Sqoop - 討論
Sqoop - 匯入
本章描述如何將資料從 MySQL 資料庫匯入到 Hadoop HDFS。‘匯入工具’將單個表從 RDBMS 匯入到 HDFS。表中的每一行都被視為 HDFS 中的一條記錄。所有記錄都以文字資料儲存在文字檔案中,或者以二進位制資料儲存在 Avro 和 Sequence 檔案中。
語法
以下語法用於將資料匯入 HDFS。
$ sqoop import (generic-args) (import-args) $ sqoop-import (generic-args) (import-args)
示例
讓我們以三個名為emp、emp_add和emp_contact的表為例,這些表位於 MySQL 資料庫伺服器中名為 userdb 的資料庫中。
這三個表及其資料如下所示。
emp
| id | name | deg | salary | dept |
|---|---|---|---|---|
| 1201 | gopal | manager | 50,000 | TP |
| 1202 | manisha | 校對員 | 50,000 | TP |
| 1203 | khalil | php 開發 | 30,000 | AC |
| 1204 | prasanth | php 開發 | 30,000 | AC |
| 1204 | kranthi | admin | 20,000 | TP |
emp_add
| id | hno | street | city |
|---|---|---|---|
| 1201 | 288A | vgiri | jublee |
| 1202 | 108I | aoc | sec-bad |
| 1203 | 144Z | pgutta | hyd |
| 1204 | 78B | old city | sec-bad |
| 1205 | 720X | hitec | sec-bad |
emp_contact
| id | phno | |
|---|---|---|
| 1201 | 2356742 | gopal@tp.com |
| 1202 | 1661663 | manisha@tp.com |
| 1203 | 8887776 | khalil@ac.com |
| 1204 | 9988774 | prasanth@ac.com |
| 1205 | 1231231 | kranthi@tp.com |
匯入表
Sqoop 工具“import”用於將表資料從表匯入到 Hadoop 檔案系統,作為文字檔案或二進位制檔案。
以下命令用於將emp表從 MySQL 資料庫伺服器匯入到 HDFS。
$ sqoop import \ --connect jdbc:mysql:///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: https://: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
匯入到目標目錄
使用 Sqoop 匯入工具,我們可以在將表資料匯入 HDFS 時指定目標目錄。
以下是將目標目錄作為 Sqoop 匯入命令選項的語法。
--target-dir <new or exist directory in HDFS>
以下命令用於將emp_add表資料匯入到‘/queryresult’目錄。
$ sqoop import \ --connect jdbc:mysql:///userdb \ --username root \ --table emp_add \ --m 1 \ --target-dir /queryresult
以下命令用於驗證從emp_add表匯入到 /queryresult 目錄中的資料。
$ $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
匯入表資料的子集
我們可以使用 Sqoop 匯入工具中的“where”子句匯入表的子集。它在相應的資料庫伺服器上執行相應的 SQL 查詢,並將結果儲存在 HDFS 中的目標目錄中。
where 子句的語法如下。
--where <condition>
以下命令用於匯入emp_add表資料的子集。子集查詢用於檢索居住在 Secunderabad 市的員工 ID 和地址。
$ sqoop import \ --connect jdbc:mysql:///userdb \ --username root \ --table emp_add \ --m 1 \ --where “city =’sec-bad’” \ --target-dir /wherequery
以下命令用於驗證從emp_add表匯入到 /wherequery 目錄中的資料。
$ $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:///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