本章介紹了如何從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ù)如下。
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 |
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 | |
---|---|---|
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'是用來從表中導(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)入表數(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代碼生成