大数据协作框架——sqoop学习权威指南

大数据协作框架

“大数据协作框架”其实是一个统称,实际上就是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 and

structured datastores such as relational databases.

扫描二维码关注公众号,回复: 1534939 查看本文章


sqoop1&sqoop2

  • 两个不同版本,完全不兼容
  • 版本号划分方式 :
                Apache:1.4.x~ ,1.99.x~
  • 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 --help

bin/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 应用场景:

主要用来把分析结果进行永久保存,用于前端展示

猜你喜欢

转载自blog.csdn.net/qq_35036995/article/details/80298553
今日推荐