发表文章

[最新] 【Oozie】Oozie中的时区设置及Coordinator概念及实例介绍

gongxifacaibelieve 3月前 2

1、系统时区及时间设置

查看系统当前时间:$ date
Wed Jul 18 10:44:42 EDT 2018
查看系统当前时间及时区:$ date -R
Wed, 18 Jul 2018 10:45:03 -0400
修改系统当前时区为东八区:
(1)/usr/share/zoneinfo文件夹中存放系统支持的所有时区文件,/usr/share/zoneinfo/Asia/Shanghai文件是我们使用的东八区文件。
(2)切换为root用户。
(3)删除localtime文件:# rm /etc/localtime
(4)用localtime硬链接到/usr/share/zoneinfo/Asia/Shanghai文件:
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(5)查看系统当前时间及时区:# date -R
Wed, 18 Jul 2018 22:50:17 +0800
(6)修改系统当前日期:# date -s 2018-07-18
Wed Jul 18 00:00:00 CST 2018
(7)修改系统当前时间:# date -s 17:44:00
Wed Jul 18 17:44:00 CST 2018
(8)查看系统当前时间及时区:# date -R
Wed, 18 Jul 2018 17:44:10 +0800

2、在Oozie中修改时区

(1)编辑配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/conf/oozie-site.xml,添加如下属性:

    <!-- Time Zone -->
        <property>
                <name>oozie.processing.timezone</name>
                <value>GMT+0800</value>
        </property>

可以使用命令oozie-4.0.0-cdh5.3.6]$ bin/oozie info --timezones查看Oozie支持的时区。
(2)关闭oozie服务
oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh stop
(3)删除/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-server/work/Catalina/下的所有文件:work]$ rm -rf ./Catalina/
(4)删除/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-server/conf/Catalina/中的所有文件:conf]$ rm -rf ./Catalina/
(5)启动oozie服务:oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh start

3、Coordinator概述

Oozie是用于管理Hadoop Job的工作流调度平台,工作流创建好之后,就需要Coodinator来进行调度了。Coordinator进行调度依赖时间条件和数据是否可用。Coordinator中几个关键的概念:
Coordinator Action,即是一个Workflow Job,Job在满足一系列条件后开始执行;
Coordinator Application,定义了Coordinator Action的执行条件,包括Coordinator Action执行的时间频率,以及Coordinator Action需要被执行的开始时间和不再被执行的结束时间;
Coordinator Job,即一个Coordinator Application的运行实例。
一个Coordinator Application的定义包括开始时间、结束时间、执行频率、输入数据、输出数据和被执行的工作流。一个Coordinator Application在开始时间起周期性地执行工作流,如下图所示:

开始执行时,Coordinator Job首先会检查是否输入数据能够获取到。当输入数据存在可用时,Workflow Job处理输入数据,并产生对应的输出数据。如果输入数据不存在不可用时,Workflow Job的执行过程推迟,直到输入数据可用。若结束时间条件满足时,Coordinator Job不再执行。
Control元素定义了一个Coordinator Job的控制信息,主要包括如下三个配置元素:

元素名称 含义说明
timeout 超时时间,单位为分钟。当一个Coordinator Job启动的时候,会初始化多个Coordinator动作,timeout用来限制这个初始化过程,默认值为-1,表示永远不超时,如果为0则总是超时。
concurrency 并发数,指正在执行的Coordinator Job中可以并发执行的action数量,默认值为1。
execution 配置Coordinator Job中多个action并发执行的策略,默认是FIFO。另外还有两种:LIFO(最新的先执行)、LAST_ONLY(只执行最新的action,其他的全部丢弃)。
throttle 一个Coordinator Job初始化时,允许Coordinator动作处于WAITING状态的最大数量。

Coordinator Job中有一个Dataset的概念,它可以为实际计算提供计算的数据,主要是指HDFS上的数据目录或文件,能够配置数据集生成的频率(Frequency)、URI模板、时间等信息。

4、Coordinator实例一

(1)进入/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/examples/apps/目录,将例子程序cron-schedule拷贝到apps目录下。
apps]$ cp -r cron-schedule/ ../../oozie-apps/
(2)修改配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-apps/cron-schedule/job.properties。

nameNode=hdfs://hadoop-senior.ibeifeng.com:8020
jobTracker=hadoop-senior.ibeifeng.com:8032
queueName=default
oozieAppsRoot=user/beifeng/oozie-apps
oozieDataRoot=user/beifeng/oozie/datas

oozie.coord.application.path=${nameNode}/${oozieAppsRoot}/cron-schedule
start=2018-07-19T20:57+0800
end=2018-07-19T21:00+0800
workflowAppUri=${nameNode}/${oozieAppsRoot}/apps/cron-schedule

(3)修改配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-apps/cron-schedule/workflow.xml。

<workflow-app xmlns="uri:oozie:workflow:0.2" name="no-op-wf">
    <start to="end"/>
    <end name="end"/>
</workflow-app>

(4)修改配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-apps/cron-schedule/coordinator.xml。

<coordinator-app name="cron-coord" frequency="${coord:minutes(1)}" start="${start}" end="${end}" timezone="GMT+0800"
                 xmlns="uri:oozie:coordinator:0.4">
        <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>
            </configuration>
        </workflow>
    </action>
</coordinator-app>

(5)oozie控制台时区设置:修改/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie/oozie-console.js 第179行:

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

(6)运行示例程序,报如下错误:

Error: E1003 : E1003: Invalid coordinator application attributes, Coordinator job with frequency [1] minutes is faster than allowed maximum of 5 minutes (oozie.service.coord.check.maximum.frequency is set to true)

修改配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/conf/oozie-site.xml,即可运行成功。

        <property>
                <name>oozie.service.coord.check.maximum.frequency</name>
                <value>false</value>
        </property>

5、Coordinator实例二

(1)进入/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/examples/apps目录,将例子程序拷贝到apps目录下。
apps]$ cp -r cron ../../oozie-apps/
(2)将mysql的jar包拷贝到当前实例目录下。
cron]$ cp -r ../mr-wordcount-wf/lib/ ./
(3)修改配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-apps/cron/job.properties。

nameNode=hdfs://hadoop-senior.ibeifeng.com:8020
jobTracker=hadoop-senior.ibeifeng.com:8032
queueName=default
oozieAppsRoot=user/beifeng/oozie-apps
oozieDataRoot=user/beifeng/oozie/datas

oozie.coord.application.path=${nameNode}/${oozieAppsRoot}/cron
start=2018-07-19T21:42+0800
end=2018-07-19T21:45+0800
workflowAppUri=${nameNode}/${oozieAppsRoot}/cron

inputDir=mr-wordcount-wf
outputDir=mr-wordcount-wf

(4)修改配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-apps/cron/coordinator.xml。

<coordinator-app name="cron-coord-mr" frequency="0/2 * * * *" start="${start}" end="${end}" timezone="GMT+0800"
                 xmlns="uri:oozie:coordinator:0.4">
        <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>
            </configuration>
        </workflow>
    </action>
</coordinator-app>

(5)将之前的mapreduce示例程序的workflow.xml拷贝过来。
cron]$ rm -rf ./workflow.xml
cron]$ cp ../mr-wordcount-wf/workflow.xml .
修改配置文件/opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie-apps/cron/workflow.xml。

<workflow-app xmlns="uri:oozie:workflow:0.5" name="mr-wordcount-wf">
    <start to="mr-node-wordcount"/>
    <action name="mr-node-wordcount">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="${nameNode}/${oozieDataRoot}/${outputDir}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.mapper.new-api</name>
                    <value>true</value>
                </property>
                <property>
                    <name>mapred.reducer.new-api</name>
                    <value>true</value>
                </property>
                <property>
                    <name>mapreduce.job.queuename</name>
                    <value>${queueName}</value>
                </property>
                <property>
                    <name>mapreduce.job.map.class</name>
                    <value>com.ibeifeng.hadoop.senior.mapreduce.WordCount$WordCountMapper</value>
                </property>
                <property>
                    <name>mapreduce.job.reduce.class</name>
                    <value>com.ibeifeng.hadoop.senior.mapreduce.WordCount$WordCountReducer</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>
                <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>

                <property>
                    <name>mapreduce.input.fileinputformat.inputdir</name>
                    <value>${nameNode}/${oozieDataRoot}/${inputDir}</value>
                </property>
                <property>
                    <name>mapreduce.output.fileoutputformat.outputdir</name>
                    <value>${nameNode}/${oozieDataRoot}/${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>
相关推荐
最新评论 (0)
返回
发表文章
gongxifacaibelieve
文章数
313
评论数
0
注册排名
658062