鍍金池/ 教程/ 大數(shù)據(jù)/ Sqoop導(dǎo)入
Sqoop導(dǎo)出
Sqoop導(dǎo)入所有表
Sqoop導(dǎo)入
Sqoop代碼生成
Sqoop安裝
Sqoop Eval工具
Sqoop作業(yè)
Sqoop教程
Sqoop列出所有表
Sqoop列出數(shù)據(jù)庫

Sqoop導(dǎo)入

本章介紹了如何從MySQL數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到Hadoop的HDFS。 “導(dǎo)入工具”導(dǎo)入單個(gè)表從RDBMS到HDFS。表中的每一行被視為HDFS的記錄。所有記錄都存儲(chǔ)為文本文件的文本數(shù)據(jù)或者在阿夫羅(Avro )和序列文件的二進(jìn)制數(shù)據(jù)。 

語法

下面的語法用于將數(shù)據(jù)導(dǎo)入HDFS。

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

示例

讓我們以命名為emp, emp_add和emp_contact,這是一個(gè)在MySQL數(shù)據(jù)庫服務(wù)器名為userdb 數(shù)據(jù)庫的一個(gè)例子。

三個(gè)表及其數(shù)據(jù)如下。

表emp:

id name deg salary dept
1201 gopal manager 50,000 TP
1202 manisha Proof reader 50,000 TP
1203 khalil php dev 30,000 AC
1204 prasanth php dev 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
id phno email
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

導(dǎo)入表

Sqoop工具'import'是用來從表中導(dǎo)入表數(shù)據(jù)到Hadoop的文件系統(tǒng)作為文本文件或二進(jìn)制文件。

下面的命令用于從MySQL數(shù)據(jù)庫服務(wù)器中的emp表導(dǎo)入HDFS。

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

如果成功執(zhí)行,那么會(huì)得到下面的輸出。

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.

為了驗(yàn)證在HDFS導(dǎo)入的數(shù)據(jù),請(qǐng)使用以下命令。

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

emp表的數(shù)據(jù)和字段之間用逗號(hào)(,)表示。

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

導(dǎo)入到目標(biāo)目錄

在導(dǎo)入表數(shù)據(jù)到HDFS使用Sqoop導(dǎo)入工具,我們可以指定目標(biāo)目錄。

以下是指定目標(biāo)目錄選項(xiàng)的Sqoop導(dǎo)入命令的語法。

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

下面的命令是用來導(dǎo)入emp_add表數(shù)據(jù)到'/queryresult'目錄。

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

下面的命令是用來驗(yàn)證 /queryresult 目錄中 emp_add表導(dǎo)入的數(shù)據(jù)形式。

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

它會(huì)用逗號(hào)(,)分隔emp_add表的數(shù)據(jù)和字段。

1201, 288A,上一篇:Sqoop導(dǎo)入所有表下一篇:Sqoop代碼生成