Azkaban

文章目录

  • 使用场景
  • 详述(项目-流-Job)
  • 使用方法
  • Job配置demo


使用场景

https://blog.csdn.net/clypm/article/details/79076801
实际项目中经常有这些场景:每天有一个大任务,这个大任务可以分成A,B,C,D四个小任务,A,B任务之间没有依赖关系,C任务依赖A,B任务的结果,D任务依赖C任务的结果。一般的做法是,开两个终端同时执行A,B,两个都执行完了再执行C,最后再执行D。这样的话,整个的执行过程都需要人工参加,并且得盯着各任务的进度。但是我们的很多任务都是在深更半夜执行的,通过写脚本设置crontab执行。其实,整个过程类似于一个有向无环图(DAG)。每个子任务相当于大任务中的一个流,任务的起点可以从没有度的节点开始执行,任何没有通路的节点之间可以同时执行,比如上述的A,B。总结起来的话,我们需要的就是一个工作流的调度器,而Azkaban就是能解决上述问题的一个调度器。

与之类似的工具还有AirFlow、Apache Ooize等,但用的较多的还是Azkaban和AirFlow。


详述(项目-流-Job)

进入Azkaban的Web界面之后,进入Project界面,AllFlows这个流是默认生成的,管理所有其余的工作流,其余的工作流都可以在AllFlows下找到。流的删除只能在AllFlows中执行。

每个流内部,都会有和流同名的job,这个job是默认生成的,不能修改无法删除,不用理会它。

用户自己新建流,新建job,并且去执行或者设置调度就可以了。

本质上,azkaban就是个任务调度工具,会自动在Linux运行shell命令,从而调度作业,和windows下面的定时任务实现的功能是一样的。

项目、流、job分别对应了MySQL中的一张表,每次添加或删除相关项目、流,即是对这三张表的更改。

azkaban很多bug,不兼容QQ浏览器;Azkaban不能跨流依赖,只能在流内部依赖,这是无法回避的痛点。


使用方法

  1. 新建Project
    Azkaban_第1张图片
    进入azkaban的web界面,点击右上角主页右上角“Create Project”可新建自己的工程。新建工程的同时,也新建了一个流Flow

  2. 编辑工程、流、JobAzkaban_第2张图片
    进入刚刚新建的Project,可以发现已经存在两个Flow

  • AllFlows:新建项目时,默认生成的流。它管理本项目中其余所有的流,流的新增、删除只能在AllFlows中进行。新建流,点击’Add Flow’;删除流,点击’Del Flow’。
    其中,每个Flow进入AllFlow之后都会加个Dep后缀,例如,名称为ys_flow的流,在AllFlows中显示为ys_flowDep。
    另外,最下方的AllFlows不用管,是无意义的空流。

  • ys_flow:自己创建的流,在这个流内部添加job,即可实现任务的调度。点击’Add Job’可添加多个任务;通过’Del Job’即可删除任务。
    在添加Job的时候,通过在’Commond’中添加执行的shell命令,来实现使用者的工作意图。本质上,azkaban就是调度shell脚本的工具。
    同上所述,最下方的ys_flow也不必理会,是个无意义的空job。

  1. 设置调度Scheduling

Job配置demo

# Azkaban配置如下
Projects:   JD_HIVE_ETL
Flows:      FLOW_ACCOUNT_DETAIL
Job:        rpt_24028  # 每日更新报表
{
    JobId:          rpt_24028
    JobName:        rpt_24028
    JobDescription: 用于加工RPT24028
    Command:        sh -c "hive --hivevar v_date=`date -d '1 day ago' +%Y-%m-%d` -f /data/public/HIVE_ETL/hive_report/rpt_24028.hql"
    Dependencies:   JD_DW_TABLE_ETLDep, dw_loan_account, SEC_DW_TABLEDep, dw_channel_info
    UserName:       yangsong
    HostName:       
    IsLocalJob:     1
    JobEnable:      1
    LastUpdateTime: 
}

    Job:    rpt_24028  # 将报表迁移到241SqlServer中
    {
        JobId:          export_rpt_24028
        JobName:        export_rpt_24028
        JobDescription: 用于同步RPT24028到241SqlServer
        Command:        sh /data/public/HIVE_ETL/export_cluster/sqoop/pub_cmd/sqoop_to_rmdbs.sh rpt_jd.rpt_24028 241sqlserver PP_JD_RPT.dbo.rpt_24028 ql
        # sh /data/public/HIVE_ETL/export_cluster/sqoop/pub_cmd/sqoop_to_rmdbs.sh [suorce_table] [target_name] [target_table] [zl_or_ql]  # Sqoop命令
        Dependencies:   rpt_24028  # 依赖于前置作业
        UserName:       yangsong
        HostName:       
        IsLocalJob:     1
        JobEnable:      1
        LastUpdateTime: 
    }

你可能感兴趣的:(Azkaban)