sqoop总结

                                                                          sqoop2

 

 

*sqoop就是可以高效的让关系型数据库和大数据平台存储系统进行数据迁移的框架

其底层原理是把用户的操作转换成map任务然后发布到yarn上进行分布式的执行,从而完成对大数据的迁移。

*sqoop2包含客户端和服务端

客户端:1.cli

         2.java api

服务端:1.元数据存储,用户执行数据迁移操作时需事先配置的各种组件的信息

         2.提供rpc调用服务(http协议)

         3.解析编译用户的操作指令,转换成map任务,然后发送到yarn上运行

         4.在map任务在yarn上运行的时候,它还可以对map任务进行监控和操作,依赖jobhistory服务

sqoop依赖:hdfs,yarn,jobhistory

*sqoop2的组件

1.connector连接器,它记录着sqoop2连接各种存储系统的连接方式和对应的驱动等程序。

 

2.link,连接,一个link是某个connector的类型的实例,一个link代表着一个具体的和存储系统之间的连接。

3.job,作业,一个作业由一个 from 的 link 和一个 to 的 link构成。job启动就会把这个etl过程转换成mapreduce任务,发送到yarn上去执行。

 

*sqoop2的启动

sqoop2在启动的时候需要注意启动的目录,因为普通的配置会让sqoop2在启动的时候就在当前目录下会生成两个文件夹@LOGDIR@(sqoop2服务的运行日志) 和@BASEDIR@(元数据库derby)

 

*sqoop2的指令

show  查看组件配置信息

create  创建组件

delete  删除组件

update  更新组件

clone   复制组件,当组件配置复杂时可以把另一个类似的组件配置复制一下然后修改局部即可

start   启动 job

stop    停止job

status  查看job的运行状态

 

set option --name verbose --value true

set server --url http://sqoop2.company.net:80/sqoop

 

-- 使用把mysql上某张表的数据导入到hdfs上

1.创建一个link连接mysql,类型:generic-jdbc-connector

  create link -c generic-jdbc-connector

2.创建一个link连接hdfs

  create link -c hdfs-connector

  URI: hdfs://centos1:9000/

  Conf directory: /usr/hadoop/hadoop-2.6.4/etc/hadoop

3.创建一个job from mysql link  to hdfs link

  create job -f my-windows-mysql -t my-hdfs

  

4.启动job

  start job -n student_mth

 

 

update link -n my-windows-mysql

查看提交的任务命令

show submission

查看job的执行状态命令

status job -n student_mth

 

 

-- 取出每个学生和其各科考试成绩,导入到hdfs上

 

select *

from table1 a

join table2 b

on a.xx=b.xx

where ${CONDITIONS} and ll

 

 

使用sql从关系型数据抽取数据到hdfs上需要注意的问题:

1.Schema name、Table name、Table column names三个配置项要为空,不然会和sql冲突

2.sql上必须要包含“${CONDITIONS}”这个字符串,它需要加在where的后面

3.partition column 必须得填写,而且partition column的名称必须出现在select的后面

  如果sql代码在满足上面两个条件比较麻烦是,可以使用子查询,然后把${CONDITIONS}加在子查询外面,如:

select * from(

SELECT

  a.s AS s,

  a.sname sname,

  a.sage sage,

  a.ssex ssex,

  b.score score,

  c.Cname NAME

FROM

  student a

  INNER JOIN sc b

    ON a.s = b.s

  INNER JOIN course c

    ON b.C = c.c

)d

where ${condition}

 

 

*sqoop的java api操作步骤

1.首先确定sqoop服务端的url,http://centos1:12000/sqoop/

2.使用url来构建client对象,SqoopClient

3.调用clinet的各种方法来进行创建、修改、删除link,创建、修改、删除、启动job

 

假设mysql上有一张订单表,大数据平台上要对订单进行分析,订单表的数据每天都要抽取到大数据平台下

使用sqoop来完成这个过程

对这张表的导入,就需要使用增量导入的方式

 

order 表有

orderid customerid orderdate

 

select * from order where orderdate='20180320'

 

job

from link中的sql,添加日期限定条件,从而完成增量导入

 

需要开发:

1.java类,接受参数date,样式20180320

在这个类里面的执行方法,根据接受到的参数,来创建新的job,并启动job,实现自动化导入过程

 

 

 

                                                                 sqoop1

 

数据分成两类:

1.维度数据:描述事物的  可以增量也可以全量甚至可以不导

2.事实数据:描述事件的  一定是要增量导入

incremental import增量导入

check column:检查增量标识字段,一般为id(唯一标识),而这个id一般是顺序递增的

last modify:最后一次导入的id的最大值

user

 

 

*sqoop1的使用

主要应用指令:

sqoop-import

sqoop-export

 

sqoop tool-name [tool-arguments]

 

tool-name  description

export             Export an HDFS directory to a database table

import             Import a table from a database to HDFS

import-all-tables  Import tables from a database to HDFS

 

-- 把linux的mysql里面hive数据库里面的COLUMNS_V2的数据导入到hdfs上

import

-- 使用表的指令写法来进行导入数据

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true \

--connect jdbc:mysql://master:3306/hive \

--driver com.mysql.jdbc.Driver \

--password sa \

--username root \

--as-textfile \

--table COLUMNS_V2 \

--split-by CD_ID \

--target-dir /sqoop1test/columns_v2 \

--append

-m 2

--compress

 

-- 使用sql的形式来进行表数据的导入

-- 导入hive的表(tbls)和其字段(columns_v2)的名称类型

 

tbl_id tbl_name tbl_type column_name type_name

 

sqoop import \

--connect jdbc:mysql://centos1:3306/hive \

--driver com.mysql.jdbc.Driver \

--password sa \

--username root \

--as-textfile \

--query 'SELECT * FROM ( SELECT a.TBL_ID        ,a.TBL_NAME        ,a.TBL_TYPE        ,c.COLUMN_NAME        ,c.TYPE_NAME FROM TBLS a INNER JOIN SDS b ON a.SD_ID=b.SD_ID INNER JOIN COLUMNS_V2 c ON b.CD_ID=c.CD_ID )a WHERE $CONDITIONS' \

--split-by TBL_ID \

--target-dir /sqoop1test/tablecolumns

 

--query后面的sql可以使用单引号来括中,如上例,但是有可能sql中就包含单引号,这种情况下再用单引号括中sql的话就会有错误发生

这时可以使用双引号来括中sql,但是使用双引号括中sql的时候$CONDITIONS的$前面需要加一个转义字符:\$CONDITIONS

 

--query "

SELECT *

FROM (

SELECT a.TBL_ID

       ,a.TBL_NAME

       ,a.TBL_TYPE

       ,c.COLUMN_NAME

       ,c.TYPE_NAME

FROM TBLS a

INNER JOIN SDS b

ON a.SD_ID=b.SD_ID

INNER JOIN COLUMNS_V2 c

ON b.CD_ID=c.CD_ID

WHERE a.TBL_TYPE='EXTERNAL_TABLE'

)a

WHERE \$CONDITIONS

"

*sqoop1也支持增量导入:Incremental Imports

增量导入的参数配置:

--incremental (mode):append  lastmodified

如果我们导入的数据表的唯一标识(id)是序列递增的值的时候可以使用append

append模式需要配合:--check-column  --last-value

这样在进行新导入的时候就会在sql上加上 check-column>last-value来限定导入的数据(数值型)

 

如果使用lastmodified的模式的话,需要指定一个最后更新时间的字段,然后--last-value参数指定上次导入数据的时间戳,那么新导入数据时,就会给sql加上 check-column>last-value来限定导入的数据(时间戳)

 

--作业,使用append模式来实现增量导入的案例

 

 

--把mysql中的数据导入到hive数据仓库里面

--把mysql中的COLUMNS_V2导入到hive库里面

 

sqoop import \

--connect jdbc:mysql://centos1:3306/hive \

--driver com.mysql.jdbc.Driver \

--password sa \

--username root \

--table COLUMNS_V2 \

--split-by CD_ID \

--as-textfile \

--hive-import \

--hive-table from_mysql_column_v2 \

--hive-overwrite \

--hive-home /usr/hadoop/apache-hive-2.1.0-bin

 

 

-- 作业,把columes_v2导入到hbase表:column_v2中

 

 

*sqoop-export导出

*把/eshopdata/20170817/text/categories文件夹下的数据导出到mysql中

 

CREATE TABLE category(

cate_id VARCHAR(20),

dep_id VARCHAR(20),

cate_name VARCHAR(50)

)

 

sqoop export --connect jdbc:mysql://master:3306/test --driver com.mysql.jdbc.Driver --password 123456 --username root --table category --export-dir /order-dataresource/category --input-fields-terminated-by '|'

 

下载kafka 0.10.1.x

下载kettle

https://community.hds.com/docs/DOC-1009855

下载网址:

https://sourceforge.net/projects/pentaho/files/Data%20Integration/

pdi-ce-7.0.0.0-25.zip

 

 

                                                                            

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值