大数据协作框架
“大数据协作框架”其实是一个统称,实际上就是Hadoop 2.x生态系统中几个辅助Hadoop 2.x框架。在此,主要是以下四个框架:
- 数据转换工具Sqoop
- 文件收集库框架Flume
- 任务调度框架Oozie
- 大数据WEB工具Hue
选择CDH5.3.x版本框架
Cloudera公司发布的CDH 版本,为众多公司所使用,包括国内的京东、一号店、淘宝、百度等电商互联网大中小性公司。Cloudera公司发布的每一个CDH版本,其中一个最大的好处就是,帮我们解决了大数据Hadoop 2.x生态系统中各个框架的版本兼容问题,我们直接选择某一版本,比如CDH5.3.6版本,其中hadoop版本2.5.0,hive版本0.13.1,flume版本1.4.5;还有一点就是类似Sqoop、Flume、Oozie等框架,在编译的时候都要依赖对应的Hadoop 2.x版本,使用CDH版本的时候,已经给我们编译好了,无需再重新配置编译。
CDH 5.x版本下载地址:http://archive.cloudera.com/cdh5/cdh/5/
在使用sqoop需要先部署CDH版本的hadoop&hive
hadoop安装及配置:https://blog.csdn.net/qq_35036995/article/details/80275320
hive安装及配置:https://blog.csdn.net/qq_35036995/article/details/80249944
CDH版本和apache版本的服务不要混用只开启cdh或者apache服务就可以了部署方式参考apache版本
Apache Sqoop
Apache Sqoop(TM) is a tool designed for efficientlytransferring bulk data between Apache Hadoop andstructured datastores such as relational databases.
sqoop1&sqoop2
- 两个不同版本,完全不兼容
- 版本号划分方式 :
- Sqoop2比Sqoop1的改进:
引入sqoop server,集中化管理Connector等
多种访问方式:CLI,Web UI,REST API
引入基于角色的安全机制
sqoop分为sqoop和sqoop2
sqoop2拆分server和client,有点类似于hiveserver2和beeline
sqoop早起是一些分装好的MR程序,以jar文件的形式,最后才演变成框架形式
sqoop底层的运行MR任务,但是sqoop任务只有map任务,没有reduce任务
用于在hadoop和结构化数据库(关系型数据库)之间的高效传输批量数据的工具
数据的导入和导出
sqoop架构图
sqoop使用要点
一、sqoop部署
sqoop安装及配置:https://blog.csdn.net/qq_35036995/article/details/80275239
二、sqoop使用
1、查看帮助信息
bin/sqoop help
2、测试:sqoop连接mysql
bin/sqoop list-databases --helpbin/sqoop list-databases --connect jdbc:mysql://hadoop01.xningge.com:3306/ --username xningge --password 123456
三、sqoop导入 import
导入导出
**以hdfs为基准
**rdbms --> hdfs --> 导入 - import
**hdfs --> rdbms --> 导出 - export
导入数据HDFS
sqoop import
【mysql -> hdfs】import
在mysql操作
使用数据库
create database sqoop;
use sqoop;
创建表
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');
1、sqoop的常规命令:
查看import使用参数:bin/sqoop import --help
bin/sqoop import \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--password 123456 \
--table tohdfs
查看HDFS的输出目录:mapreduce.output.fileoutputformat.outputdir
hdfs://hadoop01.xningge.com:8020/user/hadoop/tohdfs
2、控制map的任务个数:-m,--num-mappers <n>并且输出路径如果存在可以使用--delete-target-dir删除
bin/sqoop import \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--password 123456 \
--delete-target-dir \
--table tohdfs \
-m 1
3、指定导入的输出目录:--target-dir <dir>
bin/sqoop import \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--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>
bin/sqoop import \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--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.xningge.com:3306/sqoop \
--username xningge \
--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
--check-column (col):指定要确定导入时,行的检查列,一般都是拿主键作为检测列,注意:char,vachar类型是不可以使用--incremental (mode):有两种模式:append 和lastmodified
append:追加,和lastmodified 时间戳
--last-value (value):指定上次导入检查列最后字段的最大值,也就是最后一个值
append模式:
--check-column id
--last-value 5
lastmodified 模式:
--check-column time time列下面的数据:指的是你添加数据时的最后一个字段
--last-value last-time 最后一行的时间戳
append模式增量导入:
在mysql里增加数据:
insert into tohdfs values(16,'one');
insert into tohdfs values(17,'two');
insert into tohdfs values(18,'three');
insert into tohdfs values(19,'four');
insert into tohdfs values(20,'five');
导入:注意下 --delete-target-dir 和 --append不能同时使用
bin/sqoop import \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--password 123456 \
--direct \
--target-dir /sqoop_test \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t" \
--check-column id \
--incremental append \
--last-value 15
如果使用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'}
7、sqoop job
bin/sqoop job --create jobID01 创建
bin/sqoop job --show jobID01 显示job的详细信息
bin/sqoop job --list 显示可用的job
bin/sqoop job --exec 执行job
在mysql中再次插入数据:
insert into tohdfs values(21,'one');
insert into tohdfs values(22,'two');
insert into tohdfs values(23,'three');
insert into tohdfs values(24,'four');
insert into tohdfs values(25,'five');
创建job:
bin/sqoop job \
--create jobID01 \
-- \
import \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--password 123456 \
--direct \
--target-dir /sqoop_test \
--table tohdfs \
-m 1 \
--fields-terminated-by "\t" \
--check-column id \
--incremental append \
--last-value 20
bin/sqoop job --exec jobID01 执行job的时候会输入密码,一般指定成mysql的登陆密码
sqoop import hive
【mysql -> hive】import
bin/sqoop import \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--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 table stu_info(
num int,
name string
)
row format delimited fields terminated by "\t";
机制:运行mr任务时,结果将会保存在默认的输出目录上,将结果集文件移动到hive对应表的文件夹下
从mysql-> hdfs/hive 应用场景:
主要用来分析mysql存储历史数据(公司的业务日志,系统的数据)
sqoop导出export
【hdfs -> mysql】
1、常规模式导入到mysql
bin/sqoop export \
--connect jdbc:mysql://hadoop01.xningge.com:3306/sqoop \
--username xningge \
--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
);
2、使用sqoop运行一个file文件: --options-file
类似于hive的-f选项
1)vi sqoop.file
2)写命令
写法:一行key ,一行value
export
--connect
jdbc:mysql://hadoop01.xningge.com:3306/sqoop
--username
root
--password
123456
--table
filetomysql
--export-dir
/sqoop_test
-m
1
--input-fields-terminated-by
'\t'
3)在mysql中创建表
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 应用场景:
主要用来把分析结果进行永久保存,用于前端展示