- https://blog.csdn.net/lingeio/article/details/95169900 感谢作者心有余力
使用任务调度框架Oozie调度业务数仓全流程。">转 https://blog.csdn.net/lingeio/article/details/95169900 感谢作者心有余力
使用任务调度框架Oozie调度业务数仓全流程。
转 https://blog.csdn.net/lingeio/article/details/95169900 感谢作者心有余力
使用任务调度框架Oozie调度业务数仓全流程。
准备工作
- 数仓流程说明
业务数仓整个流程大致分为六个阶段,每个阶段都依赖于上阶段的计算结果,所以必须要上阶段执行完成再执行下一阶段: ``` 大致流程: MySQL -> HDFS -> ODS -> DWD -> DWS -> ADS -> MySQL
具体流程:
- MySQL业务通过Sqoop数据导入HDFS
- 将HDFS数据导入Hive数仓ODS层
- 将ODS数据简单清洗写入DWD层
- 将DWD数据轻度汇总写入DWS层宽表
- 将DWS层数据统计结果写入ADS层
- 将ADS层数据通过Sqoop导出到MySQL汇总表 ```
脚本提前已经把各部分任务写成shell脚本。
对应流程:sqoop_import -> ods_db -> dwd_db -> dws_db -> ads_db -> sqoop_export
上传shell脚本到HDFS,自己指定位置即可
hdfs dfs -copyFromLocal /bin/oozie/* /user/bin/oozie/JDBC ``` 因为调度中需要使用sqoop导入导出MySQL,所以先将MySQL驱动mysql-connector-java-5.1.47.jar复制到hadoop、sqoop、 以及Oozie的HDFS目录下sqoop中,lib_20181213173721,这个是Oozie搭建时生成,各不相同
cp jdbc.jar /opt/cloudera/parcels/CDH/lib/hadoop/lib cp jdbc.jar /opt/cloudera/parcels/CDH/lib/sqoop/lib sudo -uhdfs hadoop fs -put jdbc.jar /user/oozie/share/lib/lib_20181213173721/sqoop ```
创建工作流
1. 创建工作流
2. 编辑工作流
选择Action操作,修改好调度任务名和描述。大多数情况下,我们会把要执行的任务写成脚本执行。这里就选择shell,直接把要执行的任务类型拖拽到下面指定的区域。
3. 上传脚本
4. 添加文件
5. 填写参数
脚本里需要的参数,尽量设置为动态自动获取,如 ${date}
第一步的参数是所有文件和当天日期,后面的只需要日期,最后一步是导出所有结果,相应填入
6. 依次添加后续任务
7. 保存,或者运行
8. 状态提示
9. 其他
定时调度
1. 创建定时计划(schedule)
2. 修改属性
3. 添加任务
4. 设置调度时间
5. Crontab高级语法模式
6. 参数设置
sm-workflow的参数都是写死的,没有设置动态,这里的下拉列表就不会有可选项。
设置参数
将sm-workflow的日期修改为 ${do_date},保存
进入定时计划sm-dw中,会看到有参数 do_date
填入相应参数,前一天日期
${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, ‘DAY’), ‘yyyyMMdd’)}
Oozie常用系统常量https://blog.csdn.net/lingeio/article/details/95323579
当然,也可以通过这样将参数传入workflow任务中,代码或者shell中需要的参数。
如,修改sm-workflow 中的 sqoop_import.sh,添加一个参数 ${num}。
编辑文件(需要登陆Hue的用户有对HDFS操作的权限),修改shell中的一个值为参数,保存。
在workflow中,编辑添加参数 ${num} ,或者num=${num} 保存。
进入schedule中,可以看到添加的参数,编辑输入相应参数即可。
Bundle
Bundle统一管理所有定时调度,阶段划分:Bundle > Schedule > workflow