第3节 sqoop:4、sqoop的数据导入之导入数据到hdfs和导入数据到hive表

注意:

(1)\001 是hive当中默认使用的分隔符,这个玩意儿是一个asc 码值,键盘上面打不出来

(2)linux中一行写不下,可以末尾加上 一些空格和 “ \ ”,换行继续写余下的命令:

bin/sqoop import --connect jdbc:mysql://192.168.25.24:3306/userdb --username root --password admin --table \
emp --fields-terminated-by '\001' \
--hive-import \
--hive-table sqooptohive.emp_hive \
--hive-overwrite \
--delete-target-dir -m 1

============================================================

3.5、 Sqoop的数据导入

“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)

列举出所有的数据库

命令行查看帮助

bin/sqoop list-databases --help

列出win7主机所有的数据库

bin/sqoop list-databases --connect jdbc:mysql://172.16.43.67:3306/ --username root --password admin

查看某一个数据库下面的所有数据表

bin/sqoop list-tables --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin

其它导入示例

表数据

在mysql中有一个库userdb中三个表:emp, emp_add和emp_conn

表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

1205

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_conn:

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

导入数据库表数据到HDFS

下面的命令用于从MySQL数据库服务器中的emp表导入HDFS。

bin/sqoop import --connect jdbc:mysql://192.168.1.101:3306/userdb --password admin --username root --table emp --m 1

如果成功执行,那么会得到下面的输出。

为了验证在HDFS导入的数据,请使用以下命令查看导入的数据

hdfs  dfs  -ls  /user/root/emp

导入到HDFS指定目录

在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。

使用参数 --target-dir来指定导出目的地,

使用参数—delete-target-dir来判断导出目录是否存在,如果存在就删掉

bin/sqoop import  --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin --delete-target-dir --table emp  --target-dir /sqoop/emp --m 1

查看导出的数据

hdfs dfs -text /sqoop/emp/part-m-00000

它会用逗号(,)分隔emp_add表的数据和字段。

1201,gopal,manager,50000,TP

1202,manisha,Proof reader,50000,TP

1203,khalil,php dev,30000,AC

1204,prasanth,php dev,30000,AC

1205,kranthi,admin,20000,TP

导入到hdfs指定目录并指定字段之间的分隔符

bin/sqoop import  --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin --delete-target-dir --table emp  --target-dir /sqoop/emp2 -m 1 --fields-terminated-by '\t'

查看文件内容

hdfs dfs -text /sqoop/emp2/part-m-00000

导入关系表到HIVE

第一步:拷贝jar包

将我们mysql表当中的数据直接导入到hive表中的话,我们需要将hive的一个叫做hive-exec-1.1.0-cdh5.14.0.jar的jar包拷贝到sqoop的lib目录下

cp /export/servers/hive-1.1.0-cdh5.14.0/lib/hive-exec-1.1.0-cdh5.14.0.jar /export/servers/sqoop-1.4.6-cdh5.14.0/lib/

第二步:准备hive数据库与表

将我们mysql当中的数据导入到hive表当中来

hive (default)> create database sqooptohive;

hive (default)> use sqooptohive;

hive (sqooptohive)> create external table emp_hive(id int,name string,deg string,salary int ,dept string) row format delimited fields terminated by '\001';

第三步:开始导入

bin/sqoop import --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin --table emp --fields-terminated-by '\001' --hive-import --hive-table sqooptohive.emp_hive --hive-overwrite --delete-target-dir -m 1

第四步:hive表数据查看

select * from emp_hive;

导入关系表到hive并自动创建hive表

我们也可以通过命令来将我们的mysql的表直接导入到hive表当中去

bin/sqoop import --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin --table emp_conn --hive-import -m 1 --hive-database sqooptohive;

通过这个命令,我们可以直接将我们mysql表当中的数据以及表结构一起倒入到hive当中去

上一篇:Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集


下一篇:网络基础、ftp任务(进度条、计算文件大小、断点续传、搭建框架示例)