Azkaban概述

  • 工作流调度系统的作用

    一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序java程序mapreduce程序hive脚本等。

    各任务单元之间存在时间先后及前后依赖关系,为了很好地组织起这样的复杂执行计划,这时就需要一个工作流调度系统来调度执行

    举例来说:

    某个业务系统每天产生20G原始数据,需要每天都要对其进行处理,处理步骤如下所示:

    1.通过Hadoop先将原始数据同步到HDFS上;

    2.借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;

    3.需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;

    4.将明细数据进行各种统计分析,得到结果报表信息;

    5.需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

  • 工作流调度系统的实现

    简单的任务调度可以直接使用linux的crontab实现

    复杂的任务调度则需要开源调度系统,比如oozieazkabanairflow

  • 常见工作流调度工具对比

  • Azkaban简单介绍

    详细介绍参考官网:https://azkaban.github.io/

    Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。它定义了一种KV文件(properties)格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

    功能特点:

    Web用户界面

    方便上传工作流

    方便设置任务之间的关系

    调度工作流

    认证/授权(权限的工作)

    能够杀死并重新启动工作流

    模块化和可插拔的插件机制

    项目工作区

    工作流和任务的日志记录和审计


安装部署

  • Azkaban的编译

    注意:编译要新建一个虚拟机进行编译,jdk版本要用1.8

    编译执行命名:

    cd /export/softwares/

    wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz

    tar -zxvf 3.51.0.tar.gz -C ../servers/



    cd /export/servers/azkaban-3.51.0/

    yum -y install git

    yum -y install gcc-c++

    ./gradlew build installDist -x test

    编译完成后需要在/export/servers/azkaban-3.51.0/azkaban-exec-server/build/distributions拿到需要的三个安装包:

    azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

    azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz

    azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

    /export/servers/azkaban-3.51.0/az-exec-util/src/main/c下拿到需要的C文件:

    execute-as-user.c

    /export/servers/azkaban-3.51.0/azkaban-db/build/install/azkaban-db下拿到需要的数据库脚本:

    create-all-sql-0.1.0-SNAPSHOT.sql

  • azkaban单服务模式安装与使用

    1.解压安装包

    cd /export/softwares/ 把azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz安装包上传到该目录

    tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../servers 解压安装包

    2.修改两个配置文件

    cd /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT/conf

    vim azkaban.properties

    default.timezone.id=Asia/Shanghai 只需要把时区修改得和linux的时区相同



    cd /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes

    vim commonprivate.properties

    # set exeute-as-user
    execute.as.user=false
    memCheck.enabled=false // 添加这一行,防止内存检查

    3.启动solo-server

    cd /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT

    bin/start-solo.sh



    4.浏览器页面访问

    访问地址:http://192.168.0.30:8081/

    登录界面,登录用户名和密码都是azkaban



    创建项目



    在本地创建普通文本文件foo.job,并打包成压缩文件

    注意:编码格式一定要选择UTF-8 without BOM,或者在文件开头添加# command.job

    # command.job
    type=command
    command=echo "hello world"



  • azkaban两个服务模式安装与使用

    1.数据库准备

    mysql -uroot -p 进入mysql

    执行以下命令:

    CREATE DATABASE azkaban; 创建azkaban数据库

    CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'; 创建azkaban用户

    GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION; 授予远程权限

    flush privileges; 刷新权限

    use azkaban;

    source /export/softwares/create-all-sql-0.1.0-SNAPSHOT.sql;



    2.把需要的安装包上传到/export/softwares/,并解压

    cd /export/softwares/

    tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ../servers/

    mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server-3.51.0

    tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../servers/

    mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server-3.51.0



    3.安装SSL安全认证

    安装ssl安全认证,允许我们使用https的方式访问我们的azkaban的web服务

    cd /export/servers/azkaban-web-server-3.51.0

    keytool -keystore keystore -alias jetty -genkey -keyalg RSA

    密码一直输入azkaban



    4.azkaban web server安装

    修改azkaban-web-server的配置文件

    cd /export/servers/azkaban-web-server-3.51.0/conf

    vim azkaban.properties

    # Azkaban Personalization Settings
    azkaban.name=Azkaban
    azkaban.label=My Azkaban
    azkaban.color=#FF3601
    azkaban.default.servlet.path=/index
    web.resource.dir=web/
    default.timezone.id=Asia/Shanghai
    # Azkaban UserManager class
    user.manager.class=azkaban.user.XmlUserManager
    user.manager.xml.file=conf/azkaban-users.xml
    # Loader for projects
    executor.global.properties=conf/global.properties
    azkaban.project.dir=projects
    # Velocity dev mode
    velocity.dev.mode=false
    # Azkaban Jetty server properties.
    jetty.use.ssl=true
    jetty.maxThreads=25
    jetty.port=8081 jetty.ssl.port=8443
    jetty.keystore=/export/servers/azkaban-web-server-3.51.0/keystore
    jetty.password=azkaban
    jetty.keypassword=azkaban
    jetty.truststore=/export/servers/azkaban-web-server-3.51.0/keystore
    jetty.trustpassword=azkaban # Azkaban Executor settings
    # mail settings
    mail.sender=
    mail.host=
    # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
    # enduser -> myazkabanhost:443 -> proxy -> localhost:8081
    # when this parameters set then these parameters are used to generate email links.
    # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
    # azkaban.webserver.external_hostname=myazkabanhost.com
    # azkaban.webserver.external_ssl_port=443
    # azkaban.webserver.external_port=8081
    job.failure.email=
    job.success.email=
    lockdown.create.projects=false
    cache.directory=cache
    # JMX stats
    jetty.connector.stats=true
    executor.connector.stats=true
    # Azkaban mysql settings by default. Users should configure their own username and password.
    database.type=mysql
    mysql.port=3306
    mysql.host=node03
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=azkaban
    mysql.numconnections=100
    #Multiple Executor
    azkaban.use.multiple.executors=true
    #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
    azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
    azkaban.executorselector.comparator.Memory=1
    azkaban.executorselector.comparator.LastDispatched=1
    azkaban.executorselector.comparator.CpuUsage=1 azkaban.activeexecutor.refresh.milisecinterval=10000
    azkaban.queueprocessing.enabled=true
    azkaban.activeexecutor.refresh.flowinterval=10
    azkaban.executorinfo.refresh.maxThreads=10

    5.azkaban executor server安装

    修改azkaban-exex-server配置文件

    cd /export/servers/azkaban-exec-server-3.51.0/conf

    vim azkaban.properties

    # Azkaban Personalization Settings
    azkaban.name=Azkaban
    azkaban.label=My Azkaban
    azkaban.color=#FF3601
    azkaban.default.servlet.path=/index
    web.resource.dir=web/
    default.timezone.id=Asia/Shanghai
    # Azkaban UserManager class
    user.manager.class=azkaban.user.XmlUserManager
    user.manager.xml.file=conf/azkaban-users.xml
    # Loader for projects
    executor.global.properties=conf/global.properties
    azkaban.project.dir=projects
    # Velocity dev mode
    velocity.dev.mode=false
    # Azkaban Jetty server properties.
    jetty.use.ssl=true
    jetty.maxThreads=25
    jetty.port=8081
    jetty.keystore=/export/servers/azkaban-web-server-3.51.0/keystore
    jetty.password=azkaban
    jetty.keypassword=azkaban
    jetty.truststore=/export/servers/azkaban-web-server-3.51.0/keystore
    jetty.trustpassword=azkaban
    # Where the Azkaban web server is located
    azkaban.webserver.url=http://node03:8443
    # mail settings
    mail.sender=
    mail.host=
    # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
    # enduser -> myazkabanhost:443 -> proxy -> localhost:8081
    # when this parameters set then these parameters are used to generate email links.
    # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
    # azkaban.webserver.external_hostname=myazkabanhost.com
    # azkaban.webserver.external_ssl_port=443
    # azkaban.webserver.external_port=8081
    job.failure.email=
    job.success.email=
    lockdown.create.projects=false
    cache.directory=cache
    # JMX stats
    jetty.connector.stats=true
    executor.connector.stats=true
    # Azkaban plugin settings
    azkaban.jobtype.plugin.dir=plugins/jobtypes
    # Azkaban mysql settings by default. Users should configure their own username and password.
    database.type=mysql
    mysql.port=3306
    mysql.host=node03
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=azkaban
    mysql.numconnections=100
    # Azkaban Executor settings
    executor.maxThreads=50
    executor.flow.threads=30

    添加插件

    cp /export/softwares/execute-as-user.c /export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes/ 把上传的c文件拷贝到指定目录下

    yum -y install gcc-c++ 如果提示gcc command not found,那么就在线安装gcc+c++即可

    执行以下命令生成execute-as-user

    cd /export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes

    gcc execute-as-user.c -o execute-as-user

    chown root execute-as-user

    chmod 6050 execute-as-user

    修改配置文件

    cd /export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes

    vim commonprivate.properties

    execute.as.user=false
    memCheck.enabled=false
    azkaban.native.lib=/export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes

    出现这个



    6.启动服务

    cd /export/servers/azkaban-exec-server-3.51.0

    bin/start-exec.sh 启动exec server



    curl -G "node03:$(<./executor.port)/executor?action=activate" && echo 激活exec server



    cd /export/servers/azkaban-web-server-3.51.0/

    bin/start-web.sh 启动web server


使用

  • 多job工作流flow

    第一个job文本文件没什么特殊的

    # command.job
    type=command
    command=echo 'hello world'

    第二个job文本文件最后一行添加依赖即可

    # command.job
    type=command
    command=echo 'bar job'
    dependencies=foo //第一个job文件的名字

    之后需要将两个文件打包到一个压缩包中上传即可

  • HDFS操作任务

    HDFS的job文件这么写

    # command.job
    type=command
    command=/export/servers/hadoop-2.6.0-cdh5.14.0/bin/hadoop fs -mkdir /azkaban
  • MAPREDUCE任务

    需要把jar包和job文件一起打包压缩

    #command.job
    type=command
    command=/export/servers/hadoop-2.6.0-cdh5.14.0/bin/hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi 3 5
  • HIVE脚本任务

    需要先写一个sql文件

    create database if not exists azhive;
    use azhive;
    create table if not exists aztest(id string,name string) row format delimited fields terminated by '\t';

    然后再写Job文件,并把两个文件打包到一起

    # command.job
    type=command
    command=/export/servers/hive-1.1.0-cdh5.14.0/bin/hive -f 'hive.sql'
    • 定时任务



最新文章

  1. [LeetCode] Valid Phone Numbers 验证电话号码
  2. PHP学习总结
  3. 【自然框架】终于把源码弄到git上了。
  4. hibernate save,update,saveorupdate方法有什么区别
  5. Java自己实现双向链表LinkList
  6. IE禁用Cookie后的session处理
  7. PyQt4自定义事件
  8. ecstore菜鸟电子面单对接摘要
  9. spark记录
  10. js获取天气
  11. shell重定向
  12. 【iOS】网页中调用JS与JS注入
  13. .Net多线程编程—同步机制
  14. ViewModel从未如此清爽 - 轻量级WPF MVVM框架Stylet
  15. web服务器、tomcat、servlet是什么?它们之间的关系又是什么?
  16. script 修改 plist遇到的问题
  17. js中 switch 注意事项
  18. C++内存分区:堆、栈、自由存储区、全局/静态存储区和常量存储区
  19. 四、Vmware虚拟机三种网络模式详解
  20. Apache Beam编程指南

热门文章

  1. Oracle NULL值
  2. stand up meeting 1/15/2016 &amp;&amp; work of weekend 1/16/2016~1/17/2016
  3. 图2-4TCP状态转换图
  4. 微服务统计,分析,图表,监控, 分布式追踪一体化的 HttpReports 在 .Net Core 的应用
  5. Redis入门使用 -- 个人总结
  6. golang实现并发爬虫一(单任务版本爬虫功能)
  7. HTTP 前世今生
  8. AWR发现TOP Event log file sequential read
  9. tp3.2 事务 和 tp5.0事务
  10. 【&lt;meta name=&quot;&quot; content=&quot;&gt;】的作用