oozieoozie入門


備註

Oozie是一個Apache開源項目,最初是在雅虎開發的。 Oozie是一個用於多級Hadoop作業的通用調度系統。

  • Oozie允許將相關Hadoop作業的邏輯分組形成一個名為Workflow的實體。 Oozie工作流程是動作的DAG(定向循環圖)。
  • Oozie提供了一種使用名為Coordinator的實體來安排時間數據相關工作流的方法。
  • 此外,您可以將相關協調器組合到名為Bundle的實體中,並可以在Oozie服務器上進行調度以執行。

Oozie支持大多數Hadoop Jobs作為Oozie Action Nodes,如: MapRedudeJavaFileSystem (HDFS操作), HiveHive2PigSparkSSHShellDistCpSqoop 。它使用Decision Control Node操作提供決策功能,並使用Fork-Join Control Node並行執行作業。它允許用戶使用Email操作為工作流的成功/失敗通知配置電子郵件選項。

版本

Oozie版本發布日期
4.3.0 2016年12月2日

安裝或設置

先決條件

本文演示瞭如何在Hadoop 2.7.3上安裝oozie-4.3.0

  1. Java 1.7+
  2. Hadoop 2.x(這裡,2.7.3)
  3. Maven3 +
  4. Unix盒子

第1步:Dist文件

http://www-eu.apache.org/dist/oozie/4.3.0/獲取oozie tar.gz文件並解壓縮

cd $HOME
tar -xvf oozie-4.3.0.tar.gz
 

第2步:構建Oozie

cd $HOME/oozie-4.3.0/bin
./mkdistro.sh -DskipTests
 

第3步:服務器安裝

將構建的二進製文件複製到主目錄為'oozie'

cd $HOME
cp -R $HOME/oozie-4.3.0/distro/target/oozie-4.3.0-distro/oozie-4.3.0 .
 

步驟3.1:libext在 oozie目錄下創建libext目錄

 cd $HOME/oozie
 mkdir libext
 

注意 :ExtJS(2.2+)庫(可選,啟用Oozie webconsole)但是,ExtJS庫沒有與Oozie捆綁,因為它使用不同的許可證:(現在你需要將hadoop jar放在libext目錄中,否則它將在下面拋出oozie.log文件中的錯誤

WARN ActionStartXCommand:523 - SERVER [data01.teg.io] USER [hadoop] GROUP [ - ] TOKEN [] APP [map-reduce-wf] JOB [0000000-161215143751620-oozie-hado-W]行動[0000000-161215143751620- oozie-hado-W @ mr-node]啟動動作[mr-node]時出錯。 ErrorType [TRANSIENT],ErrorCode [JA009],消息[JA009:無法初始化群集。請檢查mapreduce.framework.name的配置和相應的服務器地址。

所以,讓我們把它放在libext目錄下的jar下面

cp $HADOOP_HOME/share/hadoop/common/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/common/lib/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/hdfs/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/mapreduce/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/mapreduce/lib/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/yarn/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/yarn/lib/*.jar oozie/libext/
 

步驟3.2:Oozie Impersonate要避免在oozie上出現模擬錯誤,請修改core-site.xml,如下所示

<!-- OOZIE -->
  <property>
    <name>hadoop.proxyuser.[OOZIE_SERVER_USER].hosts</name>
    <value>[OOZIE_SERVER_HOSTNAME]</value>
  </property>
  <property>
    <name>hadoop.proxyuser.[OOZIE_SERVER_USER].groups</name>
    <value>[USER_GROUPS_THAT_ALLOW_IMPERSONATION]</value>
  </property>
 

假設,我的oozie用戶是huser,主機是localhost,group是hadoop

<!-- OOZIE -->
  <property>
    <name>hadoop.proxyuser.huser.hosts</name>
    <value>localhost</value>
  </property>
  <property>
    <name>hadoop.proxyuser.huser.groups</name>
    <value>hadoop</value>
  </property>
 

注意:如果出現混淆,您可以在所有值中使用*

步驟3.3:準備戰爭

cd $HOME/oozie/bin
./oozie-setup.sh prepare-war
 

這將在oozie目錄中創建oozie.war文件。如果將進一步使用此戰爭,您可能會遇到此錯誤:

ERROR ActionStartXCommand:517 - SERVER [data01.teg.io] USER [hadoop] GROUP [ - ] TOKEN [] APP [map-reduce-wf] JOB [0000000-161220104605103-oozie-hado-W]行動[0000000-161220104605103- oozie-hado-W @ mr-node]錯誤,java.lang.NoSuchFieldError:HADOOP_CLASSPATH

為什麼?因為,即使在使用選項“-Dhadoop.version = 2.7.3”指定Hadoop 2.7.3時,oozie編譯也會生成Hadoop 2.6.0 jar。

因此,要避免此錯誤,請將oozie.war文件複製到其他目錄

mkdir $HOME/oozie_war_dir
cp $HOME/oozie/oozie.war $HOME/oozie_war_dir
cd $HOME/oozie_war_dir
jar -xvf oozie.war
rm -f oozie.war/WEB-INF/lib/hadoop-*.jar
rm -f oozie.war/WEB-INF/lib/hive-*.jar
rm oozie.war
jar -cvf oozie.war ./*
cp oozie.war $HOME/oozie/
 

然後,通過準備戰爭為oozie重新生成oozie.war二進製文件

cd $HOME/oozie/bin
./oozie-setup.sh prepare-war
 

步驟3.4:在HDFS上創建sharelib

cd $HOME/oozie/bin
./oozie-setup.sh sharelib create -fs hdfs://localhost:9000
 

現在,這個sharelib設置可能會給你以下錯誤:

org.apache.oozie.service.ServiceException:E0104:無法完全初始化服務[org.apache.oozie.service.ShareLibService],無法緩存sharelib。管理員需要使用oozie-setup.sh安裝sharelib並發出'oozie admin'CLI命令來更新sharelib

要避免這種情況,請修改oozie-site.xml,如下所示

cd $HOME/oozie
vi conf/oozie-site.xml
 

添加以下屬性

<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name> 
    <value>*=/usr/local/hadoop/etc/hadoop/</value>
</property>
 

值應為$ HADOOP_HOME / etc / hadoop,其中存在所有hadoop配置文件。

步驟3.5:創建Oozie DB

cd $HOME/oozie
./bin/ooziedb.sh create -sqlfile oozie.sql -run
 

步驟3.6:啟動守護程序

要將Oozie作為守護程序啟動,請使用以下命令:

./bin/oozied.sh start
 

停止

./bin/oozied.sh stop
 

檢查日誌是否有錯誤(如果有)

cd $HOME/oozie/logs
tail -100f oozie.log
 

使用以下命令從命令行檢查Oozie的狀態:

$ ./bin/oozie admin -oozie http://localhost:11000/oozie -status
System mode: NORMAL
 

第4步:客戶端安裝

$ cd
$ cp oozie/oozie-client-4.3.0.tar.gz .
$ tar -xvf oozie-client-4.3.0.tar.gz
$ mv oozie-client-3.3.2 oozie-client
$ cd bin
 

將$ HOME / oozie-client / bin添加到.bashrc文件中的PATH變量,然後重新啟動終端或執行

source $HOME/.bashrc
 

有關設置的更多詳細信息,請參閱此URL https://oozie.apache.org/docs/4.3.0/DG_QuickStart.html

現在,您可以在終端中向oozie提交hadoop作業。

要運行示例,您可以按照此URL並設置第一個示例來運行https://oozie.apache.org/docs/4.3.0/DG_Examples.html

在上面的URL中運行map reduce示例時,您可能會遇到以下錯誤

java.io.IOException:java.net.ConnectException:在連接異常時調用從localhost.localdomain / 127.0.0.1到0.0.0.0:10020失敗:java.net.ConnectException:Connection refused;有關更多詳細信息,請參閱: http//wiki.apache.org/hadoop/ConnectionRefused

解決方案:啟動mr-jobhistory-server.sh

cd $HADOOP_HOME/sbin
./mr-jobhistory-server.sh start historyserver
 

關於修改job.properties文件的另一點需要注意的是:

nameNode=hdfs://localhost:9000
jobTracker=localhost:8032
 

在你的情況下,這可能是不同的,因為我使用apache hadoop,你可能正在使用cloudera / hdp / anything

To run spark job, I have tried running in local[*], yarn-client and
yarn-cluster as master, but succeeded in local[*] only