开发手册 欢迎您!
软件开发者资料库

Sqoop - Import

Sqoop Import - 从简单和简单的步骤学习Sqoop,从基本到高级概念,包括简介,安装,导入,导入所有表,导出,Sqoop作业,Codegen,Eval,列表数据库,列表。

本章介绍如何将数据从MySQL数据库导入Hadoop HDFS. "导入工具"将各个表从RDBMS导入HDFS.表中的每一行都被视为HDFS中的记录.所有记录都作为文本数据存储在文本文件中,或者作为Avro和序列文件中的二进制数据存储.

语法

以下语法用于将数据导入HDFS.

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

示例

让我们举一个名为的三个表的例子emp emp_add emp_contact ,它们位于MySQL数据库服务器中名为userdb的数据库中.

三个表及其数据如下.

emp:

idnamedeg薪水dept
1201gopal经理50,000TP
1202manisha校对读者50,000TP
1203khalilphp dev30,000AC
1204prasanthphp dev30,000AC
1204kranthiadmin20,000TP

emp_add:

idhnostreetcity
1201288Avgirijublee
1202108Iaocsec-bad
1203144Zpguttahyd
120478B旧城sec-bad
1205720Xhitecsec-bad

emp_contact :

idphnoemail
12012356742gopal@tp.com
12021661663manisha@tp.com
12038887776khalil@ac.com
12049988774prasanth@ac.com
12051231231kranthi @ tp.com

导入表

Sqoop工具'import'是用于将表数据从表导入Hadoop文件系统作为文本文件或二进制文件.

以下命令用于导入 \\ temp 表从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.514/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 generation14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement:    SELECT t.* FROM `emp` AS t LIMIT 114/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement:    SELECT t.* FROM `emp` AS t LIMIT 114/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop14/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 :    false14/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-*

它显示 \\ temp 表格数据和字段用逗号(,)分隔.

1201, gopal,    manager, 50000, TP1202, manisha,  preader, 50000, TP1203, kalil,    php dev, 30000, AC1204, prasanth, php dev, 30000, AC1205, kranthi,  admin,   20000, TP

导入目标目录

我们可以使用Sqoop导入工具将表数据导入HDFS时指定目标目录.

以下是指定目标目录作为Sqoop导入命令选项的语法.

--target-dir 

以下命令用于将 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,   jublee1202, 108I, aoc,     sec-bad1203, 144Z, pgutta,  hyd1204, 78B,  oldcity, sec-bad1205, 720C, hitech,  sec-bad

导入表数据的子集

我们可以使用.导入表的子集Sqoop导入工具中的'where'子句.它在相应的数据库服务器中执行相应的SQL查询,并将结果存储在HDFS中的目标目录中.

where子句的语法如下.

--where 

以下命令用于导入 emp_add 表数据的子集.子集查询用于检索居住在塞康德拉巴德市的员工ID和地址.

$ sqoop import \--connect jdbc:mysql://localhost/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-bad1204, 78B,  oldcity, sec-bad1205, 720C, hitech,  sec-bad

增量导入

增量导入是一种仅导入表中新添加的行的技术.需要添加'incremental','check-column'和'last-value'选项来执行增量导入.

以下语法用于Sqoop中的增量选项导入命令.

--incremental --check-column --last value 

让我们假设新添加的数据进入 \\ temp 表如下 :

1206, satish p, grp des, 20000, GR

以下命令用于执行增量导入在 \\ temp 表中.

$ sqoop import \--connect jdbc:mysql://localhost/userdb \--username root \--table emp \--m 1 \--incremental append \--check-column id \-last value 1205

以下命令用于验证来自 \\ temp的导入数据/b>表到HDFS emp/目录.

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

它显示带有逗号(,)分隔字段的 \\ temp 表数据.

1201, gopal,    manager, 50000, TP1202, manisha,  preader, 50000, TP1203, kalil,    php dev, 30000, AC1204, prasanth, php dev, 30000, AC1205, kranthi,  admin,   20000, TP1206, satish p, grp des, 20000, GR

以下命令用于查看 \\ temp中修改或新添加的行 table.

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

它以逗号(,)分隔的字段显示 \\ temp 表中新添加的行.

1206, satish p, grp des, 20000, GR