作业流调度框架 oozie 使用 (二)

oozie 任务调度处理

标签(空格分隔): 协作框架


  • 一:oozie example 运行任务调度案例
  • 二:oozie 运行自定的mapreduce 的jar 包
  • 三:oozie 调度shell 脚本
  • 四:oozie 的coordinator 周期性调度当前任务

一: 运行oozie example 案例

1.1 解压exmaple包

解压example 包
tar -zxvf oozie-examples.tar.gz

cd /home/hadoop/yangyang/oozie/examples/apps/map-reduce

job.properties      --定义job相关的属性,比如目录路径、namenode节点等。
                    --定义workflow的位置

workflow.xml    --定义工作流相关的配置(start  --end   --kill)(action)
                --mapred.input.dir
                --mapred.output.dir

lib     --目录,存放job任务需要的资源(jar包)

1.2 更改job.properties

nameNode=hdfs://namenode01.hadoop.com:8020
jobTracker=namenode01.hadoop.com:8032
queueName=default
examplesRoot=examples

oozie.wf.application.path=${nameNode}/user/hadoop/${examplesRoot}/apps/map-reduce/workflow.xml
outputDir=map-reduce

1.3 配置workflow.xml 文件:

<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">
    <start to="mr-node"/>
    <action name="mr-node">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.apache.oozie.example.SampleMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.apache.oozie.example.SampleReducer</value>
                </property>
                <property>
                    <name>mapred.map.tasks</name>
                    <value>1</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>/user/${wf:user()}/${examplesRoot}/input-data/text</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <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>

1.3 上传example 目录到hdfs 上面

hdfs dfs -put example example


1.4 运行oozie 调度任务

bin/oozie job -oozie http://namenode01.hadoop.com:11000/oozie -config examples/apps/map-reduce/job.properties -run

查看状态:

输出目录



二:oozie 运行自定的mapreduce 的jar 包

2.1 在hdfs 上创建上传目录

cd /home/hadoop/yangyang/oozie/
hdfs dfs -mkdir oozie-apps

2.2 新建本地的文件用作上传的目录

mkdir oozie-apps
cd /home/hadoop/yangyang/oozie/examples/apps
cp -ap map-reduce /home/hadoop/yangyang/oozie/oozie-apps/

cd /homme/hadoop/yangyang/oozie/oozie-appps/map-reduce
mkdir input-data

2.3 拷贝运行的jar包与要运行的job 任务的文件

cp -p mr-wordcount.jar yangyang/oozie/oozie-apps/map-reduce/lib/
cp -p /home/hadoop/wc.input ./input-data

2.4 配置job.properties 文件和workflow.xml

vim job.properties

nameNode=hdfs://namenode01.hadoop.com:8020
jobTracker=namenode01.hadoop.com:8032
queueName=default
examplesRoot=oozie-apps/map-reduce

oozie.wf.application.path=${nameNode}/user/hadoop/${examplesRoot}/workflow.xml
outputDir=oozie-reduce

vim workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.2" name="wc-map-reduce">
    <start to="mr-node"/>
    <action name="mr-node">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="${nameNode}/user/hadoop/${examplesRoot}/output-data/${outputDir}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <!--0 new API-->
                <property>
                    <name>mapred.mapper.new-api</name>
                    <value>true</value>
                </property>
                <property>
                    <name>mapred.reducer.new-api</name>
                    <value>true</value>
                </property>

                <!--1 input-->
                <property>
                    <name>mapred.input.dir</name>
                    <value>/user/hadoop/${examplesRoot}/input-data</value>
                </property>         

                <!--2 mapper class -->
                <property>
                    <name>mapreduce.job.map.class</name>
                    <value>org.apache.hadoop.wordcount.WordCountMapReduce$WordCountMapper</value>
                </property>
                <property>
                    <name>mapreduce.map.output.key.class</name>
                    <value>org.apache.hadoop.io.Text</value>
                </property>
                <property>
                    <name>mapreduce.map.output.value.class</name>
                    <value>org.apache.hadoop.io.IntWritable</value>
                </property> 

                <!--3 reduer class -->
                <property>
                    <name>mapreduce.job.reduce.class</name>
                    <value>org.apache.hadoop.wordcount.WordCountMapReduce$WordCountReducer</value>
                </property>
                <property>
                    <name>mapreduce.job.output.key.class</name>
                    <value>org.apache.hadoop.io.Text</value>
                </property>
                <property>
                    <name>mapreduce.job.output.value.class</name>
                    <value>org.apache.hadoop.io.IntWritable</value>
                </property>             

                <!--4 output -->
                <property>
                    <name>mapred.output.dir</name>
                    <value>/user/hadoop/${examplesRoot}/output-data/${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <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>

2.6 上传文件到hdfs 上面:

hdfs dfs -put map-reduce oozie-apps

2.7 执行oozie 命令运行job 处理

bin/oozie job -oozie http://namenode01.hadoop.com:11000/oozie -config oozie-apps/map-reduce/job.properties -run

2.8 在浏览器上面查看测试结果

三:oozie 调度shell 脚本

3.1 生成配置文件:

cd /home/hadoop/yangyang/oozie/examples/apps
cp -ap shell/ ../../oozie-apps/
mv shell mem-shell

3.2 书写shell 脚本:

cd /home/hadoop/yangyang/oozie/oozie-apps/mem-shell

vim meminfo.sh

#!/bin/bash
/usr/bin/free -m >> /tmp/meminfo

3.3 配置job.properties 文件和workflow.xml

vim job.properties

nameNode=hdfs://namenode01.hadoop.com:8020
jobTracker=namenode01.hadoop.com:8032
queueName=default
examplesRoot=oozie-apps/mem-shell

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/workflow.xml
EXEC=meminfo.sh

vim workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="mem-shell-wf">
    <start to="shell-node"/>
    <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>/user/hadoop/oozie-apps/mem-shell/${EXEC}#${EXEC}</file>
        </shell>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

3.4 上传配置文件到hdfs 上面

cd /home/hadoop/yangyang/oozie/oozie-apps
hdfs dfs  -put mem-shell oozie-apps

3.5 执行oozie 调度 shell脚本

bin/oozie job -oozie http://namenode01.hadoop.com:11000/oozie -config oozie-apps/mem-shell/job.properties -run

四:oozie 的coordinator 周期性调度当前任务

4.1 配置时区 更改oozie 的配置文件

cd /home/hadoop/yangyang/oozie/conf

vim oozie-site.xml 增加:

    <property>
        <name>oozie.processing.timezone</name>
        <value>GMT+0800</value>
    </property>
        <property>
        <name>oozie.service.coord.check.maximum.frequency</name>
        <value>false</value>
    </property>

4.2 更改本地 时间

 使用root 账户 配置

 cp -p /etc/localtime /etc/localtime.bak 

 rm -rf /etc/localtime

 cd /usr/share/zoneinfo/Asia/

 cp -p Shanghai /etc/localtime

4.3 更改oozie-consle.js 文件

cd /home/hadoop/yangyang/oozie/oozie-server/webapps/oozie

vim oozie-console.js 

function getTimeZone() {
    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
    return Ext.state.Manager.get("TimezoneId","GMT+0800");
}

4.4 从新启动oozie 服务

bin/oozie-stop.sh
bin/oozie-start.sh 

4.5 查看oozie 的当前时间

4.6 配置job.properties 文件和workflow.xml

cd /home/hadoop/yangyang/oozie/examples/apps

cp -ap cron ../../oozie-apps/

cd cron

rm -rf job.properties workflow.xml
cd /home/hadoop/yangyang/oozie/oozie-apps/mem-shell

cp -p * ../cron

配置job.properties

vim job.properties

---
nameNode=hdfs://namenode01.hadoop.com:8020
jobTracker=namenode01.hadoop.com:8032
queueName=default
examplesRoot=oozie-apps/cron

oozie.coord.application.path=${nameNode}/user/hadoop/${examplesRoot}/
start=2016-06-6T16:57+0800
end=2016-06-6T20:00+0800
workflowAppUri=${nameNode}/user/hadoop/${examplesRoot}/
EXEC=meminfo.sh

配置workflow.xml

vim workflow.xml

---

<workflow-app xmlns="uri:oozie:workflow:0.4" name="memcron-shell-wf">
    <start to="shell-node"/>
    <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>/user/hadoop/oozie-apps/cron/${EXEC}#${EXEC}</file>
        </shell>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

配置coordinator.xml

vim coordinator.xml

---

<coordinator-app name="cron-coord" frequency="${coord:minutes(2)}" start="${start}" end="${end}" timezone="GMT+0800"
                 xmlns="uri:oozie:coordinator:0.2">
        <action>
        <workflow>
            <app-path>${workflowAppUri}</app-path>
            <configuration>
                <property>
                    <name>jobTracker</name>
                    <value>${jobTracker}</value>
                </property>
                <property>
                    <name>nameNode</name>
                    <value>${nameNode}</value>
                </property>
                <property>
                    <name>queueName</name>
                    <value>${queueName}</value>
                </property>
                                <property>
                    <name>EXEC</name>
                    <value>${EXEC}</value>
                </property>
            </configuration>
        </workflow>
    </action>
</coordinator-app>

4.7 上传配置文件到hdfs 上面:

hdfs dfs -put cron oozie-apps

4.8 执行 oozie 命令 运行job

bin/oozie job -oozie http://namenode01.hadoop.com:11000/oozie -config oozie-apps/cron/job.properties -run

4.9 从web浏览job的相关问题

原文地址:http://blog.51cto.com/flyfish225/2097346

时间: 2024-11-01 23:07:46

作业流调度框架 oozie 使用 (二)的相关文章

作业流 oozie调度框架的配置与使用(一)

一: 常见的调度框架 一: oozie 概述与功能 二: oozie 安装与配置 一: 常见的作用调度框架 1.1 linux 下面的计划任务 在工作量比较下的情况下 使用linux 下的crond 使用定制计划任务 * * * * * 后面接调度 job 的命令 分 时 日 月 周 hive -e " " 执行一个sql 命令 hive -f " " 执行一个sql 脚本 结合 crond 使用 1.2 常见的协作调度框架: 1.2.1 Azkaban 框架 参考

1.1-1.4 hadoop调度框架和oozie概述

一.hadoop调度框架 Linux Crontab Azkaban https://azkaban.github.io/ Oozie http://oozie.apache.org/ Zeus(阿里的) https://github.com/michael8335/zeus2 二.oozie架构 1.oozie 一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调. Oozie需要部署到Jav

详解应对平台高并发的分布式调度框架TBSchedule

tbschedule是一款非常优秀的高性能分布式调度框架,非常高兴能分享给大家.这篇文章是我结合多年tbschedule使用经验和研读三遍源码的基础上完成的,期间和阿里空玄有过不少技术交流,非常感谢空玄给予的大力支持.我写这篇文章的目的一是出于对tbschedule的一种热爱,二是现在是一个资源共享.技术共享的时代,希望把它展现给大家(送人玫瑰,手留余香),能给大家的工作带来帮助. 一.tbschedule初识 时下互联网和电商领域,各个平台都存在大数据.高并发的特点,对数据处理的要求越来越高,

山寨版Quartz.Net任务统一调度框架

TaskScheduler 在日常工作中,大家都会经常遇到Win服务,在我工作的这些年中一直在使用Quartz.Net这个任务统一调度框架,也非常好用,配置简单,但是如果多个项目组的多个服务部署到一台服务器时还是不尽如人意. 这段时间很忙,也一直未更新博客了,赶上今天下班早,就研究了一下,弄了个简单版基于Timer的山寨Quartz,当然了只是实现任务调度,闲话少说直接入主题吧 一.技术准备 其实都是普通的微软技术,一想到这方我们第一想到的可能就是反射,本文用了MEF 二.框架搭建 第一我们建立

Quartz.Net任务统一调度框架

山寨版Quartz.Net任务统一调度框架 TaskScheduler 在日常工作中,大家都会经常遇到Win服务,在我工作的这些年中一直在使用Quartz.Net这个任务统一调度框架,也非常好用,配置简单,但是如果多个项目组的多个服务部署到一台服务器时还是不尽如人意. 这段时间很忙,也一直未更新博客了,赶上今天下班早,就研究了一下,弄了个简单版基于Timer的山寨Quartz,当然了只是实现任务调度,闲话少说直接入主题吧 一.技术准备 其实都是普通的微软技术,一想到这方我们第一想到的可能就是反射

分布式开源调度框架TBSchedule原理与应用

主要内容: 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源代码分析 4. 与其它开源调度框架对照 第二部分 TBSchedule分布式调度演示样例 1. TBSchedule源代码下载 2. 引入源代码Demo开发演示样例 3. 控制台配置任务调度 4. selectTasks方法參数说明 5. 创建调度策略參数说明 6. 创建任务參数说明 第一部分 TBSchedule基本概念及原理 1. 概念介绍 TBSchedule是一个支持分布式的调度框架.能让一

Quartz.Net 调度框架配置介绍

在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知等等.大家通过windows计划任务,windows服务等都实现过此类任务,甚至实现过自己的配置定制化的框架.那今天就来介绍个开源的调度框架Quartz.Net(主要介绍配置的实现,因为有朋友问过此类问题).调度的实现代码很简单,在源码中有大量Demo,这里就略过了. Quartz.Net当前最新版本 Quartz.NET 2.0 beta 1 Released 一 基于文件配置 先看一下简单的实现代码 usin

Spring2.0集成Quartz1.5.2调度框架

Quartz是个开放源码项目,提供了丰富的作业调度集.希望您在阅读完本文并看过代码演示后,可以把Quartz的基本特性应用到任何Java™应用程序中.现代的Web应用程序框架在范围和复杂性方面都有所发展,应用程序的每个底层组件也必须相应地发展.作业调度是现代系统中对Java应用程序的一般要求,而且也是对Java开发人员一贯的要求.虽然目前的调度技术比起原始的数据库触发器标志和独立的调度器线程来说,已经发展了许多,但是作业调度仍然不是个小问题.对这个问题最合适的解决方案就是来自OpenSympho

java并行调度框架封装及示例

参考资料:  阿里巴巴开源项目 CobarClient  源码实现. 分享作者:闫建忠 分享时间:2014年5月7日 --------------------------------------------------------------------------------------- 并行调度封装类设计: BXexample.java package org.hdht.business.ordermanager.quartzjob; import java.util.ArrayList;