数据的初始来源: RDBMS、log文件
离线处理:
–> ETL
–> 入数据湖(Delta Lake、Hudi 、Iceberg)
– > 各种统计维度的分析
– > RDBMS 、 NoSQL
工作流调度,组织各任务单元之间存在的时间、依赖关系。
常用的调度器:Azkaban 和 Airflow 最常用-
简单的任务调度:
直接使用linux的 crontab。只能单机,无管理界面(只能通过日志自己查),适合小规模的调度 -
复杂的任务调度:
开发调度平台或使用现成的开源调度系统,比如 Ooize、Azkaban、Airflow等 -
Azkaban: 由LinkedIn公司开源,有管理界面,配置也OK,但也有缺点,会将
还不是 apache顶级项目,开源托管在github azkaban.github.io兼容任何Hadoop版本 易于使用的web UI 简单的web和http工作流上传 通过项目工作区来管理多个工作流 调度的工作流 模块化和pluginable 身份验证和授权 跟踪用户 *** 作 电子邮件提醒失败和成功 SLA报警和自动杀死 重试失败的作业
-
Oozie : CM(container manage) , 太重量级,如果不是搭配CM、HUE的项目,单独搭建很麻烦,底层配置是xml
-
Airflow :
应用平台用以上的就够;基础平台往往都是自研,以上都不能无缝满足所有需求。
Azkaban 架构:分布式的工作流,可以布置在多个Executor上
web server – 与管理页面相关
executor server – 与执行相关
mysql – 元数据的存储(web 和 executor的元数据)[默认自带H2数据库]
Azkaban standalone: web 和 executor 在同一个进程上
多executor集群,web 和 executor 部署在多个机器。web 挂到并不影响正在运行的executor。
2.x有安装包,3.x 只能通过源码编译安装 (不是maven编译)https://azkaban.readthedocs.io/en/latest/getStarted.html#getstartedhead
// 在 Azkaban源码路径下执行:
./gradlew build installDist -x test
如果太慢,是因为编译是要根据 gradle-wrapper.propertities 文件中
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
去下载这个文件。那我们可以编译前根据这个连接,自己下载好gradle-4.6-all.zip,放在这个目录下: gradle/wrapper。
同时修改 gradle-wrapper.propertities 配置文件中
distributionUrl=gradle-4.6-all.zip
其他配置 ./conf
./conf 下有4个配置文件
azkaban.properties -- 与页面相关的配置,也指示了用户的配置是在azkaban-user.xml 文件
azkaban-user.xml --用户、用户组、密码的明细配置
global.properties --全局配置,默认还是空的
log4j.properties
solo-server 模式
Getting started with the Solo Server
有bug(环境变量没完全好),只能在 bin上层目录用命令
bin/start-solo.sh
start-solo.sh 能将web 和 excutor 同时启动在一个进程。
Flowshttps://azkaban.readthedocs.io/en/latest/createFlows.html#creating-flows
版本问题:Azkaban : 2.x 和 3.x
分别也叫 Azkaban Flow 1.0 和 2.0
Azkaban : 2.x ==> Azkaban Flow 1.0 (以后会删除)
Azkaban : 3.x ==> Azkaban Flow 2.0
Creating Flows
- 创建一个文件:flow20.project。(文件名就叫这个)在这个文件里添加一句:
azkaban-flow-version: 2.0
- 创建一个文件:basic.flow(.flow 就是 .yml格式,用空格缩进)。添加:
nodes: - name: jobA type: command config: command: echo "This is an echoed text."
- 将这两个文件压缩到一起为Archive.zip
- 在web ui创建一个project,在项目中上传 这个Archive.zip,就能得到一个 Flow 2.0 Azkaban project,点开可以运行(手动)。
- 可以添加一组有依赖的job。
nodes: - name: jobC type: noop # jobC depends on jobA and jobB dependsOn: - jobA - jobB - name: jobA type: command config: command: hdfs dfs -ls /input - name: jobB type: command config: command: pwd
- Executor 手工运行
:在当前Project右下点击Execute - Schedule 定时运行
:在当前Project右下进入Schedule,配置cron表达式后开启Schedule。 - 在Schedule页面,可以看到详情。还能继续配置SLA,让job完成/失败后Email通知。
如果某job运行中途失败,支持从中间任意job重新运行。
command就是要在linux运行的具体命令;注意cmmand中对文件目录使用,要用绝对路径。
对Azkaban使用最大的问题就是需要手写 flow文件,如果有工具自动化生成、校验就更方便。
基于邮件的告警也不够,还可以自己开发短信、电话告警。
也不可以不用Azkaban自带Web UI, 它提供了ajax请求接口,可以自己开发web。
Getting started with the Multi Executor Server.
以下是简要整理,更多详细步骤参考官网。
- Install & Set up Mysql
max_allowed_packet 需要设置更大些,flow文件最终都是存储在mysql的。[mysqld] ... max_allowed_packet=1024M
- 同样要编译Azkaban源码。并在azkaban.properties中设置mysql账号密码
mysql.user=
mysql.password= - 启动 start-exec.sh (区别与start-solo.sh的)
cd azkaban-exec-server/build/install/azkaban-exec-server ./bin/start-exec.sh
- mysql、executor、web 都搭建好以后,并不能直接使用,需要激活
cd azkaban-exec-server/build/install/azkaban-exec-server curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)