zoukankan      html  css  js  c++  java
  • Oozie_示例

    Oozie 官方示例

    解压oozie-examples.tar.gz
      将examples/上传到HDFS家目录
        $ bin/hdfs dfs -put /opt/cdh-5.6.3/oozie-4.0.0-cdh5.3.6/examples examples
      试运行自带的wordcount示例examples/apps/map-reduce
        job-with-config-class.properties
        job.properties
        lib
        workflow-with-config-class.xml
        workflow.xml
      修改example下/opt/cdh-5.6.3/oozie-4.0.0-cdh5.3.6/examples/apps/map-reduce/
        job.properties
          nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020
          jobTracker=hadoop09-linux-01.ibeifeng.com:8032
      功能: 指定workflow的地址,声明相关变量
        workflow.xml
          引用job.properties相关变量
          配置工作流
      运行一下
        $ bin/oozie job -oozie http://hadoop09-linux-01.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
      8088端口会出现两个执行进程,其中一个是launch仅仅执行map程序用于封装oozie
      第二个进行执行mr程序
      wf运行流程
        command 提交任务
        oozie读取job.properties
        查找需要运行的wf的地址,将相应变量传递给wf
        读取wf文件
          start 节点
          action 节点
          OK -> end
          error -> kill
        读取依赖的jar包(lib目录)
        sharelib的jar包支持

    自定义实现workcount的workflow

    测试wordcount程序
      $ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /input /output 
      也可用hadopp示例的wordcount   oozie根目录下创建application文件夹,并将examples/apps/map-reduce/复制一份到application,用于配置自定义wordcount程序   上传application文件夹到hdfs(家目录,因为在job.properties下要配置该目录)   添加,修改applicatio/wc-wf目录下配置文件     job.properties       examplesRoot=application/wc-wf       inputDir=input       outputDir=output     workflow.xml       <delete path="${nameNode}/${outputDir}"/>       mapreduce.job.queuename=${queueName}       mapreduce.job.map.class=org.apache.hadoop.wordcount.WCMap       mapreduce.job.reduce.class=org.apache.hadoop.wordcount.WCReduce       mapreduce.map.output.key.class=org.apache.hadoop.io.Text       mapreduce.map.output.value.class=org.apache.hadoop.io.LongWritable       mapreduce.job.output.key.class=org.apache.hadoop.io.Text       mapreduce.job.output.value.class=org.apache.hadoop.io.LongWritable       mapreduce.input.fileinputformat.inputdir=${nameNode}/${inputDir}       mapreduce.output.fileoutputformat.outputdir=${nameNode}/${outputDir}   与mr程序中的driver如出一辙   将复制的application/wc-wf中的lib目录下jar包删除,并把wc.jar放入   重新上传文件运行     $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie"     $ bin/oozie job -config application/wc-wf/job.properties -run   oozie 任务被kill   查看log日志发现 java.io.IOException: mapreduce.job.map.class is incompatible with map compatability mode   原因没使用 mapred.mapper.new-api = true 与 mapred.reducer.new-api = true

    自定义shell的workflow

    从example示例中复制一份shell到application,更名为shell-wf
      在shell-wf目录中
      创建一个shell脚本,简单测试
        $HIVE_HOME/bin/hive -e "show databases" >> shell-rs.txt
      依据官网文档修改部分配置
      job.properties
        nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020
        jobTracker=hadoop09-linux-01.ibeifeng.com:8032
        queueName=default
        examplesRoot=user/liuwl/application/shell-wf
        EXEC=test.sh
        oozie.wf.application.path=${nameNode}/${examplesRoot}/workflow.xml
      workflow.xml
      exec节点后添加
        <file>${nameNode}/${examplesRoot}/${EXEC}#${EXEC}</file>
        修改ok节点to end节点
      上传shell-wf目录到hdfs
      测试运行
        $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie"
        $ bin/oozie job -config application/wc-wf/job.properties -run
    

     复杂DAG图设计(其实也就是顺序,并发执行多个job)

    		  |----> hive  action -->| 	
      start --> MR action       --> shell action --> end
           |----> spark action -->|      
    一个简单的workflow: 先执行mraction 运行wordcount程序,然后使用shellaction 移动output下的part文件
    复制一份上面的wc-wf文件夹
    创建一个shel脚本
    #!/bin/bash
    HADOOP_HOME=/opt/cdh-5.6.3/hadoop-2.5.0-cdh5.3.6
    $HADOOP_HOME/bin/hdfs dfs -mv /output/p* /
    修改job.properties与workflow.xml
    nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020
    jobTracker=hadoop09-linux-01.ibeifeng.com:8032
    queueName=default
    examplesRoot=user/liuwl/application/dag-wf
    oozie.wf.application.path=${nameNode}/${examplesRoot}/workflow.xml
    inputDir=input
    outputDir=output
    EXEC=oozie.sh
    =====================================================================
    添加
    <action name="shell-node">
        <shell xmlns="uri:oozie:shell-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <exec>${EXEC}</exec>
         <file>${nameNode}/${examplesRoot}/${EXEC}#${EXEC}</file>
        </shell>
        <ok to="end"/>
        <error to="fail"/>
      </action>
    修改mr-node节点下OK节点为shell-node
      测试运行
        $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie"
        $ bin/oozie job -config application/dag-wf/job.properties -run
    

     coordinator的编写

    基于时间的任务调度(起始时间,终止时间,频率)
      关于时区
        CST 中国标准时间(China Standard Time)
        UTC 协调世界时,又称世界标准时间
        GMT 格林日志标准时间
      OOZIE默认UTC与GMT本地时间相同,需要改为CST
      使用date -R查看 是否为+0800
      如果不是
        cp /usr/zoneinfo/Asia/Shanghai /etc/localtime # ln -sf ... 或创建软连接
        然后修改一下clock文件
        vi /etc/sysconfig/clock
        ZONE="Asia/Shanghai"
        修改oozie的时区
          oozie.site.xml
          oozie.processing.timezone=GMT+0800
        修改ext中js文件
        oozie-server/webapps/oozie/oozie-console.js
        查找GMT并修改为GMT+0800
        重启oozie,清缓存查看页面
        拷贝官方示例中的cron并修改
        其中
          job.properties
            nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020
            jobTracker=hadoop09-linux-01.ibeifeng.com:8032
            queueName=default
            examplesRoot=user/liuwl/application/cron-wf
            oozie.coord.application.path=${nameNode}/${examplesRoot}
            start=2016-11-23T17:15+0800
            end=2016-11-23T17:20+0800
            workflowAppUri=${nameNode}/${examplesRoot}
          coordinator.xml
            <coordinator-app name="cron-coord" frequency="${coord:minutes(1)}" 
            start="${start}" end="${end}" timezone="GMT+0800" xmlns="uri:oozie:coordinator:0.2">
        执行顺序
          job.properties-->coordinator.xml(完成时间封装)-->workflow.xml(运行)
      上传并测试运行
          $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie"
          $ bin/oozie job -config application/cron-wf/job.properties -run
      问题,运行后报错,提示频率值太小,修改
      oozie-site.xml添加下
      oozie.service.coord.check.maximum.frequency=false
      再测试一个使用linux crontb格式的coordinator,改一下coordinator.xml如frequency="*/2 * * * *"
    
  • 相关阅读:
    linux启动init流程(转)
    .bash_profile .bashrc profile 文件的作用的执行顺序(转)
    Linux常用命令
    面试中常见的问题
    systemd启动过程(转)
    .bashrc文件是干什么的(转)
    关于 profile文件(转)
    从MVC框架看MVC架构的设计(转)
    Java高级软件工程师面试考纲(转)
    关于Python中的lambda
  • 原文地址:https://www.cnblogs.com/eRrsr/p/6097435.html
Copyright © 2011-2022 走看看