大数据Hadoop之——任务调度器Oozie(Oozie环境部署)

article/2025/9/16 21:59:28

文章目录

    • 一、概述
    • 二、Oozie架构
    • 三、Oozie环境部署(Oozie与CDH集成)
      • 1)添加服务
      • 2)将 Oozie 服务添加到 CDH
      • 3)自定义角色分配
      • 4)数据库设置
      • 5)审核更改
      • 6)开始自动安装并自启
    • 四、CDH的 Hue 整合 Oozie
    • 五、Oozie简单使用
      • 1)在Hue上操作Oozie
        • 1、利用 Hue 调度 shell 脚本
        • 2、利用 Hue 调度 hive 脚本
        • 3、 利用 Hue 配置定时调度任务
      • 2)CLI操作Oozie
        • 1、CLI 调度 shell 脚本
        • 2、执行多个任务job
        • 3、调度MR任务
        • 4、调度定时任务
      • 3)Java API操作Oozie
    • 六、常用命令
    • 七、Oozie与Azkaban对比

一、概述

Oozie是一个基于工作流引擎的开源框架,依赖于MapReduce来实现,是一个管理 Apache Hadoop 作业的工作流调度系统。是由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。

官网:https://oozie.apache.org/
官方文档:https://oozie.apache.org/docs/5.2.1/index.html
安装包下载地址:https://dlcdn.apache.org/oozie/5.2.1/
github源码地址:https://github.com/apache/oozie.git

Oozie的特点:

  • Oozie是管理hadoop作业的调度系统;
  • Oozie的工作流作业是一系列动作的有向无环图(DAG)
  • Oozie协调作业是通过时间(频率)和有效数据触发当前的Oozie工作流程;
  • 工作流通过hPDL定义(一种XML流程定义语言);
  • 资源文件(脚本、jar包等)存放在HDFS
  • Oozie支持各种hadoop作业,例如:java map-reduce、Streaming map-reduce、pig、hive、sqoop和distcp等等,也支持系统特定的作业,例如java程序和shell脚本;
  • Oozie是一个可伸缩,可靠和可拓展的系统。

二、Oozie架构

在这里插入图片描述
在这里插入图片描述

Oozie三层结构:

  • Workflow:工作流,由我们需要处理的每个工作组成,进行需求的流式处理,是对要进行的顺序化工作的抽象。
    1. 控制节点(CONTROL NODE):控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill等。以及提供工作流的执行路径机制,如decision, fork, join等。
    2. 动作节点(ACTION NODE) : 负责执行具体动作的节点,比如:拷贝文件,执行某个hive、shell、sqoop、pig、mr等等。

流程图如下:
在这里插入图片描述

  • Coordinator:协调器,可以理解为工作流的协调器,可以将多个工作流协调成一个工作流来进行处理,是对要进行的顺序化的workflow的抽象,定时触发一个workflow。流程图如下:
    在这里插入图片描述- Bundle:捆,束。将一堆的coordinator进行汇总处理,是对一堆coordiantor的抽象,用来绑定多个coordinator或者多个workflow,流程图如下:在这里插入图片描述

三、Oozie环境部署(Oozie与CDH集成)

一般Oozie是集成到CDH上使用的,所以这里部署就通过CM去部署了,没有部署CDH的小伙伴,可以参考我之前的文章:大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)

1)添加服务

在这里插入图片描述
在这里插入图片描述

2)将 Oozie 服务添加到 CDH

在这里插入图片描述

3)自定义角色分配

在这里插入图片描述

4)数据库设置

还在是在大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)这篇文章初始化的配置。
在这里插入图片描述
在这里插入图片描述

5)审核更改

默认就行,当然可以自行修改
在这里插入图片描述

6)开始自动安装并自启

在这里插入图片描述
在这里插入图片描述
到这里Oozie服务就安装完成了。

四、CDH的 Hue 整合 Oozie

由于oozie的xml配置执行各种任务调度是在太过于繁琐,所有一般都使用hue整合oozie来使用。

修改配置
在这里插入图片描述
重启Hue服务
在这里插入图片描述
重新登录Hue web
在这里插入图片描述
发现多了计划程序,这就是Oozie的计划程序
在这里插入图片描述

五、Oozie简单使用

1)在Hue上操作Oozie

1、利用 Hue 调度 shell 脚本

1、创建workflow
在这里插入图片描述
在这里插入图片描述
2、查看workflow
在这里插入图片描述
3、配置调用任务

这里选择shell脚本,很多选择

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存
在这里插入图片描述
4、立即执行
在这里插入图片描述
在这里插入图片描述
发现报错了

WARN org.apache.oozie.command.wf.ActionStartXCommand: SERVER[hadoop-cdhslave02-168-182-163] USER[admin] GROUP[-] TOKEN[] APP[myworkflow001] JOB[0000003-220423133048789-oozie-oozi-W] ACTION[0000003-220423133048789-oozie-oozi-W@shell-52b4] Error starting action [shell-52b4]. ErrorType [TRANSIENT], ErrorCode [JA009], Message [JA009: Invalid resource request! Cannot allocate containers as requested resource is greater than maximum allowed allocation. Requested resource type=[memory-mb], Requested resource=<memory:2048, vCores:1>, maximum allowed allocation=<memory:1024, vCores:4>, please note that maximum allowed allocation is calculated by scheduler based on maximum resource of registered NodeManagers, which might be less than configured maximum allocation=<memory:1024, vCores:4>

原因是 yarn配置的最大容器申请资源是1024M,oozie配置的启动资源要2048M,在CM中修改oozie的相关配置。
在这里插入图片描述
重启服务后重新执行
在这里插入图片描述
再去看Yarn任务
在这里插入图片描述
其实这里只是加了一个任务,其实可以加很多任务,接下来就可自行扩展了

2、利用 Hue 调度 hive 脚本

sql文件

create database test001;
CREATE TABLE  IF NOT EXISTS test001.person_1 (
id INT COMMENT 'ID',
name STRING COMMENT '名字',
age INT COMMENT '年龄',
likes ARRAY<STRING> COMMENT '爱好',
address MAP<STRING,STRING> COMMENT '地址'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';

在这里插入图片描述
跟前面的步骤一样,只是调度的任务不同和脚本不同而已,这里就不再过多截图介绍了。
在这里插入图片描述
通过beeline连接hive检查

$ beeline -u jdbc:hive2://hadoop-cdhmaster-168-182-161:10000  -n root
show databases;
show tables from test001;

在这里插入图片描述
当然也对应有个yarn任务
在这里插入图片描述

3、 利用 Hue 配置定时调度任务

在这里插入图片描述
选择workflow
在这里插入图片描述
在这里插入图片描述

【温馨提示】一定要注意时区的问题,否则调度就出错了。保存之后就可以提交定时任务。

提交Schedule
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)CLI操作Oozie

Oozie 提供了一个命令行实用程序oozie来执行作业和管理任务。所有操作都是通过oozie CLI 的子命令完成的。

一个Oozie 的 job 一般由以下文件组成:

  • job.properties :记录了job的属性
  • workflow.xml :使用hPDL 定义任务的流程和分支
  • 脚本文件/lib目录:用来执行具体的任务的文件

job.properties

key含义
nameNodeHDFS地址
jobTrackerjobTracker(ResourceManager)地址
queueNameOozie队列(默认填写default)
examplesRoot全局目录(默认填写examples)
oozie.usr.system.libpath是否加载用户lib目录(true/false)
oozie.libpath用户lib库所在的位置
oozie.wf.application.pathOozie流程所在hdfs地址(workflow.xml所在的地址)
user.name当前用户
oozie.coord.application.pathCoordinator.xml地址(没有可以不写)
oozie.bundle.application.pathBundle.xml地址(没有可以不写)

【温馨提示】这个文件如果是在本地通过命令行进行任务提交的话,这个文件在本地就可以了,当然也可以放在hdfs上,与workflow.xml和lib处于同一层级。nameNodejobTrackeroozie.wf.application.path在hdfs中的位置必须设置。

1、CLI 调度 shell 脚本

oozie官方提供的oozie-examples.tar.gz
这个包里也有:https://dlcdn.apache.org/oozie/5.2.1/oozie-5.2.1.tar.gz

$ tar -xf oozie-examples.tar.gz
$ cd examples/apps/
$ ll

很多示例,这里只演示几个,其余的小伙伴可以自行练习一下
在这里插入图片描述
进入到shell的示例目录,发现有两个配置文件job.propertiesworkflow.xml

$ cd shell

修改job.properties

# 配置hdfs,地址记得改成自己环境的
nameNode=hdfs://hadoop-cdhslave01-168-182-162:8020
# 配置yarn,8088是web端口,8032是yarn的服务端口号
resourceManager=hadoop-cdhslave01-168-182-162:8032
queueName=default
examplesRoot=examples# HDFS脚本文件存放目录
oozie.wf.application.path=${nameNode}/user/${user.name}/workflow/shell# 定义脚本变量,也可以直接写脚本名字
shellScript=helloworld.sh

修改workflow.xml

默认是echo输出,这里修改成执行脚本

<workflow-app xmlns="uri:oozie:workflow:1.0" name="shell-wf"><start to="shell-node"/><action name="shell-node"><shell xmlns="uri:oozie:shell-action:1.0"><resource-manager>${resourceManager}</resource-manager><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><exec>${shellScript}</exec><file>/user/oozie/workflow/shell/${shellScript}#${shellScript}</file><capture-output/></shell><ok to="end"/><error to="fail"/></action><kill name="fail"><message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><kill name="fail-output"><message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message></kill><end name="end"/>
</workflow-app>

脚本:helloworld.sh

#!/bin/bash
echo `date` " hello world" >> /tmp/helloworld.log

可以在job.properties定义一个变量,在workflow.xml中使用变量
把三个文件都上传到/user/oozie/workflow/shell/目录下

$ sudo -u oozie hadoop fs -mkdir -p /user/oozie/workflow/shell/
$ sudo -u oozie hadoop fs -put * /user/oozie/workflow/shell/

在这里插入图片描述
立即执行任务

$ sudo -u oozie /usr/bin/oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie/ -config job.properties -run

在这里插入图片描述

Oozie web UI查看,登录web时,发现有问题
在这里插入图片描述

Oozie web console is disabled.
To enable Oozie web console install the Ext JS library.
Refer to Oozie Quick Start documentation for details.

【Oozie web console is disabled 问题解决】

$ find /opt/ -name libext
$ cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/oozie/libext
$ wget http://archive.cloudera.com/gplextras/misc/ext-2.2.zip
$ sudo unzip ext-2.2.zip
$ sudo chown oozie:oozie -R ext-2.2

执行成功了
在这里插入图片描述
再去看一下yarn任务
在这里插入图片描述

2、执行多个任务job

$ cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/share/doc/oozie-5.1.0+cdh6.3.2/examples/apps
# copy一份shell文件
$ cp -r shell shell02
$ cd shell02

新建一个shell脚本,test02.sh

#!/bin/bash
echo "test mutil workflow" >> /tmp/test02.log

修改job.properties

# 配置hdfs,地址记得改成自己环境的
nameNode=hdfs://hadoop-cdhslave01-168-182-162:8020
# 配置yarn,8088是web端口,8032是yarn的服务端口号
resourceManager=hadoop-cdhslave01-168-182-162:8032
queueName=default
examplesRoot=examples# HDFS脚本文件存放目录
oozie.wf.application.path=${nameNode}/user/${user.name}/workflow/shell# 定义脚本变量,也可以直接写脚本名字
shellScript=helloworld.sh
# 新增一个脚本变量
shellScript02=test02.sh

修改workflow.xml,新增一个action

<workflow-app xmlns="uri:oozie:workflow:1.0" name="shell-wf"><start to="shell-node01"/><action name="shell-node01"><shell xmlns="uri:oozie:shell-action:1.0"><resource-manager>${resourceManager}</resource-manager><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><exec>${shellScript}</exec><file>/user/oozie/workflow/shell/${shellScript}#${shellScript}</file><capture-output/></shell><ok to="shell-node02"/><error to="fail"/></action><action name="shell-node02"><shell xmlns="uri:oozie:shell-action:1.0"><resource-manager>${resourceManager}</resource-manager><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><exec>${shellScript02}</exec><file>/user/oozie/workflow/shell/${shellScript02}#${shellScript02}</file><capture-output/></shell><ok to="end"/><error to="fail"/></action><kill name="fail"><message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><kill name="fail-output"><message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message></kill><end name="end"/>
</workflow-app>

强制覆盖

$ sudo -u oozie hadoop fs -put -f * /user/oozie/workflow/shell/

执行任务

$ sudo -u oozie /usr/bin/oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie/ -config job.properties -run

在这里插入图片描述
在这里插入图片描述

3、调度MR任务

直接使用官方模板修改(wordcount示例)

$ cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/share/doc/oozie-5.1.0+cdh6.3.2/examples/apps/map-reduce
$ ll
$ tree lib/

在这里插入图片描述
先用传统方式验证一把

$ cat>./wordcount.txt<< EOF
hello oozie
hello hadoop
hadoo oozie
hello world
hello bigdata
bigdata hadoop
hello flink
EOF
$ sudo -u hdfs hadoop fs -put wordcount.txt /
# 找到hadoop-mapreduce-examples*.jar包
$ find /opt/ -name hadoop-mapreduce-examples*.jar
$ sudo -u hdfs yarn jar /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/hadoop-mapreduce-examples-3.0.0-cdh6.3.2.jar wordcount /wordcount.txt /out

在这里插入图片描述
配置workflow.xml

先在上面的跑的任务中查找map类和reduce
在这里插入图片描述
在这里插入图片描述
map类
在这里插入图片描述
reduce类
在这里插入图片描述

修改后的workflow.xml内容如下:

<workflow-app xmlns="uri:oozie:workflow:1.0" name="map-reduce-wf"><start to="mr-node"/><action name="mr-node"><map-reduce><resource-manager>${resourceManager}</resource-manager><name-node>${nameNode}</name-node><prepare><delete path="${nameNode}/user/oozie/workflow/map-reduce/output/"/></prepare><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property><!-- 配置MR调度任务时,设置使用新的API--><property><name>mapred.mapper.new-api</name><value>true</value></property><property><name>mapred.reducer.new-api</name><value>true</value></property><!-- 指定job key输出类型 --><property><name>mapreduce.job.output.key.class</name><value>org.apache.hadoop.io.Text</value></property><!-- 指定job value输出类型 --><property><name>mapreduce.job.output.value.class</name><value>org.apache.hadoop.io.IntWritable</value></property><!-- 指定输入路径 --><property><name>mapred.input.dir</name><value>/user/oozie/workflow/map-reduce/wordcount.txt</value></property><!-- 指定输出路径 --><property><name>mapred.output.dir</name><value>/user/oozie/workflow/map-reduce/output/</value></property><!-- 指定map类 --><property><name>mapreduce.job.map.class</name><value>org.apache.hadoop.examples.WordCount$TokenizerMapper</value></property><!-- 指定reduce类 --><property><name>mapreduce.job.reduce.class</name><value>org.apache.hadoop.examples.WordCount$IntSumReducer</value></property><property><name>mapred.map.tasks</name><value>1</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>

修改job.properties,内容如下:

# 配置hdfs,地址记得改成自己环境的
nameNode=hdfs://hadoop-cdhslave01-168-182-162:8020
# 配置yarn,8088是web端口,8032是yarn的服务端口号
resourceManager=hadoop-cdhslave01-168-182-162:8032
queueName=default
examplesRoot=examplesoozie.wf.application.path=${nameNode}/user/${user.name}/workflow/map-reduce/workflow.xml# 定义脚本变量,也可以直接写脚本名字
outputDir=map-reduce

换掉lib下面的jar包,使用新API

$ cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/share/doc/oozie-5.1.0+cdh6.3.2/examples/apps
$ cp /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/hadoop-mapreduce-examples-3.0.0-cdh6.3.2.jar map-reduce/lib/
$ rm -f map-reduce/lib/oozie-examples-5.1.0-cdh6.3.2.jar

把map-reduce目录推到HDFS上

$ sudo -u oozie hadoop fs -put -f map-reduce /user/oozie/workflow/

在这里插入图片描述
执行任务

$ sudo -u oozie /usr/bin/oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie/ -config map-reduce/job.properties -run

登录Oozie web UI:http://hadoop-cdhslave02-168-182-163:11000/oozie/
在这里插入图片描述
登录yarn web查看任务
在这里插入图片描述

4、调度定时任务

$ cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/share/doc/oozie-5.1.0+cdh6.3.2/examples/apps
$ cd cron

修改job.properties,内容如下:

nameNode=hdfs://hadoop-cdhslave01-168-182-162:8020
resourceManager=hadoop-cdhslave01-168-182-162:8032
queueName=default
examplesRoot=examplesoozie.coord.application.path=${nameNode}/user/${user.name}/workflow/cron
# start必须设置未来时间,否则任务会失败
start=2022-04-27T23:30Z
end=2022-04-29T01:00Z
workflowAppUri=${nameNode}/user/${user.name}/workflow/cron
shellScript=test001.sh

修改workflow.xml,其实也是上面第一个示例

<workflow-app xmlns="uri:oozie:workflow:1.0" name="shell-wf"><start to="shell-node"/><action name="shell-node"><shell xmlns="uri:oozie:shell-action:1.0"><resource-manager>${resourceManager}</resource-manager><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><exec>${shellScript}</exec><file>/user/oozie/workflow/cron/${shellScript}#${shellScript}</file><capture-output/></shell><ok to="end"/><error to="fail"/></action><kill name="fail"><message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><kill name="fail-output"><message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message></kill><end name="end"/>
</workflow-app>

修改coordinator.xml,内容如下:

frequency频率最低五分钟,时区调整为中国时区

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

把cron整个目录推送到HDFS

$ cd ..
$ sudo -u oozie hadoop fs -put cron /user/oozie/workflow/

执行

$ sudo -u oozie /usr/bin/oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie/ -config cron/job.properties -run

3)Java API操作Oozie

1、编辑好shell脚本和workflow.xml文件

$ mkdir -p /opt/test/oozie/workflow/shell
$ vi /opt/test/oozie/workflow/shell/ooziehello.sh
#!/bin/bash
name=$1
echo "hello $name" >> /tmp/oozieshell.log$ vi /opt/test/oozie/workflow/shell/workflow.xml
<workflow-app xmlns="uri:oozie:workflow:1.0" name="shell-wf"><start to="shell-node"/><action name="shell-node"><shell xmlns="uri:oozie:shell-action:1.0"><resource-manager>${resourceManager}</resource-manager><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><exec>${shellScript}</exec><file>/user/oozie/workflow/oozieshell/${shellScript}#${shellScript}</file><capture-output/></shell><ok to="end"/><error to="fail"/></action><kill name="fail"><message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><kill name="fail-output"><message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message></kill><end name="end"/>
</workflow-app>

3、把上面两个文件上传到HDFS

$ sudo -u oozie hadoop fs -mkdir /user/oozie/workflow/oozieshell/
$ sudo -u oozie hadoop fs -put * /user/oozie/workflow/oozieshell/

4、代码执行提交任务

package com.bigdata;/*** workflow shell test*/import org.apache.oozie.client.OozieClient;
import org.apache.oozie.client.WorkflowAction;
import org.apache.oozie.client.WorkflowJob;
import java.util.List;
import java.util.Properties;public class WorkFlowShellTest {public static void main(String[] args) {System.setProperty("user.name", "oozie");OozieClient oozieClient = new OozieClient("http://hadoop-cdhslave02-168-182-163:11000/oozie/");try {System.out.println(oozieClient.getServerBuildVersion());Properties properties = oozieClient.createConfiguration();properties.put("oozie.wf.application.path", "${nameNode}/user/${user.name}/workflow/oozieshell");properties.put("queueName", "default");properties.put("nameNode", "hdfs://hadoop-cdhslave01-168-182-162:8020");properties.put("resourceManager", "hadoop-cdhslave01-168-182-162:8032");properties.put("shellScript", "ooziehello.sh");properties.put("argument", "oozie");//运行workflowString jobid = oozieClient.run(properties);System.out.println("jobid:" + jobid);//根据workflow id获取作业运行情况WorkflowJob workflowJob = oozieClient.getJobInfo(jobid);//获取作业日志System.out.println(oozieClient.getJobLog(jobid));//获取workflow中所有ACTIONList<WorkflowAction> list = workflowJob.getActions();for (WorkflowAction action : list) {//输出每个Action的 Appid 即Yarn的Application IDSystem.out.println(action.getExternalId());}} catch (Exception e) {e.printStackTrace();}}
}

在这里插入图片描述
在这里插入图片描述
其它的示例也类似,就是把之前的job.properties,用java格式加载,运行,查询,其它都一样。所以其它示例就由小伙伴自行练习了。

六、常用命令

# 启动
$ oozied.sh start
# 停止
$ oozied.sh stop
# 提交任务并启动任务(submit和start命令合并)
$ oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie -config job.properties –run
# 提交任务不启动
$ oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie -config job.properties –submit
# 启动任务
$ oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie -start 0001837-220423150913947-oozie-oozi-W### workflow任务
# 查看所有workflow任务
$ oozie jobs
# 查看信息
$ oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie -info 0001837-220423150913947-oozie-oozi-W
# 查看日志
$ oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie -log 0001837-220423150913947-oozie-oozi-W
# Kill任务
$ oozie job -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie/ -kill 0001831-220423150913947-oozie-oozi-W
# 或者下面这句
$ oozie job -kill 0001831-220423150913947-oozie-oozi-W### coordinator 定时任务
# 查看定时任务
$ oozie jobs -jobtype coordinator -oozie http://hadoop-cdhslave02-168-182-163:11000/oozie/
$ oozie jobs -jobtype coordinator
# 删除定时任务
$ oozie job -kill 0000345-220423150913947-oozie-oozi-C

七、Oozie与Azkaban对比

对比指标AzkabanOozie
功能Azkaban与Oozie均可以调度mapreduce、pig、java脚本工作流任务;Azkaban与Oozie均可以定时执行工作流任务。与Azkaban 一样
工作流传参Azkaban支持直接传参,例如${input}。Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}。
定时执行Azkaban的定时执行任务是基于时间的。Oozie的定时执行任务是基于时间和输入数据资源管理。
工作流执行Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同⼀台节点)和multi server mode(executor server和web server可以部署在不同节点)。Oozie作为工作流服务运行,支持多用户和多工作流。

综上所述,Oozie相比Azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂(xml)。如果可以不在意某些功能的缺失,轻量级调度Azkaban是很不错的候选对象。所以如果不是用CDH,还是使用Azkaban方便简单~

关于Azkaban,可以参考我之前的文章:
大数据Hadoop之——任务调度器Azkaban(Azkaban环境部署)
大数据Hadoop之——Azkaban API详解

关于Oozie的概述和简单使用就到这结束了,如果小伙伴有疑问,欢迎给我留言,未完待续,请耐心等待~


http://chatgpt.dhexx.cn/article/aGNWiat6.shtml

相关文章

Java并发编程(一):多线程与并发原理回顾

今天来聊一聊经典的Java技术&#xff0c;并发编程。并发是程序的灵魂&#xff0c;一个优秀的Java程序一定会支持高并发&#xff0c;并且&#xff0c;并发编程也是面试环节中经常会问到的一个问题&#xff0c;那么今天我们以一道经典的Java面试题回顾一下Java的并发编程。废话不…

java并发编程的艺术和并发编程这一篇就够了

java并发编程的艺术(精华提炼) 通常我们在使用编发编程时,主要目的是为了程序能够更快的处理,但是并不是说更多的线程就一定能够让程序变得足够快,有时候太多的线程反而消耗了更多的资源,反而让程序执行得更缓慢 一.CPU的上下文切换 就算是单核CPU是能够处理多线程任务的,它只…

JAVA并发编程总结

一、基础知识 1.1 线程安全 当多个线程访问某个类时&#xff0c;这个类始终都能表现出正确的行为&#xff0c;那么就称这个类是线程安全的。 CAP理论 原子性 我们把一个或者多个操作在CPU执行的过程中不被中断的特性称为原子性. 可见性 当一个线程修改了对象状态后&#xf…

Java并发:整理自《Java并发编程实战》和《Java并发编程的艺术》

声明&#xff1a;Java并发的内容是自己阅读《Java并发编程实战》和《Java并发编程的艺术》整理来的。 图文并茂请戳 思维导图下载请戳 目录 (1)基础概念 (2)线程 (3)锁 (4)同步器 (5)并发容器和框架 (6)Java并发工具类 (7)原子操作类 (8)Executor框架(执行机制) (9)…

Java并发编程的艺术-并发编程基础

Java从诞生开始就明智地选择了内置对多线程的支持&#xff0c;这使得Java语言相比同一时期的其他语言具有明显的优势。线程作为操作系统调度的最小单元&#xff0c;多个线程能够同时执行&#xff0c;这将显著提升程序性能&#xff0c;在多核环境中表现得更加明显。但是&#xf…

java并发编程(下篇)

java里的阻塞队列 ArrayBlockingQueue 数组结构组成的有界阻塞队列 LinkedBlockingQeque 链表结构的无界阻塞队列 PriorityBlockingQueue 支持优先级排序的无界阻塞队列 DelayQueue 使用优先级队列实现的无界阻塞队列 LinkedBlockingDeque 链表结构组成的双向队列 并发工具…

Java并发编程之美——第一章 Java并发编程基础

文章目录 Time 2021-12-26——Hireek什么是线程线程的等待和通知等待线程终止的join方法让线程睡眠的sleep方法让出CPU执行权的yield方法线程中断demo 线程上下文切换线程死锁什么是死锁如何避免死锁 用户线程与守护线程ThreadLocalintroduction&#xff0c;下文只阐述重要的se…

Java并发编程入门这一篇就够了(文章很长,但很好哦)

Java并发编程入门这一篇就够了 一、进程与线程1. 进程2. 线程3. 二者对比 二、并行与并发三、Java线程1. 创建和运行线程2. 线程运行原理3. 常见方法4. 常用方法详解及异同区分5. 两阶段终止模式&#xff08;使得线程优雅的退出&#xff09;6.主线程与守护线程7. 线程五种状态8…

Java并发编程之Java线程

文章目录 前言01、线程简介02、线程池03、线程间通信总结 前言 记录一下Java并发编程的知识点。有部分内容是借鉴《Java并发编程的艺术》这本书的。本次先介绍一下线程。 01、线程简介 进程和线程的区别 进程&#xff1a;当一个程序被运行&#xff0c;即把程序的代码从磁盘加载…

Java并发编程的艺术

1、并发编程的挑战 1、上下文切换 CPU通过给每个线程分配CPU时间片来实现多线程机制。时间片是CPU分配给各个线程的时间&#xff0c;这个时间非常短&#xff0c;一般是几十毫秒。 CPU通过时间片分配算法来循环执行任务&#xff0c;当前任务执行一个时间片后会切换到下一个任务…

Java并发编程简介

并发编程简介 1. 什么是并发编程 所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在在同一实体上的多个事件。多个事件在同一时间间隔发生。 并发编程 ①从程序设计的角度来讲&#xff0c;是希望通过某些机制让计算机可以在一个时间段内&#xff0c;执行多个任务…

【java】Java并发编程系列-基础知识(非常详细哦)

文章目录 一、Java并发编程基础1.1 并发编程基本概念1.1.1原⼦性1.1.2 可⻅性1.1.3 有序性 二、内存模型三、重排序四、内存屏障五、总结 一、Java并发编程基础 主要讲解Java的并发编程的基础知识&#xff0c;包括原⼦性、可⻅性、有序性&#xff0c;以及内存模型JMM&#xff…

理解Java并发编程

计算机基础 要想理解Java多线程&#xff0c;一定离不开计算机组成原理和操作系统&#xff0c;因为&#xff0c;java的多线程是JVM虚拟机调用操作系统的线程来实现的 /*Thread.start() 方法中调用了原生的start0()方法 */ public synchronized void start() {if (threadStatus…

【并发编程】JAVA并发编程面试题合集

1.在Java中守护线程和本地线程的区别&#xff1f; Java中的线程分为两种&#xff1a;守护线程&#xff08;Daemon&#xff09;和用户线程&#xff08;User&#xff09;任何线程都可以设置为守护线程和用户线程&#xff0c;通过方法Thread.setDaemon(boolean)&#xff1b;true表…

Java并发编程概述

在学习并发编程之前&#xff0c;我们需要稍微回顾以下线程相关知识&#xff1a; 线程基本概念 程序&#xff1a;静态的代码&#xff0c;存储在硬盘中 进程&#xff1a;运行中的程序&#xff0c;被加载在内存中&#xff0c;是操作系统分配内存的基本单位 线程&#xff1a;是cpu执…

java并发编程(并发编程的三个问题)

什么是并发编程? 首先我们要知道什么是并发? 什么是并行? 并行: 多件事情在同一时刻同时发生 并发: 在同一时间内,多个事情交替执行 并发编程: 比如抢票,秒杀等在同一场景下,有大量的请求访问同一资源, 会出现一些安全性的问题,所以要通过编程来控制多个线程依次访问资源,称…

java并发编程(荣耀典藏版)

大家好 我是月夜枫&#xff0c;聊一聊java中的并发编程&#xff0c;面试工作中也许都会用到&#xff0c;参考了很大博主的博客&#xff0c;整理了很久的文章&#xff0c;虽然还没有全部整理完&#xff0c;后续慢慢更新吧。 并发编程 一、线程的基础概念 一、基础概念 1.1 进…

Java并发编程基础(一篇入门)

1 并发编程简介 1.1 什么是并发编程 所谓并发编程是指在一台处理器上 “同时” 处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。 并发编程&#xff0c;从程序设计的角度来说&#xff0c;是希望通过某些机制让计算机可以在一个时间段内&#xff0…

关于Java并发编程的总结和思考

编写优质的并发代码是一件难度极高的事情。Java语言从第一版本开始内置了对多线程的支持&#xff0c;这一点在当年是非常了不起的&#xff0c;但是当我们对并发编程有了更深刻的认识和更多的实践后&#xff0c;实现并发编程就有了更多的方案和更好的选择。本文是对并发编程的一…

Java 并发编程

目录 回顾线程 并发编程 并发编程 Java 内存模型(JMM) 编程核心问题--可见性,原子性,有序性 可见性 有序性 原子性 valatile 关键字 CAS&#xff08;Compare-And-Swap&#xff0c;比较并交换&#xff09; 原子类 java中的锁 乐观锁/悲观锁 可重用锁&#xff08;…