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