• Oozie


    乌兹天下第一【dog】

    各种调度工具特性对比

    Ooize 是一个重量级,功能全面

    Azkaban 轻量级

    linux crontab 最轻量,最简单

    Oozie

    使用Oozie的主要目的是为了管理不同类型的作业在Hadoop系统中处理。

    Oozie基于hadoop集群

    原生通过xml配置,很麻烦 ; 建议配合hue使用


    安装

    安装依赖:tomcat,mysql,hadoop htfs,

    1. 使用tomcat等服务器作为web页面展示容器,

    2. 使用关系型数据库存储Oozie的工作流元数据
      默认使用derby,由于derby的缺点,一般情况使用mysql作为Oozie的元数据库,

    3. 使用extjs来作为报表展示js框架

    4. 在hadoop执行具体任务

    img

    Oozie Client:提供命令行、java api、rest等方式,对Oozie的工作流流程的提交、启动、运行等操作;

    ​ 本质上是发HTTP请求向OozieServer提交作业

    Oozie Server /Oozie webapp:java web应用

    元数据库:定义了action执行的一些状态信息,一般存放在Mysql数据库中

    hadoop: Oozie是依赖于HDFS进行调度的,作业的具体执行是放在Hadoop执行的

    概念

    执行流程

    client向 oozie webapp 提交命令,

    oozie执行hadoop程序编排流程:

    1. 向yarn集群申请 启动一个mr作业**launcher job**,map-only的MR作业
    2. 通过launcher job提交、监控 其他各种类型的action任务
    
    • 1
    • 2

    img

    工作流类型

    bundle包含多个coordinator,coordinator包含一个workflow,workflow定义具体的action动作

    preload

    • 总体组件图
      Oozie
    WorkFlow

    最基本的工作流,只能按流程顺序执行

    job组成

    job.properties :记录了job的属性
    workflow.xml :使用hPDL 定义任务的流程和分支
    lib目录:用来执行具体的任务的jar包,sh文件等

    workflow.xml

    有两大类节点构成:

    控制流节点(Control flow nodes)
    • start,end,fail,kill

    开始节点, 指定的工作流程作业的开始。

    结束节点, 作业的结束信号。

    错误节点, 指定要打印错误和相应的错误信息的发生。

    • decision,fork,join 控制工作流执行路径

    • 不可以自定义

    <workflow-app name="[WF-DEF-NAME]" xlmns="uri:oozie:workflow:0.1">
        
        <start to="[NODE-NAME]" />
      	
        
        <decision name="[NODE-NAME]">
            <switch>
                <case to="[NODE_NAME]">[PREDICATE]case>
                ...
                <case to="[NODE_NAME]">[PREDICATE]case>
                <default to="[NODE_NAME]"/>
            switch>
        decision>
      
      	
        
        <fork name="[FORK-NODE-NAME]">
            <path start="[NODE-NAME_1]" />
            ...
            <path start="[NODE-NAME_N]" />
        fork>
        
        <join name="[JOIN-NODE-NAME]" to="[NODE-NAME]" />
    
        <kill name="[NODE-NAME]" />
            <message>[MESSAGE-TO-LOG]message>
        kill>
        <end to="[NODE-NAME]" />
    
    workflow-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    动作节点(Action nodes)

    执行具体动作,支持多种类型的Hadoop作业(如Java map-reduce、流式map-reduce、Pig、Hive、Sqoop和Distcp)以及特定于系统的工作(如Java程序和shell脚本)

    1. 操作节点的执行都是远程的

    2. 异步执行,通过 回调(call backs)或者 轮询(polling)探测状态

    3. 恢复执行的策略(定时重试,人工干预)

    4. 执行成功,则会转向ok节点;失败 则会转向error节点。

    • 可以自定义
    		<action name="shell-node">
          	
            <shell xmlns="uri:oozie:shell-action:1.0">
                
                <resource-manager>${resourceManager}resource-manager>
                <name-node>${nameNode}name-node>
                <configuration>
                    <property>
                        <name>mapred.job.queue.namename>
                        <value>${queueName}value>
                    property>
                configuration>
                
                <exec>echoexec>
                
                <argument>my_output=Hello Oozieargument>
                <capture-output/>
            shell>
            
            <ok to="check-output"/>
            <error to="fail"/>
        action>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    Coordinator

    定时触发WorkFlow

    1. 基于时间【起始时间,结束时间,频率】
    2. 基于数据【有了数据才会触发】
    coordinator.xml
    <coordinator-app name="cron-coord" frequency="${coord:minutes(10) 频率,支持crontab表达式}" start="${起始时间}" end="${结束时间}" timezone="UTC 时区"
                     xmlns="uri:oozie:coordinator:0.2">
        <action>
            <workflow>
                <app-path>${workflow.xml文件路径}app-path>
                <configuration>
                    <property>
                        <name>resourceManagername>
                        <value>${resourceManager}value>
                    property>
                    <property>
                        <name>nameNodename>
                        <value>${nameNode}value>
                    property>
                    <property>
                        <name>queueNamename>
                        <value>${queueName}value>
                    property>
                configuration>
            workflow>
        action>
    coordinator-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    Bundle Job

    批处理,绑定多个Coordinator

    bundle.xml
    <bundle-app name='bundle-app' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='uri:oozie:bundle:0.1'>
              <coordinator name='coord-1'>
                     <app-path>${coordinator.xml路径}app-path>
                     <configuration>
                         <property>
                             <name>startname>
                             <value>${start}value>
                         property>
                         <property>
                             <name>endname>
                             <value>${end}value>
                         property>
                     configuration>
              coordinator>
    bundle-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    生命周期,Job状态

    1. PREP,一个工作流第一次创建就处于PREP状态,表示工作流已经创建,但是还没有运行。
    2. RUNNIG,当一个已经被创建的工作流job开始执行的时候,就处于RUNNING状态。它不会达到结束状态,只能因为出错而结束或者被挂起。
    3. SUSPENDED,一个RUNNING状态的工作流Job会变成SUSPENDED状态,而且它会一直处于该状态,除非这个工作流Job被重启开始执行或者被杀死。
    4. SUCCESSEDED,当一个RUNNING状态的工作流Job达到了end节点,他就变成了SUCCESSEDED最终完成状态。
    5. KILLED,当一个工作流Job处于被创建后的状态。或者处于RUNNING,SUSPENDED状态时,被杀死,则工作流Job的状态变为了KILLED状态。
    6. FAILED,当一个工作流Job不可预期的错误失败而终止,就会变成FAILED状态。

    执行workflow应用程序

    工作流应用程序由工作流定义和所有相关资源组成,例如MapReduce Jar文件,Pig脚本等。应用程序需要遵循简单的目录结构并部署到HDFS,以便Oozie可以访问它们。

    |- apps	#任务
    |  |  shell	# 执行shell脚本
    |  |  |- job.properties
    |  |  |- workflow.xm
    |  |- cron # 定时
    |  |  |- coordinator.xml
    |  |  |- job.properties
    |  |  |- workflow.xml
    |  |- bundle # 批处理
    |  |  |- bundle.xml
    |  |  |- job.properties
    |- input-data	#数据源
    |- src
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    job.properties

    工作流参数配置

    #任务执行路径:hdfs
    nameNode=hdfs://localhost:8020
    examplesRoot=examples
    #oozie资源存储路径
    oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/shell
    
    #交给谁调度:yarn
    resourceManager=localhost:8032
    #mr任务队列名称
    queueName=default
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    hadoop1是 ,hadoop2是

    1. 上传workFlow资源到 oozie.wf.application.path

    2. 执行任务

    $ oozie job -oozie http://oozie-server-ip:11000/oozie -config job.properties路径 -run
    >返回Job ID
    #oozie job -oozie http://172.16.5.32:12000/oozie -config /usr/local/service/oozie/examples/apps/shell/job.properties -run
    
    • 1
    • 2
    • 3
    1. 查看结果
    $ oozie job -info <Job ID>
    
    • 1

    ​ oozie的具体执行提交到了yarn,可以从yarn看具体日志

    hue

    (Hadoop User Experience)

    开源的Apache Hadoop UI系统,统一了各个项目的开发方式放在一个接口里

    Hue出自CDH

    • SQL编辑器,支持Hive, Impala, MySQL, Oracle, PostgreSQL, SparkSQL, Solr SQL, Phoenix…
    • 搜索引擎Solr的各种图表
    • Spark和Hadoop的友好界面支持
    • 支持调度系统Apache Oozie,可进行workflow的编辑、查看

    img

    hue操作oozie

    https://cloud.tencent.com/document/product/589/71987#oozie-.E4.BB.BB.E5.8A.A1.E7.9A.84.E5.BC.80.E5.8F.91

  • 相关阅读:
    吃透Redis(九):缓存淘汰篇-LFU算法
    Serilog日志框架
    第十章《日期与时间》第1节:Date类的使用
    国庆day1---消息队列实现进程之间通信方式代码,现象
    从此刻开始走进HTML的大门!!!
    “我有一个大胆的想法”?Meta AI 新技术让你的思维图像一览无余!
    操作系统------内存管理(2)非连续分配内存 段页式管理
    topk算法-leetcode java题解
    Mysql数据库
    24 Python的sqlite3模块
  • 原文地址:https://blog.csdn.net/xyc1211/article/details/126608382