• Azkaban 工作流调度器


    Azkaban 工作流调度器

    1 概述

      1.1 为什么需要工作流调度系统

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

        b)各任务单元之间存在时间先后及前后依赖关系。

        c)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。

      1.2  工作流调度实现方式

        简单的任务调度:直接使用linux的crontab来定义;

        复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban等。

      1.3 常见工作流调度系统

        在hadoop领域,常见的工作流调度器有Oozie, Azkaban,Cascading,Hamake等。

      1.4 Azkaban 与 Oozie对比

        对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

    2 Azkaban 介绍 

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

      功能特点:

         Web用户界面

         方便上传工作流

         方便设置任务之间的关系

        调度工作流

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

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

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

        项目工作区

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

      2.1 Azkaban 安装部署

        2.1.1 准备工作:

          azkaban-web-server-2.5.0.tar.gz

          azkaban-executor-server-2.5.0.tar.gz

          MYSQL

        2.1.2 安装

          1)分别解压webserver和executorServer

          2)创建SSL配置      

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

          3) 在mysql数据库中创建azkaban库,执行sql脚本create-all-sql-3.39.0-12-gb44c688.sql(注意:该脚本在db模块中,要讲mysql引擎改为innoDB)

        2.1.3 配置文件:

           2.1.3.1  先配置好服务器节点上的时区

            a) 先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可。

            b) 拷贝该时区文件,覆盖系统本地时区配置

    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
          2.1.3.2  azkaban web服务器配置 

            conf目录下文件

               

    # Azkaban Personalization Settings
    azkaban.name=Test
    azkaban.label=My Local 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
    database.type=mysql
    mysql.port=3306
    mysql.host=localhost
    mysql.database=azkaban
    mysql.user=root
    mysql.password=123456
    mysql.numconnections=100
    # Velocity dev mode
    velocity.dev.mode=false
    # Azkaban Jetty server properties.
    jetty.maxThreads=25
    jetty.ssl.port=8443
    jetty.port=8081
    jetty.keystore=keystore
    jetty.password=123456
    jetty.keypassword=123456
    jetty.truststore=keystore
    jetty.trustpassword=123456
    # Azkaban Executor settings
    executor.port=12321
    # mail settings
    mail.sender=xxx@126.com
    mail.host=smtp.126.com
    # 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
    mail.user=xxxxxxxx
    mail.password=**********
    job.failure.email=xxxxxxxx@163.com
    job.success.email=xxxxxxxx@163.com
    lockdown.create.projects=false
    cache.directory=cache
    azkaban.properties
    1 <azkaban-users>
    2   <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
    3   <user password="metrics" roles="metrics" username="metrics"/>
    4   <user username="admin" password="admin" roles="admin,metrics" />
    5   <role name="admin" permissions="ADMIN"/>
    6   <role name="metrics" permissions="METRICS"/>
    7 </azkaban-users>
    azkaban-users.xml
          2.1.3.3  azkaban 执行器配置
    # Azkaban Personalization Settings
    default.timezone.id=Asia/Shanghai
    # Loader for projects
    executor.global.properties=conf/global.properties
    azkaban.project.dir=projects
    # 数据库配置
    database.type=mysql
    mysql.port=3306
    mysql.host=localhost
    mysql.database=azkaban
    mysql.user=root
    mysql.password=123456
    mysql.numconnections=100
    #执行服务器配置
    executor.port=12321
    executor.connector.stats=true
    executor.maxThreads=50
    executor.flow.threads=30
    # Azkaban plugin settings
    azkaban.jobtype.plugin.dir=plugins/jobtypes
    azkaban.properties

        详细配置请参考:http://azkaban.github.io/azkaban/docs/latest/     (3.0版本编译完后web和exec中没有配置文件 需要将solo中的配置文件复制过去)

          2.1.4 启动

            在azkaban web服务器目录下执行启动命令

            bin/azkaban-web-start.sh

            注:在web服务器根目录运行

      

            在执行服务器目录下执行启动命令

            bin/azkaban-executor-start.sh 

            注:只能要执行服务器根目录运行

            启动完成后,在浏览器(建议使用谷歌浏览器)中输入https://服务器IP地址:8443 ,即可访问azkaban服务了.在登录中输入刚才新的户用名及密码,点击 login.

    3 实战

      Azkaba内置的任务类型支持command、java。

      3.1 Command类型单一job示例

        a) 创建job描述文件

          vi command.job      

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

        b)将job资源文件打包成zip文件   

    zip command.job

        c) 通过azkaban的web管理平台创建project并上传job压缩包

        首先创建project

        

        上传zip

         

        d)启动执行该job

       

      3.2 Command类型多job工作流flow

        a)创建有依赖关系的多个job描述

          第一个job:foo.job

    # foo.job
    type=command
    command=echo foo

          第二个job:bar.job依赖foo.job

    # bar.job
    type=command
    dependencies=foo
    command=echo bar

        b)将所有job打成一个zip包

        

        c) 在azkaban 的web管理界面创建工程并上传zip包

        d)启动工作流flow

      3.3 HDFS操作任务

    # fs.job
    type=command
    command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz

      3.4 MapReduce任务

    # mrwc.job
    type=command
    command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop  jar hadoop-mapreduce-examples-2.6.1.jar wordcount /wordcount/input /wordcount/azout

        将所有资源打包成zip

      

      3.5 HIVE脚本任务

        Hive脚本: test.sql

    use default;
    drop table aztest;
    create table aztest(id int,name string) row format delimited fields terminated by ',';
    load data inpath '/aztest/hiveinput' into table aztest;
    create table azres as select * from aztest;
    insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest; 

        Job描述文件:hivef.job

    # hivef.job
    type=command
    command=/home/hadoop/apps/hive/bin/hive -f 'test.sql'

     

  • 相关阅读:
    (二)常问升级小点
    (一)常问基础小点
    Linux之expr命令详解
    Mac--Visual Studio Code 常用快捷键
    git撤销commit操作回到add状态
    ExampleMatcher ,在查询非int 或boolean 字段时要使用 withIgnorePaths() 忽略 int 和boolean 字段,要不然查询不到值
    navicat 用url 连接mongo
    javase 打印杨辉三角
    关系型数据库遵循ACID规则
    Redis介绍
  • 原文地址:https://www.cnblogs.com/zhaobingqing/p/8058097.html
Copyright © 2020-2023  润新知