zoukankan      html  css  js  c++  java
  • Hadoop之Azkaban详解

    工作流调度器azkaban
    1 为什么需要工作流调度系统
      1)一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等
      2)各任务单元之间存在时间先后及前后依赖关系
      3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

      例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:
        1、 通过Hadoop先将原始数据同步到HDFS上;
        2、 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
        3、 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
        4、 将明细数据进行复杂的统计分析,得到结果报表信息;
        5、 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。


    2 工作流调度实现方式
      简单的任务调度:直接使用linux的crontab来定义;
      复杂的任务调度:开发调度平台
      或使用现成的开源调度系统,比如ooize、azkaban等


    3 常见工作流调度系统
      市面上目前有许多工作流调度器
      在hadoop领域,常见的工作流调度器有Oozie, Azkaban,Cascading,Hamake等

    4 Azkaban与Oozie对比
      #功能
        两者均可以调度mapreduce,pig,java,脚本工作流任务
        两者均可以定时执行工作流任务
      #工作流定义
        Azkaban使用Properties文件定义工作流
        Oozie使用XML文件定义工作流
      #工作流传参
        Azkaban支持直接传参,例如${input}
        Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
      #定时执行
        Azkaban的定时执行任务是基于时间的
        Oozie的定时执行任务基于时间和输入数据
      #资源管理
        Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
        Oozie暂无严格的权限控制
      #工作流执行
        Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
        Oozie作为工作流服务器运行,支持多用户和多工作流
      #工作流管理
        Azkaban支持浏览器以及ajax方式操作工作流
        Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流

    5 Azkaban介绍
      Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作
      和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面
      维护和跟踪你的工作流。
      它有如下功能特点:
        #Web用户界面
        #方便上传工作流
        #方便设置任务之间的关系
        #调度工作流
        #认证/授权(权限的工作)
        #能够杀死并重新启动工作流
        #模块化和可插拔的插件机制
        #项目工作区
        #工作流和任务的日志记录和审计

    6 azkaban实战
      Azkaba内置的任务类型支持command、java
      Command类型单一job示例
      1、创建job描述文件
        vi command.job
          #command.job
          type=command
          command=echo 'hello'
      2、将job资源文件打包成zip文件
        zip command.job
      3、通过azkaban的web管理平台创建project并上传job压缩包
        首先创建project
        上传zip包
      4、启动执行该job

      Command类型多job工作流flow
        1、创建有依赖关系的多个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
        2、将所有job资源文件打到一个zip包中
        3、在azkaban的web管理界面创建工程并上传zip包
        4、启动工作流flow

      HDFS操作任务
        1、创建job描述文件
          # fs.job
          type=command
          command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz
        2、将job资源文件打包成zip文件
        3、通过azkaban的web管理平台创建project并上传job压缩包
        4、启动执行该job

      MAPREDUCE任务
        Mr任务依然可以使用command的job类型来执行
        1、创建job描述文件,及mr程序jar包(示例中直接使用hadoop自带的example jar)
          # 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
        2、将所有job资源文件打到一个zip包中
        3、在azkaban的web管理界面创建工程并上传zip包
        4、启动job

      HIVE脚本任务
        1、创建job描述文件和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'
        2、将所有job资源文件打到一个zip包中
        3、在azkaban的web管理界面创建工程并上传zip包
        4、启动job

  • 相关阅读:
    结构型设计模式——享元
    结构型设计模式——装饰模式
    结构型设计模式——外观
    结构型设计模式——桥接模式
    结构型设计模式——适配器模式(Go)
    创建型设计模式——工厂模式
    创建型设计模式——单例模式
    Linux03
    阅读《构建之法》八九十章
    作业五 5.2 5.3
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/9904911.html
Copyright © 2011-2022 走看看