
一:sqoop的部署
-》 主要数据的来源:
RDMBS关系型数据库 -》sqoop
日志文件 -》flume
官网:
http://sqoop.apache.org/
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.5-cdh5.3.6/
-》 主要数据的来源:
RDMBS关系型数据库 -》sqoop
日志文件 -》flume
官网:
http://sqoop.apache.org/
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.5-cdh5.3.6/
1、sqoop分为sqoop和sqoop2
2、sqoop2拆分server和client,有点类似于hiveserver2和beeline
3、sqoop早起是一些分装好的MR程序,以jar文件的形式,最后才演变成框架形式
4、sqoop底层的运行MR任务,但是sqoop任务只有map任务,没有reduce任务
5、用于在hadoop和结构化数据库(关系型数据库)之间的高效传输批量数据的工具
6、数据的导入和导出
2、sqoop2拆分server和client,有点类似于hiveserver2和beeline
3、sqoop早起是一些分装好的MR程序,以jar文件的形式,最后才演变成框架形式
4、sqoop底层的运行MR任务,但是sqoop任务只有map任务,没有reduce任务
5、用于在hadoop和结构化数据库(关系型数据库)之间的高效传输批量数据的工具
6、数据的导入和导出
7、部署sqoop:
-》解压:
-》配置环境变量:修改sqoop-env.sh
-》将mysql的驱动jar包拷贝到lib目录下:
-》解压:
-》配置环境变量:修改sqoop-env.sh
-》将mysql的驱动jar包拷贝到lib目录下:
查看帮助信息:bin/sqoop help
测试:sqoop 连接 mysql
bin/sqoop list-databases --help
bin/sqoop list-databases --connect jdbc:mysql://hadoop01.com:3306/ --username root --password 123456
测试:sqoop 连接 mysql
bin/sqoop list-databases --help
bin/sqoop list-databases --connect jdbc:mysql://hadoop01.com:3306/ --username root --password 123456
二、sqoop导入 import
导入导出
**以hdfs为基准
**rdbms --> hdfs --> 导入 - import
**hdfs --> rdbms --> 导出 - export
导入导出
**以hdfs为基准
**rdbms --> hdfs --> 导入 - import
**hdfs --> rdbms --> 导出 - export
【mysql -> hdfs】
在mysql操作
使用数据库
create database sqoop;
use sqoop;
在mysql操作
使用数据库
create database sqoop;
use sqoop;
创建表
create table tohdfs(
id int primary key not null,
name varchar(20) not null
);
create table tohdfs(
id int primary key not null,
name varchar(20) not null
);
insert into tohdfs values(1,'one');
insert into tohdfs values(2,'two');
insert into tohdfs values(3,'three');
insert into tohdfs values(4,'four');
insert into tohdfs values(5,'five');
insert into tohdfs values(2,'two');
insert into tohdfs values(3,'three');
insert into tohdfs values(4,'four');
insert into tohdfs values(5,'five');
指定导入hdfs的路径
1、sqoop的常规命令:
查看import使用参数:bin/sqoop import --help
bin/sqoop import \
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs
查看import使用参数:bin/sqoop import --help
bin/sqoop import \
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs
查看HDFS的输出目录:mapreduce.output.fileoutputformat.outputdir
hdfs://hadoop01.com:8020/user/hadoop/tohdfs
hdfs://hadoop01.com:8020/user/hadoop/tohdfs
2、控制map的任务个数:-m,--num-mappers <n>
并且输出路径如果存在可以使用--delete-target-dir删除
并且输出路径如果存在可以使用--delete-target-dir删除
bin/sqoop import \
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--delete-target-dir \
--table tohdfs \
-m 1
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--delete-target-dir \
--table tohdfs \
-m 1
3、指定导入的输出目录:--target-dir <dir>
bin/sqoop import \
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--delete-target-dir \
--target-dir /sqoop_test \
--table tohdfs \
-m 1
bin/sqoop import \
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--delete-target-dir \
--target-dir /sqoop_test \
--table tohdfs \
-m 1
4、指定数据输出分隔符(mysql默认的分隔符是 "," hive默认的分割符是"\001" 也就是^A)
Output line formatting arguments:
--fields-terminated-by <char>
-》mysql -》 hive -》输出Output 针对hdfs来说输出文件是输入还是输出?
Output line formatting arguments:
--fields-terminated-by <char>
-》mysql -》 hive -》输出Output 针对hdfs来说输出文件是输入还是输出?
bin/sqoop import \
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--delete-target-dir \
--target-dir /sqoop_test \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t"
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--delete-target-dir \
--target-dir /sqoop_test \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t"
5、快速模式 --direct
bin/sqoop import \
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--delete-target-dir \
--target-dir /sqoop_test \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t"
--connect jdbc:mysql://hadoop01.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--delete-target-dir \
--target-dir /sqoop_test \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t"
6、增量导入(从原有的数据上进行追加数据):
官网:http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.5-cdh5.3.6/SqoopUserGuide.html#_incremental_imports
官网:http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.5-cdh5.3.6/SqoopUserGuide.html#_incremental_imports
--check-column (col):指定要确定导入时,行的检查列,一般都是拿主键作为检测列,注意:char,vachar类型是不可以使用
--incremental (mode):有两种模式:append 和lastmodified
append:追加,和lastmodified 时间戳
--last-value (value):指定上次导入检查列最后字段的最大值,也就是最后一个值
--incremental (mode):有两种模式:append 和lastmodified
append:追加,和lastmodified 时间戳
--last-value (value):指定上次导入检查列最后字段的最大值,也就是最后一个值
append模式:
--check-column id
--last-value 5
--check-column id
--last-value 5
lastmodified 模式:
--check-column time time列下面的数据:指的是你添加数据时的最后一个字段
--last-value last-time 最后一行的时间戳
append模式增量导入:
--check-column time time列下面的数据:指的是你添加数据时的最后一个字段
--last-value last-time 最后一行的时间戳
append模式增量导入:
在mysql里增加数据:
insert into tohdfs values(6,'one');
insert into tohdfs values(7,'two');
insert into tohdfs values(8,'three');
insert into tohdfs values(9,'four');
insert into tohdfs values(10,'five');
insert into tohdfs values(7,'two');
insert into tohdfs values(8,'three');
insert into tohdfs values(9,'four');
insert into tohdfs values(10,'five');
导入:注意下 --delete-target-dir 和 --append不能同时使用
bin/sqoop import \
--connect jdbc:mysql://hadoop01.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 5
--connect jdbc:mysql://hadoop01.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 5
如果使用lastmodified模式:在mysql建表时,添加关于时间戳的列
--incremental lastmodified
--check-column last_mod
--last-value 2018-01-20 21:29:48.0
date={date -d 'last day' +'%Y-%m-%d %H:%M'}
--check-column last_mod
--last-value 2018-01-20 21:29:48.0
date={date -d 'last day' +'%Y-%m-%d %H:%M'}
7、sqoop job
bin/sqoop job --create jobID01 创建
bin/sqoop job --show jobID01 显示job的详细信息
bin/sqoop job --list
bin/sqoop job --exec 执行job
在mysql中再次插入数据:
insert into tohdfs values(11,'one');
insert into tohdfs values(12,'two');
insert into tohdfs values(13,'three');
insert into tohdfs values(14,'four');
insert into tohdfs values(15,'five');
insert into tohdfs values(12,'two');
insert into tohdfs values(13,'three');
insert into tohdfs values(14,'four');
insert into tohdfs values(15,'five');
创建job:
bin/sqoop job \
--create jobID02 \
-- \ //注释:这边有空格
import \
--connect jdbc:mysql://node-1: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 5
bin/sqoop job \
--create jobID02 \
-- \ //注释:这边有空格
import \
--connect jdbc:mysql://node-1: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 5
bin/sqoop job --exec jobID02 执行job的时候会输入密码,一般指定成mysql的登陆密码
bin/sqoop import \
--connect jdbc:mysql://node-1:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--direct \
--delete-target-dir \
--hive-import \
--hive-database student \
--hive-table stu_info \
--fields-terminated-by "\t" \
-m 1
【mysql -》 hive】import
首先连接数据库,指定mysql的源数据表;然后指定导入hive中,指定hive中数据库,hive中的表
bin/sqoop import \
--connect jdbc:mysql://node-1:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--direct \
--delete-target-dir \
--hive-import \
--hive-database student \
--hive-table stu_info \
--fields-terminated-by "\t" \
-m 1
--connect jdbc:mysql://node-1:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--direct \
--delete-target-dir \
--hive-import \
--hive-database student \
--hive-table stu_info \
--fields-terminated-by "\t" \
-m 1
在hive中操作:
create database student;
创建接收表
create database student;
创建接收表
create table stu_info(
num int,
name string
)
row format delimited fields terminated by "\t";
num int,
name string
)
row format delimited fields terminated by "\t";
机制:运行mr任务时,结果将会保存在默认的输出目录上,将结果集文件移动到hive对应表的文件夹下
-》从mysql-》 hdfs/hive 应用场景:
主要用来分析mysql存储历史数据(公司的业务日志,系统的数据)
四、sqoop导出export
【hdfs -》 mysql】
【hdfs -》 mysql】
首先指定导入的MySQL中目标数据库,指定导入的表;然后指定hdfs上的源文件目录;
1、常规模式导入到mysql
1、常规模式导入到mysql
bin/sqoop export \
--connect jdbc:mysql://node-1:3306/sqoop \
--username root \
--password 123456 \
--table tomysql \
--export-dir /sqoop_test \
-m 1 \
--input-fields-terminated-by '\t'
--connect jdbc:mysql://node-1:3306/sqoop \
--username root \
--password 123456 \
--table tomysql \
--export-dir /sqoop_test \
-m 1 \
--input-fields-terminated-by '\t'
先在mysql中创建表
create table tomysql(
id int primary key not null,
name varchar(20) not null
);
create table tomysql(
id int primary key not null,
name varchar(20) not null
);
2、使用sqoop运行一个file文件: --options-file
-》类似于hive的-f选项
-》类似于hive的-f选项
1)vi sqoop.file
2)写命令
写法:一行key ,一行value
export
--connect
jdbc:mysql://node-1:3306/sqoop
--username
root
--password
123456
--table
filetomysql
--export-dir
/user/hive/warehouse/student.db/stu_info/
-m
1
--input-fields-terminated-by
'\t'
写法:一行key ,一行value
export
--connect
jdbc:mysql://node-1:3306/sqoop
--username
root
--password
123456
--table
filetomysql
--export-dir
/user/hive/warehouse/student.db/stu_info/
-m
1
--input-fields-terminated-by
'\t'
3)在mysql中创建表
create table filetomysql(
id int primary key not null,
name varchar(20) not null
);
create table filetomysql(
id int primary key not null,
name varchar(20) not null
);
4)执行文件:
bin/sqoop --options-file /opt/datas/sqoop.file
-》从hive /hdfs -> mysql 应用场景:
主要用来把分析结果进行永久保存,用于前端展示
bin/sqoop --options-file /opt/datas/sqoop.file
-》从hive /hdfs -> mysql 应用场景:
主要用来把分析结果进行永久保存,用于前端展示