Azkaban调度全过程

数据处理过程:Oracle通过ogg推到kafka   然后通过公司自研框架从kafka同步到kudu的ods库, kudu存储ods数据,impala用于计算kudu,然后结果表放到hdfs,最后通过sqoop导出hdfs文件(表)到mysql

1.ods层通过azkaban调度执行sql把需要的数据取出并插入到rel;

 对应上图:rpt_hy_qwsx_t_dict_report_mapping.job依赖bas.job,  调用shell脚本:rpt_hy_qwsx_t_dict_report_mapping.sh,通过脚本执行sql:rpt_hy_qwsx_t_dict_report_mapping.sql,通过impala语句把kudu的ods数据计算结果放到hdfs(hive)中

2.通过sqoop+Azkaban调度取rel数据到MySQL;

对应上图:rpt_hy_qwsx_t_dict_report_mapping_sqoop.job依赖rpt_hy_qwsx_t_dict_report_mapping.job,  调用shell脚本:rpt_hy_qwsx_t_dict_report_mapping_sqoop.sh,脚本中sqoop语句直接执行数据迁移工作(把hive中的数据迁移到mysql中)

注意:

每个job中都可以获取配置文件的参数,与文件命名无关;注意参数传递:shell脚本中的参数必须要通过job传递获取,sql中的参数必须通过shell脚本传递获取

全部代码如下

配置文件:bas.properties

### 业务数据库设定 ###

###现在时间 pnow ###
hostName=IP地址:25003
time=now()
origindb=hy_kudu_ods

targetdb=hy_bigdata_dm_rel
dburl=jdbc:mysql://IP地址:4710/tdhy_dataplat
dbhost=IP地址
dbuser=admin
dbpasswd=admin1234

job文件:bas.job

type=command
command=echo "### base job ###"

以下三个文件调度执行SQL,完成数据筛选从ods到rel:

job文件:rpt_hy_qwsx_t_dict_report_mapping.job,执行res下面的同名的shell脚本

type=command
command=echo "start ..."
dependencies=bas
command=sh res/rpt_hy_qwsx_t_dict_report_mapping.sh "${hostName}" "${origindb}" "${targetdb}" "${time}" "${dburl}" "${dbhost}" "${dbuser}" "${dbpasswd}" "${dbpasswd}"

shell脚本:rpt_hy_qwsx_t_dict_report_mapping.sh,脚本中执行同目录的sql文件

#! /bin/bash
echo 'start...'
echo "hostName:$1"
echo "businessDB:$2"
echo "wmsTargetDB:$3"
echo "wmsdburl:$5"
echo "wmsdbhost:$6"
echo "wmsdbuser:$7"
echo "wmsdbpasswd:$8"

impala-shell -i $1 --var=origindb=$2 --var=targetdb=$3 --var=time=$4 -f 'res/rpt_hy_qwsx_t_dict_report_mapping.sql'

SQL:rpt_hy_qwsx_t_dict_report_mapping.sql;需要调度执行的SQL

use ${var:targetdb};
upsert  into hy_bigdata_dm_rel.t_dict_report_mapping select gsbh,qydjc,yxglz,ssyjgs,xzyydq,syb,shyydq,jydq from hy_kudu_ods.ods_report_mapping;
--数据写入textfile文件中
drop table if exists t_dict_report_mapping_textfile;
CREATE TABLE t_dict_report_mapping_textfile (
gsbh STRING  COMMENT '公司编号',
qydjc STRING  COMMENT '起运地简称',
yxglz STRING  COMMENT '城市',
ssyjgs STRING  COMMENT '所属一级公司',
xzyydq STRING  COMMENT '运营大区',
syb STRING  COMMENT '事业部',
shyydq STRING  COMMENT '大区1',
jydq STRING  COMMENT '大区简称'
  ) row format delimited fields terminated by '\001'
   STORED AS textfile;
insert overwrite table t_dict_report_mapping_textfile select * from t_dict_report_mapping;

以下两个文件完成数据迁移工作,数据从hive到MySQL过程

job文件:rpt_hy_qwsx_t_dict_report_mapping_sqoop.job,执行res下面的同名的shell脚本

type=command
command=echo "start ..."
dependencies=rpt_hy_qwsx_t_dict_report_mapping
command=sh res/rpt_hy_qwsx_t_dict_report_mapping_sqoop.sh "${dburl}" "${dbuser}" "${dbpasswd}" "${targetdb}"

shell脚本:rpt_hy_qwsx_t_dict_report_mapping_sqoop.sh,执行sqoop语句,完成数据从hive到mysql迁移的过程

#插入更新mysql数据库,更多配置参考sqoop参数配置
sqoop export \
--connect $1 \
--username $2 \
--password $3 \
--table t_dict_report_mapping \
--export-dir /user/hive/warehouse/$4.db/t_dict_report_mapping_textfile \  #比如hive表默认地址 /user/hive/warehouse/test.db/test_textfile
--columns gsbh,qydjc,yxglz,ssyjgs,xzyydq,syb,shyydq,jydq \   #mysql列名,最好跟hive表列名对应,不然可能报错或者列取错,一般生成的hive结果表就是mysql表的结构
--update-key gsbh \  #col1是根据col1去更新表数据,最好col1就是主键,支持联合主键
--update-mode allowinsert \  #更新时允许插入,如果不允许插入填写updateonly
--fields-terminated-by '\001' \  #指hive表中的列间隔符xx ROW FORMAT DELIMITED FIELDS TERMINATED BY 'xx' 默认就是\001
--lines-terminated-by '\n' \  #指hive表的行间隔符,lines terminated by '**' 默认\n
--input-null-string '\\N' \   #字符串类型的数据null时替换
--input-null-non-string '\\N' \  #非字符创类型的数据为null时替换

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖行骗老中医

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值