hadoop生态圈mysql_Hadoop生态圈---azkaban--sqoop

一、azkaban sqoop基本介绍

azkaban的介绍

478d34c32d5eb72c3941cba56dc841da.png

azkaban web server :  提供一个web的UI管理界面: 创建项目, 执行任务, 监控任务流程,,

azkaban executor server:  执行器, 用来执行web ui提交的工作流的任务

mysql数据库:  存储元数据信息

产生背景:存在依赖关系,周期性执行

oozie和azkaban之间区别:

1)azkaban采用kv键值对,oozie采用xml配置

2)azkaban提供了非常友好的管理界面

3)azkaban功能非常强大,只要能使用shell命令执行的任务,都可以交给azkaban

4)azkanban开源性

Apache Sqoop是在Hadoop生态体系和RDBMS体系之间传送数据的一种工具。

站在Apache立场看待数据流转问题,可以分为数据的导入导出:

Import:数据导入。RDBMS----->Hadoop

Export:数据导出。Hadoop---->RDBMS

二、sqoop的全量导入

导入工具 导入单个表从RDBMS到HDFS

导入的语法 :bin/sqoop import (generic-args) (import-args)

2.1 全量导入mysql表数据到HDFS

bin/sqoop import \

--connect jdbc:mysql://node-1:3306/userdb \

--username root \

--password 123456 \

--delete-target-dir \

--target-dir /sqoopresult \

--table emp --m 1

属性说明:

import : 执行导入

--connect : 连接数据库地址

--username : 用户名

--password : 密码

--delete-target-dir : 如果--target-dir指定目录存在, 则先进行删除

--target-dir : 指定导出路径(hdfs)

--table : 指定要导出的数据库的表名

--m : 指定要执行几个map, 如果指定为 多个, 需要配合 --split-by 使用

--split-by : 用于指定根据那个字段进行划分

--fields-terminated-by : 指定导出后字段与字段之间的分隔号, 默认为 逗号

2.2  全量导入mysql表数据到hive

将mysql的数据导入到hive,主要分为两种方式

1)先复制表结构,然后导出其数据

2)直接将表结构和数据一起导出

2.2.1 先复制表结构后导入

1) 将关系型数据的表结构复制到hive中

bin/sqoop create-hive-table \

--connect jdbc:mysql://hadoop01:3306/userdb \

--table emp_add \

--username root \

--password 123456 \

--hive-table test.emp_add_sp

属性说明 :

create-hive-table : 指定操作 : 创建hive的表

--hive-table : 导入到hive的那个表中(注意: 建议 库名.表名, 否则会将表放置到默认的数据库中)

注意: 在导入的时候, 需要先将hive的对应的数据库先创建好, 否则也是不允许导入的

2)数据的导入工作

bin/sqoop import \

--connect jdbc:mysql://hadoop:3306/userdb \ 数据库中的数据库名

--username root \

--password hadoop \

--table emp_add \ 数据库中的表名

--hive-table test.emp_add_sp \ 要加入到hive中的那个表

--hive-import \

--m 1

--hive-import : 标识为是hive的导入

2.2.2 直接将表结构和数据一起导出

bin/sqoop import \

--connect jdbc:mysql://hadop01:3306/userdb \

--username root \

--password hadoop \

--table emp_conn \

--hive-import \

--m 1 \

--hive-database test;

此种导入方案, 导入到hive中, 默认的表名和关系型数据库的表名一致

2.3 导入表数据子集(query查询)

注意事项:

1)使用query sql语句来进行查找不能加参数--table ;

2)并且必须要添加where条件;

3)并且where条件后面必须带一个$CONDITIONS 这个字符串;

4)并且这个sql语句必须用单引号,不能用双引号;

bin/sqoop import \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root \

--password 123456 \

--target-dir /wherequery12 \

--query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \

--split-by id \

--fields-terminated-by '\t' \

--m 2

属性:

--query : 编写SQL语句的地方

--split-by : 要使用那个字段进行切割 一般是配合 --m 来使用 , 当--m为1的时候, 不需要指定

注意:

1) 一旦使用 --query, 就不能使用--table

2) 一旦使用 --query, SQL中必须包含where条件

3) where条件的后面 $CONDITIONS

4) --query后面SQL必须使用单引号引起

2.4  导入表数据子集(where过滤)

bin/sqoop import \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root \

--password 123456 \

--where "city ='sec-bad'" \

--target-dir /wherequery \ -- 在hdfs中的路径

--table emp_add \

--m 1

三、sqoop的增量导入

在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据每次都全部导入到hive或者hdfs当中去,这样会造成数据重复的问题。因此一般都是选用一些字段进行增量的导入, sqoop支持增量的导入数据。

增量导入是仅导入新添加的表中的行的技术。

增量导入涉及的参数 :

--check-column (col)

用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似。

注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时-- check-column可以去指定多个列。

--incremental (mode)

append:追加,比如对大于last-value指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期之后的记录

--last-value (value)

指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一

3.1 append模式

1)先执行以下指令将我们之前的数据全量导入:

bin/sqoop import \

--connect jdbc:mysql://node-1:3306/userdb \

--username root \

--password hadoop \

--target-dir /appendresult \

--table emp --m 1

2)然后在MySQL的emp汇总插入2条增量数据

3)执行如下的指令, 实现增量的导入:

bin/sqoop import \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root --password hadoop \

--table emp --m 1 \

--target-dir /appendresult \

--incremental append \

--check-column id \

--last-value 1205

--incremental : 按照那种方式进行增量, 可选择为 append 和 lastmodified

--check-column : 根据那个列名来检测数据是否更新

--last-value : 上一次的值、

特点: 将 大于 --last-value的值导入到hadoop中

4)最后验证导入数据目录 可以发现多了一个文件 里面就是增量数据

5e03b0451f952eeb36e6cbc34ed08355.png

3.2 lastmodified模式

lastmodified增量导入:

bin/sqoop import \

--connect jdbc:mysql://ahdoop01:3306/userdb \

--username root \

--password 123456 \

--table customertest \

--target-dir /lastmodifiedresult \

--incremental lastmodified \

--check-column last_mod \

--last-value "2019-09-24 16:18:25" \

--m 1 \

--append

属性:

--append : 可选值: append| merge-key

append :将大于等于last-value的数据进行导入操作(更新 和 新增),但是,不会将之前的旧数据进行合并操作

3.3 lastmodified模式:append和merge-key

使用 merge-key模式进行lastmodified导入

bin/sqoop import \

--connect jdbc:mysql://node01:3306/userdb \

--username root \

--password 123456 \

--table customertest \

--target-dir /lastmodifiedresult \

--check-column last_mod \

--incremental lastmodified \

--last-value "2019-09-24 16:05:13" \

--m 1 \

--merge-key id

--merge-key: 根据那个字段进行数据的合并操作

特点:

有更新就会将更新的数据也导入, 有新增将新增的数据进行导入, 最终将结果合并称为一个结果文件

四、sqoop导出

将数据从Hadoop生态体系导出到RDBMS数据库前,目标必须存在于数据库中。

export有三种模式:

默认操作是从将文件中的数据使用insert语句插入到表中

更新模式:Sqoop将生成update替换数据库中现有记录的语句

调用模式:Sqoop将为每条记录城建一个存储过程调用

以下是export命令语法:

$bin/sqoop export (generic-args) (export-args)

注意:使用sqoop的导出工作,关系型数据库中必须得先有表,才能导入,sqoop无法自己在关系型数据库建立表

4.1 默认导出

bin/sqoop export \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root \

--password 123456 \

--table employee \

--export-dir /emp

属性:

--export-dir : 指定将那个路径数据导出到关系型数据库中 hdfs的路径

--input-fields-terminated-by : 用来执行文件中字段之间的分隔符号, 如果不是逗号, 必须指定, 否则导入失败

--columns : 指定文件中字段的顺序, 如果字段顺序和表中字段顺序是一致的,可以省略

--input-null-string --input-null-non-string : 在进行导出的时候, 将null字符串变更为 null类型数据,

如果不使用, 在导出的时候, 变为 空字符串

4.2 更新导出

--update-key,

更新标识,即根据某个字段进行更新,例如id,可以指定多个更新标识的字段,多个字段之间用逗号分隔。

--updatemod,

指定updateonly(默认模式),仅仅更新已存在的数据记录,不会插入新纪录。

bin/sqoop export \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root --password 123456 \

--table updateonly \

--export-dir /updateonly_2/ \

--update-key id \

--update-mode updateonly

4.3 更新导出(allowinsert)

--update-key,更新标识,即根据某个字段进行更新,例如id,可以指定多个更新标识的字段,多个字段之间用逗号分隔。

--updatemod,指定allowinsert,更新已存在的数据记录,同时插入新纪录。实质上是一个insert & update的操作。

bin/sqoop export \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root --password hadoop \

--table allowinsert \

--export-dir /allowinsert_2/ \

--update-key id \

--update-mode allowinsert

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值