sqoop 导入到hive字段全是null_sqoop的使用之import导入到HDFS

v2-e006075368edad4abd06638aff492229_1440w.jpg?source=172ae18b

首先我们已经安装好sqoop了,如果没有安装好参考文档《基于CentOS6.5-Hadoop2.7.3-hive-2.1.1安装sqoop1.4.7》

准备一些基本的认识

1、sqoop分为了sqoop1和sqoop2

2、sqoop2拆分server和client,类似于hiveserver2和beeline

3、sqoop早期是一些封装MR程序,以jar文件的形式,最后才演变成了框架

4、用于在hadoop和结构化数据库之间的高效传输批量数据的工具

下面我们开始做一些简单是使用,熟悉sqoop的使用方式

查看帮助信息:bin/sqoop help

v2-175f017c0804a7b90bff5a99e7c24a1d_b.jpg

连接mysql

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

可以将数据库罗列出来,显示mysql数据库说明安装成功

v2-5b8f0b6cd4235f4b0afd52ce0573f729_b.jpg

从关系型数据库中导入到HDFS(rdbms -> hdfs)

在mysql中创建一个库和表,方便我们练习

v2-85821d956df0c942d40e0b09caa1a891_b.jpg

create table importhdfs(

id int primary key not null,

name varchar(20) not null

);

v2-e8bf36a41102e2d2a3b1f547c2533430_b.jpg

插入数据

insert into importhdfs values(1,'x1');

insert into importhdfs values(2,'x2');

insert into importhdfs values(3,'x3');

insert into importhdfs values(4,'x4');

insert into importhdfs values(5,'x5');

v2-69676b9c45f15185a5f2b0c079e4fe41_b.jpg

使用命令导入数据(注意反斜杠,反斜杠后面不能有空格等)

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--table importhdfs

v2-c9a564a3f560c6ae5e87c97ea689d8f1_b.jpg

v2-c21b6ae0d5db06b5f339c7f353eb1172_b.jpg

我们可以看reduce数量,sqoop不运行reduce

v2-910c57f081e6d619d318ac532bd522f6_b.jpg

或者

v2-6e029a995d2c4377fbb10ed4906c1d06_b.jpg

那么我们的数据在哪里?

v2-e006075368edad4abd06638aff492229_b.jpg

v2-a344f6ded6a4a85a2e4ee3a6d2684d6e_b.jpg

搜索outputdir,就可以看到目录

hdfs://mastercdh:8020/user/root/importhdfs

v2-cae2509e5e8696012c8b53b0e5b5d8cb_b.jpg

我们就可以看到数据了

v2-16c0c7b10388f8e1d92065929d061afe_b.jpg

我们查看下数据

bin/hdfs dfs -text /user/root/importhdfs/part-m-00001

v2-4a26d906525c229b56d7f58a127bbcbb_b.jpg

我们也可以

控制map任务的个数 -m,--num-mappers <n>

输出目录路径如果存在则删除--delete-target-dir

指定输出目录 --target-dir <dir>

运行下

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--delete-target-dir

--target-dir /sqoop_test

--table importhdfs

-m 1

v2-eb0a929f72b781e1bc8660d6dcf3c7ea_b.jpg

我们查看数据

v2-400e072130fda192ea555755a35fb5ab_b.jpg

bin/hdfs dfs -text /sqoop_test/part-m-00000

v2-e41034f8d1f91a7c14505a8fc00c5aa6_b.jpg

这个数据分隔符是逗号

1,x1

2,x2

3,x3

4,x4

5,x5

我们可以指定数据输出分隔符(mysql默认是 ',')

分隔符参数fields-terminated-by

命令

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--delete-target-dir

--target-dir /sqoop_test

--table importhdfs

-m 1

--fields-terminated-by "t"

v2-3b555007d4c9df6b92e2c413e5d561a1_b.jpg

查看下数据

bin/hdfs dfs -text /sqoop_test/part-m-00000

v2-243f4de228def82cfd0d00248f5b7948_b.jpg

其中有个日志信息

v2-f55de654562b60c5b21a9655100cf450_b.jpg

指定快速模式 --direct

命令

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--direct

--delete-target-dir

--target-dir /sqoop_test

--table importhdfs

-m 1

--fields-terminated-by "t"

v2-aa141d1dce8fa2b44e4dfcffdb47f1bd_b.jpg

bin/hdfs dfs -text /sqoop_test/part-m-00000

v2-92241f9e0c1164ba38fa64487ba0bfdc_b.jpg

增量导入,从原有的数据上进行追加数据。比如mysql中表数据变化了,那么我重新执行sqoop,会把HDFS上的数据删除,这不符合我们的要求,我们只希望在原来的基础上添加数据。

首先了解三个参数

--check-column (col):指定要导入时检查的列,行的检测列,一般都是拿主键作为检测列。注意:char、varchar类型不可以使用

--incremental (mode):有两种模式:append 和 lastmodifuied

append :追加 lastmodifuied:时间戳

--last-value (value):指定上次导入检测列最后字段的最大值,也就是最后一个值

在append模式下

v2-44258d799925ed6fb3e54f2d92673f76_b.jpg

增加几条数据

insert into importhdfs values(5,'x5');

insert into importhdfs values(6,'x6');

insert into importhdfs values(7,'x7');

insert into importhdfs values(8,'x8');

insert into importhdfs values(9,'x9');

v2-2a60fbdce4819c7e979a67de48d9f105_b.jpg

注意:append和--delete-target-dir不能同时使用

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--direct

--target-dir /sqoop_test

--table importhdfs

-m 1

--fields-terminated-by "t"

--check-column id

--incremental append

--last-value 5

v2-4ca572689e754e674201878ca8d26e1b_b.jpg

会有很多信息

v2-3602aa75370ddfe5abb196c4c3ae47cd_b.jpg

v2-19b688da23105884f1f3fff3dfe140cd_b.jpg

查看

v2-053fdb08009f80e31aa1f4e6e7b5056e_b.jpg

查看

bin/hdfs dfs -text /sqoop_test/part-m-00000

bin/hdfs dfs -text /sqoop_test/part-m-00001

v2-5a25898c20e30a52be0c02bf45c2fade_b.jpg

在lastmodifuied模式下

如果check-column是时间列time的话

--check-column time time列下面的数据,指定的就是你添加数据时最后的时间戳

--last-value "2019-12-19 19:04:07" 最后一行的时间戳

创建表

create table inc_tab(

id int,

name varchar(20),

last_mod timestamp default current_timestamp on update current_timestamp

);

添加数据

insert into inc_tab(id,name) values(1,'inc1');

insert into inc_tab(id,name) values(2,'inc2');

insert into inc_tab(id,name) values(3,'inc3');

insert into inc_tab(id,name) values(4,'inc4');

insert into inc_tab(id,name) values(5,'inc5');

v2-19a60f1ccc16031f35e24de7f7fd8d5d_b.jpg

执行sqoop命令

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--table inc_tab

--target-dir /sqoop_test_inc

--fields-terminated-by 't'

--num-mappers 1

v2-005124b6b66b5d8da2646e026950dc26_b.jpg

查看数据

bin/hdfs dfs -text /sqoop_test_inc/part-m-00000

v2-ddb421739cc6ac6a3a00bedf96893665_b.jpg

再添加几条数据

insert into inc_tab(id,name) values(6,'inc6');

insert into inc_tab(id,name) values(7,'inc7');

insert into inc_tab(id,name) values(8,'inc8');

v2-f347458c546395e7ff8f906960a15dcb_b.jpg

使用lastmodifuied模式进行增量导入指定增量数据是以--append(附加)还是 --merge-key(合并)模式进行添加

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--table inc_tab

--target-dir /sqoop_test_inc

--check-column last_mod

--fields-terminated-by 't'

--incremental lastmodified

--last-value "2019-12-20 03:13:51"

--num-mappers 1

--merge-key id

v2-065a2b54789d6a69e89c9760909801cc_b.jpg

bin/hdfs dfs -text /sqoop_test_inc/part-r-00000

v2-b7830a076c8f43d52882991560690024_b.jpg

这个地方是有reduce的

v2-aa17152c357dde2c16fdf72a9120153a_b.jpg

这些命令我们可以使用job执行:sqoop job

bin/sqoop job --create job01 创建

bin/sqoop job --delete <job-id> 删除任务

bin/sqoop job --exec <job-id> 执行job

bin/sqoop job --show <job-id> 显示job的详细信息

bin/sqoop job --list 显示可执行的job

示例语句:

sqoop job --create myjob -- import --connect jdbc:mysql://http://example.com/db

--table mytable

我们做个练习

先导入数据

insert into importhdfs values(11,'x11');

insert into importhdfs values(12,'x12');

insert into importhdfs values(13,'x13');

insert into importhdfs values(14,'x14');

insert into importhdfs values(15,'x15');

v2-c3bb27fc60b67f3c4323b78405682333_b.jpg

执行命令

bin/sqoop job

--create job_importhdfs

--

import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--direct

--target-dir /sqoop_test

--table importhdfs

-m 1

--fields-terminated-by "t"

--check-column id

--incremental append

--last-value 10

v2-e313bc94a7ee11627d65c32ab3fc8357_b.jpg

我们查看是否成功

v2-34eed9891c307aff67072b742214d32a_b.jpg

我们执行一下

bin/sqoop job --exec job_importhdfs

执行job的时候会确认密码,指定成mysql的登录密码

v2-2742dbefaacc36c88f672fb9cc42fa08_b.jpg

我们查看数据

v2-623cc4abd46f49b69b767da64b01bf75_b.jpg

可以选择行列

导出某几列数据或者几行数据

bin/sqoop import

--connect jdbc:mysql://mastercdh:3306/sqoop_test

--username root

--password password

--direct

--delete-target-dir

--target-dir /where_test_importhdfs

--table importhdfs

-m 1

--fields-terminated-by "t"

--where 'id<6'

v2-d7b2d150ed7532e29516d7c670234d49_b.jpg

查看数据

bin/hdfs dfs -text /where_test_importhdfs/part-m-00000

v2-0f74b5b394d670e9cbe50184a37eb126_b.jpg

导出某几列

--query使用要点:

不能使用--table

如果--query的sql语句带着where字句,

必须要加上标识符$CONDITIONS

v2-9b9c055f9c55bf2ff6dece5e1cac3a9a_b.jpg

查看数据

bin/hdfs dfs -text /where_test_importhdfs_sql/part-m-00000

v2-e9b5c5e5abf31f86ec8b21f943f68ebf_b.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值