当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述客快物流大数据项目(六十八):工作流调度相关的知识,希望能为你提供帮助。
工作流调度一、工作流产生背景工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
一个完整的数据分析系统通常都是由多个前后依赖的模块组合构成的:数据采集、数据预处理、数据分析、数据展示等。各个模块单元之间存在时间先后依赖关系,且存在着周期性重复。
为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。
二、工作流调度实现方式1、简单的任务调度
crontab
使用linux的crontab来定义调度,但是缺点比较明显,无法设置依赖复杂任务调度。且需要编写相关shell脚本。
2、复杂的任务调度
当下企业两种选择,
知名度比较高的是Apache Oozie,但是其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。
三、工作流调度工具之间对比下面的表格对四种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著的区别,在做技术选型的时候,可以提供参考。
四、调度器1、Azkaban介绍
特性
Hamake
Oozie
Azkaban
Cascading
工作流描述语言
XML
XML (xPDL based)
text file with key/value pairs
java API
依赖机制
data-driven
explicit
explicit
explicit
是否要web容器
No
Yes
Yes
No
进度跟踪
console/log messages
web page
web page
Java API
Hadoop job调度支持
no
yes
yes
yes
运行模式
command line utility
daemon
daemon
API
Pig支持
yes
yes
yes
yes
【客快物流大数据项目(六十八)(工作流调度)】事件通知
no
no
no
yes
需要安装
no
yes
yes
no
支持的hadoop版本
0.18+
0.20+
currently unknown
0.18+
重试支持
no
workflownode evel
yes
yes
运行任意命令
yes
yes
yes
yes
Amazon EMR支持
yes
no
currently unknown
yes
Azkaban是由linkedin(领英)公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban功能特点:
2、Azkaban原理架构
3、Azkaban三种部署模式
3.1、solo server mode
该模式中webServer和executorServer运行在同一个进程中,进程名是AzkabanSingleServer。使用自带的H2数据库。这种模式包含Azkaban的所有特性,但一般用来学习和测试。
3.2、two-server mode
该模式使用MySQL数据库, Web Server和Executor Server运行在不同的进程中。
3.3、multiple-executor mode
该模式使用MySQL数据库, Web Server和Executor Server运行在不同的机器中。且有多个Executor Server。该模式适用于大规模应用。
五、Azkaban初体验1、启动zakaban
???????2、登录web页面
访问Web Server=>
??http://node2:8081/??
默认用户名密码azkaban
3、初体验测试
http://node2:8081/index登录=>
Create Project=>
Upload zip包 =>
execute flow执行一步步操作即可。
创建两个文件one.job
two.job,内容如下,打包成zip包。
cat one.job
type=command
command=echo "this is job one"
cat two.job
type=command
dependencies=one
command=echo "this is job two"
创建工程:
上传zip压缩包:
execute执行:
执行页面:
执行结果查看:
六、Azkaban使用实战1、shell command调度
vi command.job
#command.job
type=command
command=echo hello
zip command.job
2、job依赖调度
# foo.job
type=command
command=echo foo
# bar.job
type=command
dependencies=foo
command=echo bar
???????3、HDFS任务调度
# fs.job
type=command
command=hadoop fs -mkdir /azaz
4、定时任务调度
除了手动立即执行工作流任务外,azkaban也支持配置定时任务调度。开启方式如下:
首页选择待处理的project
上述图片中,选择左边schedule表示配置定时调度信息,选择右边execute表示立即执行工作流任务。
七、Azkaban进行主题及指标业务调度开发1、数据同步调度
shell脚本(scheduler.sh)
#!/bin/sh
cls=$1
flag=0
clsDwd=cn.it.logistics.offline.dwd.$clsDWD
clsDws=cn.it.logistics.offline.dws.$clsDWS
baseDir=/export/services/logistics/lib/
if [[ $cls = "Customer" || $cls = "ExpressBill" || $cls = "TransportTool" || $cls = "Warehouse" || $cls = "Waybill" ]];
then
echo -e "\\e[32m==== MainClass is: "$clsDwd
推荐阅读
- Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 (需暂停服务的方式)
- Linux 环境下 javac 编译错误( 编码UTF8的不可映射字符(编码UTF8/GBK的不可映射字符))
- coursera 视频总是缓冲或者无法观看的解决办法(Windows和Linux 系统环境)
- 移动应用的测试策略与测试架构
- PyQt5 中调用MySql接口失败( QSqlDatabase 组件)在Linux环境下如何修改
- 使用HAProxy的ACL实现基于文件后缀名的动静分离
- 运维小白成长记——第十八周
- Zabbix对Tomcat的监控
- 自建Gitlab迁移工具使用指南