热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【数仓项目记录4】全流程调度及可视化

全流程调度器部署1.不同层数据装载脚本之间存在依赖关系2.业务数据每天都产生,因此脚本每天都要执行--定时问题可以考虑使用ooize、Azkaban,Ooize是重量级的任务调度系

全流程调度器部署

1.不同层数据装载脚本之间存在依赖关系

2.业务数据每天都产生,因此脚本每天都要执行--定时问题

可以考虑使用ooize、Azkaban,Ooize是重量级的任务调度系统,配置更复杂,配合界面UI使用


说到定时——想到linux中的crontab命令

crontab命令详解

命令格式:

crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

命令功能:

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。


Azkaban学习

Azkaban是一个轻量级工作流程调度器(Crontab定时的是单一的工作/任务)

工作流程:由多个相互依赖的工作单元组成

Azkaban Web Server MySQL Azkaban Executor Server

Azkaban Executor Server处理工作流和作业的实际执行

部署模型:单机模式/集群模式(Web Server和Executor Server独立部署,可部署多个Executor Server,能够起到一定的负载均衡和容灾的作用)

本项目中在hadoop102部署Web Server,在hadoop102,hadoop103,hadoop104上部署Executor Server

在hadoop102上创建azkaban用户,赋予其增删改查的权限。再创建一个azkaban的库,进行数据库初始化

下图表示hadoop102上的executor已经启动,但未激活

image

执行下面的语句后,更新表可以看到已激活

curl -G "hadoop104:12321/executor?action=activate" && echo

image


Azkaban失败重试

自动失败重试:在config中设置config: retries: 3 retry.backoff: 10000

手动失败重试:

image

手动将其设置为disable


Azkaban条件工作流

1)运行时参数案例

父Job将参数写入JOB_OUTPUT_PROP_FILE环境变量所指向的文件

子Job使用 ${jobName:param}来获取父Job输出的参数并定义执行条件

2)预定义宏案例

Azkaban中预置了几个特殊的判断条件,称为预定义宏

预定义宏会根据所有父 Job 的完成情况进行判断,再决定是否执行。可用的预定义宏如 下:

(1)all_success: 表示父 Job 全部成功才执行(默认)

(2)all_done:表示父 Job 全部完成才执行

(3)all_failed:表示父 Job 全部失败才执行

(4)one_success:表示父 Job 至少一个成功才执行

(5)one_failed:表示父 Job 至少一个失败才执行


定时任务

需求:JobA 每间隔 1 分钟执行一次;

具体步骤:

1)Azkaban 可以定时执行工作流。在执行工作流时候,选择左下角 Schedule

image

2)右上角注意时区是上海,然后在左面填写具体执行事件,填写的方法和 crontab 配置定时 任务规则一致。

image

image


邮件报警 (重要)

Azkaban默认自带支持邮件报警

1.打开邮箱的SMTP协议

2.在hadoop102中配置文件

image

3.重新登录账号,在azkaban界面-文件执行的部分设置notification

成功/失败都可以发邮件到设置的邮箱

image


电话报警

第三方告警平台集成,如 睿象云 免费试用

1.将睿象云与azkaban进行集成(选择通用集成中的Cloud Alert Email集成方式)当睿象云的邮箱接收到我们azkaban发过去的邮件,就会出发电话报警

2.利用睿象云发送电话报警

image

注意:

在测试过程中发现,如果azkaban的发件人是qq邮箱,发送到睿象云的邮件会被退回,所以只好改成其余的如126邮箱


多Excutor模式的注意事项

Azkaban 多 Executor 模式是指,在集群中多个节点部署 Executor。在这种模式下, Azkaban web Server 会根据策略,选取其中一个 Executor 去执行任务。

为确保所选的 Executor 能够准确的执行任务,我们须在以下两种方案任选其一,推荐使 用方案二。

方案一:指定特定的 Executor(hadoop102)去执行任务。

1)在 MySQL 中 azkaban 数据库 executors 表中,查询 hadoop102 上的 Executor 的 id。

image

2)在执行工作流程时加入 useExecutor 属性,如下

image

方案二:在 Executor 所在所有节点部署任务所需脚本和应用。(推荐)


在数仓项目中使用azkaban进行全流程调度

流程:

数据采集

1)用户行为日志flume-kafka-hdfs。不需要进行每日工作调度,即不需要包含在工作流程中。因为flume实时采集通道需要在启动后一直运行,不需要每天重复启动

2)业务数据。sqoop进行批量导数据,每次执行sqoop相当于执行mapreduce,因此sqoop流程需要包含在调度流程中


ads层的数据在作用于报表系统之前,会先用sqoop从hive中的数据(hdfs中)导出到mysql中

导出时只支持将hdfs文件导出到mysql

注意:

1.mysql中建表字段与ads中的字段个数、顺序、类型一致

2.由于每天都是以文件的形式全表导入,因此需要注意mysql数据的重复问题:通过建立主键和唯一键解决


全流程调度 新日期的数据准备

用户行为日志写到hdfs上,业务数据写到mysql

用户日志的生成过程:

1.启动zookeeper、kafka、flume

image

2.修改hadoop102,hadoop103上的application.yml日期

image

3.然后使用lg.sh产生日志,可以去hadoop102:9870的origin_data中查看

4.考虑到我们机器的资源不足,关闭flume、kafka

image

image

业务数据的生成:

进入/opt/module/db_log/

修改application.properties

image


azkaban中任务的流程图

image

编写azkaban.projext 和 gmall.flow

Azkaban上传文件报错:Installation Failed. java.lang.String cannot be cast to java.util.Map
可以确定是.project 文件的问题,读成了version0,所以修改.project 文件:
azkaban-flow-version: 2.0
注意2.0与:之间要两个空格

image



推荐阅读
author-avatar
qCANL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有