Oozie笔记

简介

  • Oozie 是用于 Hadoop 平台的开源的工作流调度引擎。
  • 用于管理 Hadoop
  • 属于web应用程序, 由 Oozie client 和 Oozie Server 两个组件构成。
  • Oozie Server 运行于 Java Servlet容器 (Tomcat) 中的 web 程序。

作用

  • 统一调度hadoop系统中场景的MR任务启动、hdfs操作、shell调度、hive操作等
  • 使得复杂的依赖关系、时间触发、事件触发使用xml语言进行表达, 开发效率提高
  • 一组任务使用一个DAG来表示, 使用图形表达流程逻辑更加清晰
  • 支持很多种任务调度, 能完成大部分 hadoop 任务处理
  • 程序定义支持 EL 常量 和 函数, 表达更加丰富

Oozie 架构

image-20191108193751933

安装方式

  • 手动安装
  • Cloudera Manger 添加服务

Oozie Web控制台

  • 解压ext-x.x到/var/lib/oozie目录下 unzip ext-x.x.zip -d /var/lib/oozie/
  • Oozie服务中配置启用web控制台
  • 保存,重启oozie服务

Oozie 配置

  • 节点内存配置
  • oozie.service.callablequeueservice.callable.concurrency(节点并发)
  • oozie.service.callablequeueservice.queue.size(队列大小)
  • oozie.service.ActionService.executor.ext.classes(扩展)

Oozie 共享库

  • /user/oozie/share/lib(hdfs中目录)

web管理地址

  • http://oozie_host_ip:11000/oozie/

Oozie 管理

  • 任务列表查看
  • 任务状态查看
  • 流程返回信息
  • 节点信息查看
  • 流程图信息
  • 日志查看
  • 系统信息查看 和 配置

Oozie CLI 命令

Job 配置 job.properties

image-20191108195245259

WorkFLow 配置

  • 版本信息

    • <workflow-app xmlns="uri:oozie:workflow:0.4" name=“workflow name">
  • EL函数

    • 基本EL函数

      • String firstNotNull(String value1, String value2)

      • String concat(String s1, String s2)

      • String replaceAll(String src, String regex, String replacement)

      • String appendAll(String src, String append, String delimeter)

      • String trim(String s)

      • String urlEncode(String s)

      • String timestamp()

      • String toJsonStr(Map) (since Oozie 3.3)

      • String toPropertiesStr(Map) (since Oozie 3.3)

      • String toConfigurationStr(Map) (since Oozie 3.3)

    • WorkFlow EL

      • String wf:id() – 返回当前workflow作业ID
      • String wf:name() – 返回当前workflow作业NAME
      • String wf:appPath() – 返回当前workflow的路径
      • String wf:conf(String name) – 获取当前workflow的完整配置信息
      • String wf:user() – 返回启动当前job的用户
      • String wf:callback(String stateVar) – 返回结点的回调URL,其中参数为动作指定的退出状态
      • int wf:run() – 返回workflow的运行编号,正常状态为0
      • Map wf:actionData(String node) – 返回当前节点完成时输出的信息
      • int wf:actionExternalStatus(String node) – 返回当前节点的状态
      • String wf:lastErrorNode() – 返回最后一个ERROR状态推出的节点名称
      • String wf:errorCode(String node) – 返回指定节点执行job的错误码,没有则返回空
      • String wf:errorMessage(String message) – 返回执行节点执行job的错误信息,没有则返回空
    • HDFS EL

      • boolean fs:exists(String path)
      • boolean fs:isDir(String path)
      • long fs:dirSize(String path) – 目录则返回目录下所有文件字节数;否则返回-1
      • long fs:fileSize(String path) – 文件则返回文件字节数;否则返回-1
      • long fs:blockSize(String path) – 文件则返回文件块的字节数;否则返回-1
  • 节点

    • 流程控制节点

      • 流程控制节点

        • start – 定义workflow开始
        • end – 定义workflow结束
        • decision – 实现switch功能
        • sub-workflow – 调用子workflow
        • kill – 杀死workflow
        • fork – 并发执行workflow
        • join – 并发执行结束(与fork一起使用)
        <decision name="[NODE-NAME]">
            <switch>
                <case to="[NODE_NAME]">[PREDICATE]</case>
                ...
                <case to="[NODE_NAME]">[PREDICATE]</case>
                <default to="[NODE_NAME]" />
            </switch>
        </decision>
        
      • 动作节点

        • shell

        • java

        • fs

        • MR

        • hive

        • sqoop

          <fork name="[FORK-NODE-NAME]">
              <path start="[NODE-NAME]" />
              ...
              <path start="[NODE-NAME]" />
          </fork>
          ...
          <join name="[JOIN-NODE-NAME]" to="[NODE-NAME]" />
          
          
    • Shell节点

      • job.properties

        nameNode=hdfs://node01:8020
        jobTracker=node01:8032
        queueName=default
        examplesRoot=examples
        
        oozie.wf.application.path=${nameNode}/user/workflow/oozie/shell
        
        
      • workflow.xml

        <workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
            <start to="shell-node"/>
            <action name="shell-node">
               <shell xmlns="uri:oozie:shell-action:0.1">
                    <job-tracker>${jobTracker}</job-tracker>
                    <name-node>${nameNode}</name-node>
                    <configuration>
                        <property>
                            <name>mapred.job.queue.name</name>
                            <value>${queueName}</value>
                        </property>
                    </configuration>
                    <exec>echo</exec>
                    <argument>hi shell in oozie</argument>
                </shell>
                <ok to="end"/>
                <error to="fail"/>
            </action>
            <kill name="fail">
                <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
            </kill>
            <end name="end"/>
        </workflow-app>
        
        
    • 调用impala

      • job.properties

        nameNode=hdfs://node01:8020
        jobTracker=node01:8032
        queueName=default
        examplesRoot=examples
        oozie.usr.system.libpath=true
        oozie.libpath=${namenode}/user/${user.name}/workflow/impala/lib
        
        
        oozie.wf.application.path=${nameNode}/user/${user.name}/workflow/impala
        
        
        
      • workflow.xml

        <workflow-app xmlns="uri:oozie:workflow:0.4" name="impala-wf">
            <start to="shell-node"/>
            <action name="shell-node">
                <shell xmlns="uri:oozie:shell-action:0.1">
                    <job-tracker>${jobTracker}</job-tracker>
                    <name-node>${nameNode}</name-node>
                    <configuration>
                        <property>
                            <name>mapred.job.queue.name</name>
                            <value>${queueName}</value>
                        </property>
                    </configuration>
                    <exec>impala-shell</exec>
                    <argument>-i</argument>
                    <argument>node02</argument>
                    <argument>-q</argument>
                    <argument>invalidate metadata</argument>
                    <capture-output/>
                </shell>
        	......
            </action>
        	.......
        </workflow-app>
        
        
    • fs节点

      • workflow.xml

        <workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.5">
            ...
            <action name="[NODE-NAME]">
                <fs>
                    <delete path='[PATH]'/>
                    <mkdir path='[PATH]'/>
                    <move source='[SOURCE-PATH]' target='[TARGET-PATH]'/>
                    <chmod path='[PATH]' permissions='[PERMISSIONS]' dir-files='false' />
                    <touchz path='[PATH]' />
                    <chgrp path='[PATH]' group='[GROUP]' dir-files='false' />
                </fs>
                <ok to="[NODE-NAME]"/>
                <error to="[NODE-NAME]"/>
            </action>
        </workflow-app>
        
        
    • Java节点

      • job.properties

        nameNode=hdfs://node01:8020
        jobTracker=node01:8032
        queueName=default
        examplesRoot=examples
        oozie.usr.system.libpath=true
        oozie.libpath=${nameNode}/user/workflow/lib/lib4java
        
        oozie.wf.application.path=${nameNode}/user/workflow/oozie/java
        
        
      • workflow.xml

      <workflow-app xmlns="uri:oozie:workflow:0.3" name="mr-wc-wf">
        <start to="mr-node"/>
        <action name="mr-node">
           <java>
                <job-tracker>${jobTracker}</job-tracker>
                <name-node>${nameNode}</name-node>
                <prepare> 
                    <delete path="${nameNode}/user/path" />    
                    <mkdir path="${nameNode}/user/path" />
                </prepare> 
                <configuration>
                    <property>
                        <name>mapred.job.queue.name</name>
                        <value>${queueName}</value>
                    </property>
                </configuration>
                <main-class>com.pagename.classname</main-class>
                <arg>args1</arg>
      		 <arg>args2</arg>
            </java>
            <ok to="end"/>
            <error to="fail"/>
        </action>
        <kill name="fail">
            <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
        </kill>
        <end name="end"/>
      </workflow-app>
      
      
原文地址:https://www.cnblogs.com/ronnieyuan/p/11823061.html