ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-05-14 19:01:27  阅读:143  来源: 互联网

标签:数仓 执行 调度 Server azkaban Job 可视化 Executor Azkaban


全流程调度器部署

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

标签:数仓,执行,调度,Server,azkaban,Job,可视化,Executor,Azkaban
来源: https://www.cnblogs.com/LittleOctopus/p/16271008.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有