zoukankan      html  css  js  c++  java
  • 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>
        
        
  • 相关阅读:
    C#
    C#
    C#
    创建一个ROS包
    创建一个工作空间
    ROS的文件系统
    单一职责原因
    策略模式
    UML类图
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/ronnieyuan/p/11823061.html
Copyright © 2011-2022 走看看