大數據Hadoop之——任務調度器Oozie(Oozie環境部署)

来源:https://www.cnblogs.com/liugp/archive/2022/05/21/16295768.html
-Advertisement-
Play Games

一、概述 Oozie是一個基於工作流引擎的開源框架,依賴於MapReduce來實現,是一個管理 Apache Hadoop 作業的工作流調度系統。是由Cloudera公司貢獻給Apache的,它能夠提供對Hadoop MapReduce和Pig Jobs的任務調度與協調。Oozie需要部署到Java ...


目錄

一、概述

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[[email protected]] 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 含義
nameNode HDFS地址
jobTracker jobTracker(ResourceManager)地址
queueName Oozie隊列(預設填寫default)
examplesRoot 全局目錄(預設填寫examples)
oozie.usr.system.libpath 是否載入用戶lib目錄(true/false)
oozie.libpath 用戶lib庫所在的位置
oozie.wf.application.path Oozie流程所在hdfs地址(workflow.xml所在的地址)
user.name 當前用戶
oozie.coord.application.path Coordinator.xml地址(沒有可以不寫)
oozie.bundle.application.path Bundle.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=examples

oozie.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=examples

oozie.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");
            //運行workflow
            String jobid = oozieClient.run(properties);
            System.out.println("jobid:" + jobid);
            //根據workflow id獲取作業運行情況
            WorkflowJob workflowJob = oozieClient.getJobInfo(jobid);
            //獲取作業日誌
            System.out.println(oozieClient.getJobLog(jobid));
            //獲取workflow中所有ACTION
            List<WorkflowAction> list = workflowJob.getActions();
            for (WorkflowAction action : list) {
                //輸出每個Action的 Appid 即Yarn的Application ID
                System.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對比

對比指標 Azkaban Oozie
功能 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的概述和簡單使用就到這結束了,如果小伙伴有疑問,歡迎給我留言,未完待續,請耐心等待~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 常見的ORM技術(比如:Entity Framework,Dapper,SqlSugar,NHibernate,等…),它們不是在做Sql語句的程式化變種,就是在做Sql語句的面向對象化。雖然有“邏輯較清晰”、“統一異質資料庫Sql語法差異”的優勢,但它們的缺點也顯而易見: (1) 把簡單... ...
  • 本地化資源文件創建 前期準備 Visual Studio 搜索並安裝擴展插件 ResXManager 在項目內 Properties 文件夾內添加新建項 資源文件 Resource.resx 手動重新編譯項目,然後 Resource.resx 右鍵菜單 → 在 ResX Manager 中打開 打開 ...
  • #Redis簡介 Redis(Remote Dictionary Server)是完全開源的、遵守BSD協議的、高性能的Key-Value資料庫。 Redis與其他Key-Value緩存產品有一下三個特點: Redis支持數據的持久化,可以將記憶體中的數據保存在磁碟中,重啟的時候可以再次載入進行使用。 ...
  • 不久前,為了滿足工作中日常的各種實驗測試需求,終於按需求組裝一臺塔式的server T440。但是沒有多久就出現些問題,以下大概是問題和現象簡單描述: (1). 最開始時,沒幾天就出現自動重啟的問題,當時也正好做了一個比較消耗資源的大集群的實驗,當時初步判斷可能是記憶體資源不夠(實際按監控來看,並沒使 ...
  • 如何實現硬體和軟體的統一? 或者說如何把物理世界與電子學和電腦科學聯繫起來的? 寫在前面: 我一直覺得萬事萬物之間都是有聯繫的,我們現在所說的科學,有個這樣的解釋:科學科學,分科而學。以前的那些偉大的科學家們為了更好的理解這個世界,故而把物理世界進行了多層次、多維度的劃分。 今天在一個講座上,有個 ...
  • head head 命令可用於查看文件的開頭部分的內容,有一個常用的參數 -n 用於顯示行數,預設為 10,即顯示 10 行的內容。 命令格式: head [參數] [文件] 參數: -q或--quiet或--silent 不顯示包含給定文件名的文件頭即隱藏文件名。 -v或--verbose 總是顯 ...
  • 出現mysqld: Can't create directory 'D:\Environment\mysql-5.7.37 \data' (Errcode: 2 - No such file or directory)極大原因是my.ini的配置有問題 my.ini配置 [mysqld] based ...
  • 分享嘉賓:牟娜 阿裡巴巴 高級演算法工程師 編輯整理:孫鍇 內容來源:DataFun AI Talk《定向廣告新一代點擊率預估主模型——深度興趣演化網路》 出品社區:DataFun 導讀: 本次帶給大家分享是阿裡媽媽在2018年做的模型上的創新——深度興趣演化網路(Deep Interest Evol ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文將以 C# 語言來實現一個簡單的布隆過濾器,為簡化說明,設計得很簡單,僅供學習使用。 感謝@時總百忙之中的指導。 布隆過濾器簡介 布隆過濾器(Bloom filter)是一種特殊的 Hash Table,能夠以較小的存儲空間較快地判斷出數據是否存在。常用於允許一定誤判率的數據過濾及防止緩存 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 「簡單有價值的事情長期堅持做」 這是成功最簡單,但也最難學的秘訣。不經過訓練,人很難意識到時間複利的威力。 仙劍奇俠傳的「十里坡劍神」和金庸群俠傳的「十級野球拳」,就是簡單的事情持之以恆反覆做,最後就有巨大的威力 唐家三少成為網文收入第一,最重要的一步是十四年從未斷日更 這樣的案例很多,一開始可能成 ...
  • 迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“我愛加班”。 面試開始,直入正題。 面試官: 看你簡歷上面寫著精通MySQL,我先問你事務的特性是什麼? 老生常談,這個還有誰不會背的嗎? 我: ...
  • 基礎知識 python是一門腳本語言,它是解釋執行的。 python使用縮進做為語法,而且python2環境下同一個py文件中不能同時存在tab和空格縮進,否則會出錯,建議在IDE中顯示縮進符。 python在聲明變數時不寫數據類型,可以type(xx)來獲取欄位的類型,然後可以int(),list ...
  • 為什麼要多線程下載 俗話說要以終為始,那麼我們首先要明確多線程下載的目標是什麼,不外乎是為了更快的下載文件。那麼問題來了,多線程下載文件相比於單線程是不是更快? 對於這個問題可以看下圖。 橫坐標是線程數,縱坐標是使用對應線程數下載對應文件時花費的時間,藍橙綠代表下載文件的大小,每個線程下載對應文件2 ...
  • 詳細講解python爬蟲代碼,爬微博搜索結果的博文數據。 爬取欄位: 頁碼、微博id、微博bid、微博作者、發佈時間、微博內容、轉發數、評論數、點贊數。 爬蟲技術: 1、requests 發送請求 2、datetime 時間格式轉換 3、jsonpath 快速解析json數據 4、re 正則表達式提... ...
  • 背景: 一般我們可以用HashMap做本地緩存,但是HashMap功能比較弱,不支持Key過期,不支持數據範圍查找等。故在此實現了一個簡易的本地緩存,取名叫fastmap。 功能: 1.支持數據過期 2.支持等值查找 3.支持範圍查找 4.支持key排序 實現思路: 1.等值查找採用HashMap2 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 本章是系列文章的第八章,用著色演算法進行寄存器的分配過程。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 寄存器分配 寄存器分配是為程式處理的值找到存儲位置的問題 這些值可以存放到寄存器,也可以存放在記憶體中 寄存器更快,但數量有限 記憶體很多,但 ...