sqoop(2):import之mysqlToHDFS

一、实现功能

将mysql数据库中数据导入到hdfs上。

二、方法

1.mysql中新建测试表

create database if not exists sqoop;

use sqoop;

//创建测试表
create table tohdfs(
id int primary key not null,
name varchar(20) not null
);

//插入测试数据
insert into tohdfs value('1','jack');
insert into tohdfs value('2','leo');
insert into tohdfs value('3','peter');
insert into tohdfs value('4','tom');
insert into tohdfs value('5','linda');
insert into tohdfs value('6','marry');
insert into tohdfs value('7','jerry');
insert into tohdfs value('8','zhangsan');
insert into tohdfs value('9','lisi');

2.mysql数据导入到HDFS,指定目录"/sqoop"

bin/sqoop import \
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--target-dir /sqoop

3.指定mapper数量

  指定使用id字段分割数据到不同的mapper中

bin/sqoop import \
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/sqoop \
--username root \
--password 123456 \
--delete-target-dir \
--table tohdfs \
--split-by id \
--num-mappers 5

4.提前删除输出目录(重复输出数据到同一个路径会报错)

bin/sqoop import \
--connect jdbc:mysql://bigdata-03:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 1

5.自定义分隔符

(1)指定输入sqoop的数据的分隔符
--input-fields-terminated-by <char>
(2)指定输出sqoop数据的分隔符
--fields-terminated-by <char>

bin/sqoop import \
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 1 \
--fields-terminated-by ','

6.增量导入

【官网:http://archive.cloudera.com/cdh5/cdh/5/sqoop/SqoopUserGuide.html#_incremental_imports

(1)功能:从原有的数据上进行追加数据

(2)配置参数

--check-column:指定要确定要导入的行时要检查的列,一般都是拿主键作为检测列,注意:char、varchar类型是不可以的
--incremental:有两种模式:append 和 lastmodified
    append 追加 ,lastmodified 时间戳
    
--last-value:指定上次导入检查列最后字段的最大值,也就是最后一个值

(3)两种模式

append模式

    --check-column id
    --last-value 5  //5的作用是,这次导入时候,从mysql表中id=5的后面开始导入!

lastmodified模式

  --check-column time   列time下面的数据:指的是你添加数据时的一个时间戳
  --last-value last_time  最后一行数据的时间戳

(4)测试append模式增量导入

(a)在mysql里增加数据

insert into tohdfs values(10,'one');
insert into tohdfs values(11,'two');
insert into tohdfs values(12,'three');
insert into tohdfs values(13,'four');
insert into tohdfs values(14,'five');

(b)导入到hdfs

bin/sqoop import \
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--target-dir /sqoop_test \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t" \
--check-column id \
--incremental append \
--last-value 7

结果:
6       marry
7       jerry
8       zhangsan
9       lisi
10      one
11      two
12      three
13      four
14      five
***********下面就是新追加的值!***************
8       zhangsan
9       lisi
10      one
11      two
12      three
13      four
14      five

7、sqoop 创建一个job

(1)基本命令

bin/sqoop job --create  创建
bin/sqoop job --list    显示可用的job
bin/sqoop job --show myjob 显示job的详细信息(show后面拼接job的名称)
bin/sqoop job --exec 执行(指定job)
bin/sqoop job --delete 删除(指定job)

(2)在mysql中再次添加数据

insert into tohdfs values(15,'1one');
insert into tohdfs values(16,'1two');
insert into tohdfs values(17,'1three');
insert into tohdfs values(18,'1four');
insert into tohdfs values(19,'1five');

(3)创建job:jobID01 

bin/sqoop job \
--create jobID01 \
-- \
import \
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--target-dir /sqoop_test3 \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t" \
--check-column id \
--incremental append \
--last-value 14

(4)执行job

bin/sqoop job --exec jobID01

输入mysql的密码

猜你喜欢

转载自blog.csdn.net/u010886217/article/details/83929485