任务调度系统的比较
oozie
优势: 老牌任务调度系统, 稳定性高; cdh版本自动集成. 无需担心兼容性
劣势: 重量级, 任务调度依靠xml文件, 门槛较高, 不够灵活, 不易于二次开发和后期维护
kattle
优势
- 精细化控制, 可以自定义实现复杂功能
- 可以在windows上修改, 创建, 修改, 运行控制任务
劣势 - 很多需求要kattle在linux上运行, kattle的设计往往在window完成, 环境的差异可能遇到不可期的问题
- linux上运行时, web端管理工具不够好
- 功能不够集成, job需要手动控制, 不适合复杂度太高的场景
azkaban
优势: 轻量级, 易使用, 深度集成spark, 通过插件扩展功能
劣势: 没有易用的, 更细粒度的流程控制, 比如, 增量导入需要依赖shell
+sqoop
安装
- 直接搜索azkaban, 在官网上能找到最新版本和历史版本. 以
3.56.0
版本为例 - 参考官方文档, 使用源码安装.
核心操作就是, cd到对应目录下, 之后运行./gradlew build
这一步很慢, 甚至于多次因为超时而失败, 多次重试即可
未测试: 有资料说, 可以在 ${AZKABAN_HOME}/build.gradle文件中增加如下配置
mavenLocal()
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url ''}
- 镜像下载完成后, 会提示说因为一个
test
未通过而失败, 这是因为官网的编译版本本身就不带测试命令. 需要运行./gradlew build -x test
跳过测试 - 编译完成后, 各组件的build目录下, 会生成相应的
.tar.gz
文件. 例如,./azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
.
组件列举如下
文件夹|功能
-|-
azkaban-exec-server|核心之一, (分布式)执行器
azkaban-web-server|核心之二, 网页服务
azkaban-db|数据库工具
azkaban-solo-server|单机版, 用于学习基本操作
azkaban-common|基本的依赖包
azkaban-spi|azkaban存储接口以及exception类
azkaban-hadoop-security-plugin|hadoop 有关kerberos插件 - 简单看了下azkaban-db的源码, 它通过jdbc连接到mysql, 然后就可以进行初始化等操作. 官网推荐直接手动运行
sql
文件.
运行时因为主键过长而报错, 查询后发现是因为旧版本的mysql不支持, 只好调低了varchar范围
配置
azkaban-web-server
在一台服务器上启动即可, 而azkaban-exec-server
可以部署在多态服务器上.
网页服务和执行器的目录下的conf文件夹中, 都有azkaban.properties
, 虽然同名, 但并不需要保持相同.
执行器的azkaban.properties
只需要配置mysql相关的信息, 这是因为执行器启动时, 会在mysql中注册自己的hostname
和port
, 而且会自动生成一个id
.
azkaban运行任务时, 就可以设置useExecutor
=id
, 以指定任务运行的节点
网页服务的azkaban.properties
, 需要修改的字段示例如下
# 设置网页展示的内容
azkaban.name=CoreMaster
azkaban.label=Show your wings, and cover up the sky.
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
# 设置网页链接的相关内容, 比如端口号
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# 设置邮件发送的服务器
mail.sender=
mail.host=smtp.xx.com
mail.user=
mail.password=
# mail.tls=true
mail.port=
# mysql设置
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
使用
- flow20.project: azkaban-flow-version: 2.0
- 原生的 Azkaban 支持的plugin类型有以下这些:
类型 | 说明 |
comman | Linux shell命令行任务 |
gobblin | 通用数据采集工具 |
hadoopJava | 运行hadoopMR任务 |
java | 原生java任务 |
hive | 支持执行hiveSQL |
pig | pig脚本任务 |
spark | spark任务 |
hdfsToTeradata | 把数据从hdfs导入Teradata |
teradataToHdfs | 把数据从Teradata导入hdfs |
- azkaban调度文件配置示例
---
# 设置全局配置
config:
failure.emails: noreply@foo.com
nodes:
- name: jobC
type: noop
dependsOn:
- embedded_flow
- name: embedded_flow
type: flow
config:
prop: value
nodes:
- name: jobB
type: noop
dependsOn:
- jobA
- name: jobA
type: command
config:
command: pwd
注: 调度文件的换行一定要是unix
格式, 也就是\n, windons下的dos
格式(\r\n
), 在任务执行时会报异常