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 * * * *"

Oozie_示例的更多相关文章

  1. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  2. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  3. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  4. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  5. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  6. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

  7. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

  8. Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)

    示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我 ...

  9. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

随机推荐

  1. Python之路,Day8 - Python基础 面向对象高级进阶与socket基础

    类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...

  2. 关于Response.Redirect 端口不一致的跳转

    如果内网和外网的端口号设置的不相同,那在使用Response.Redirect跳转的时候会无法成功.需要做以下设置: <system.web> <httpRuntime useFul ...

  3. "传成老树白茶"献礼母亲节 邀市民品茗感受茶文化

    5月8日下午,传成老树白茶巡回中国公益品鉴会第七十站,走进福州马尾区东方名城传成老树白茶文化馆. 本次品鉴会活动以“感恩母亲节”为主题,以马尾船政文化为背景,邀福州市民一起品鉴白茶,感受中国茶文化. ...

  4. ASP.NET中的chart控件绑定SQL Server数据库

    网上很多的chart控件的实例都没有绑定数据库,经过一番摸索后,终于实现了chart控件绑定数据库. 首先,在Visual Studio中建立一个网站,新建一个WebForm项目,名称为ChartTe ...

  5. OpenGL glMultMatrixf() glPushMatrix() glPushMatrix()浅析

    我在之前的博客中曾提到过,OpenGL中坐标是采用行向量表示的,与之相对应的是,在矩阵变换中使用的是变换矩阵的转置,并且使用的是后乘的方式.本文直接使用下面的代码来及其后的图示来解释函数 p,li { ...

  6. wps恢复经典模式

    经典模式 情况一: 恢复的方法:点击红色区域 情况二: 恢复的方法:点击红色区域

  7. Linux Memcached安装以及PHP扩展安装

    一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.下载 #wget   http://www.monkey.org/~provos/ ...

  8. PermGen space

    MyEclipse内存空间不足,调整空间操作: 1.点击"Run"-"Run Configurations",在打开的窗口中点击"Arguments& ...

  9. 关闭电脑SSD的磁盘碎片整理

    小白往往会把机械硬盘时代的习惯带进固态硬盘时代,比如碎片整理.机械硬盘时代砖家最喜欢告诉小白:“系统慢了吧?赶紧碎片整理撒.”小白屁颠屁颠地整理去了.殊不知碎片整理对于SSD来说完全就是种折磨.这种“ ...

  10. 会议通js

    js逻辑: /** * Created by wanglijuan on 2016/12/2. */ $(function () { //登陆后请求数据 // $.ajax({ // url:&quo ...