首页 > 代码库 > Oozie4.2 安装部署、以及example测试

Oozie4.2 安装部署、以及example测试

编译:

使用的环境是:Hadoop2.6.0、Spark1.4.0、Hive0.13.1、Sqoop1.4.4

编译Oozie的命令:./mkdistro.sh -Phadoop-2 -Dhadoop.auth.version=2.6.0 -Ddistcp.version=2.6.0 -Dsqoop.version=1.4.4 -Dhive.version=0.13.1 -Dpig.version=0.15.0

(突然发现,编译时没有指定Spark的版本)

经过艰难漫长的编译过程,最后得到了oozie-4.2.0-distro.tar.gz。

 

Oozie4.2 Server安装

所需环境:

Unix (tested in Linux and Mac OS X)

Java 1.6+

Hadoop(tested with 1.0.0 & 0.23.1)

ExtJS library (可选, 用于Oozie webconsole,本文档中使用)

MySQL(可选,本文档中使用)

 

开始安装:

将编译好的oozie-4.2.0-distro.tar.gz解压到/opt下

1、修改环境变量

vim /etc/profile,加入OOZIE_HOME这个环境变量,并在PATH中加入$OOZIE_HOME/bin,保存退出,然后执行source  /etc/profile

技术分享

2、修改/opt/oozie-4.2.0/conf下的 oozie-site.xml文件,在oozie-site.xml中增加以下配置信息:

<!--mysql作为元数据存放的数据库-->
<property>
    <name>oozie.service.JPAService.jdbc.driver</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>
        JDBC driver class.
    </description>
</property>
<property>
    <name>oozie.service.JPAService.jdbc.url</name>
    <value>jdbc:mysql://192.168.127.11:3306/oozie</value>
    <description>
        JDBC URL.
    </description>
</property>
<property>
    <name>oozie.service.JPAService.jdbc.username</name>
    <value>root</value>
    <description>
        DB user name.
    </description>
</property>
<property>
    <name>oozie.service.JPAService.jdbc.password</name>
    <value>123456</value>
    <description>
        DB user password.
        IMPORTANT: if password is emtpy leave a 1 space string, the service trims the value,
        if empty Configuration assumes it is NULL.
    </description>
</property>
<!--设置Hadoop的配置文件的路径-->
<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
    <value>*=/opt/hadoop-2.6.0/etc/hadoop</value>
    <description>
        Comma separated AUTHORITY=HADOOP_CONF_DIR, where AUTHORITY is the HOST:PORT of
        the Hadoop service (JobTracker, YARN, HDFS). The wildcard ‘*‘ configuration is
        used when there is no exact match for an authority. The HADOOP_CONF_DIR contains
        the relevant Hadoop *-site.xml files. If the path is relative is looked within
        the Oozie configuration directory; though the path can be absolute (i.e. to point
        to Hadoop client conf/ directories in the local filesystem.
    </description>
</property>
<!--设置Spark的配置文件的路径-->
<property>
    <name>oozie.service.SparkConfigurationService.spark.configurations</name>
    <value>*=/opt/spark-1.4.0-bin-hadoop2.6-hive/conf</value>
    <description>
        Comma separated AUTHORITY=SPARK_CONF_DIR, where AUTHORITY is the HOST:PORT of
        the ResourceManager of a YARN cluster. The wildcard ‘*‘ configuration is
        used when there is no exact match for an authority. The SPARK_CONF_DIR contains
        the relevant spark-defaults.conf properties file. If the path is relative is looked within
        the Oozie configuration directory; though the path can be absolute.  This is only used
        when the Spark master is set to either "yarn-client" or "yarn-cluster".
    </description>
</property>
<!--
设置系统库存放在hdfs中,注意只有在job.properties中将设置oozie.use.system.libpath=true才会引用系统库
。注意,下面ns1是namenode的逻辑名称,根据自己集群的情况进行更改即可-->
<property>
    <name>oozie.service.WorkflowAppService.system.libpath</name>
    <value>hdfs://ns1/user/${user.name}/share/lib</value>
    <description>
        System library path to use for workflow applications.
        This path is added to workflow application if their job properties sets
        the property ‘oozie.use.system.libpath‘ to true.
    </description>
</property>

 3、在Hadoop配置文件的core-site.xml中增加如下配置信息。注意:修改完后,需要重启hadoop。

    <!--
    <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_SERVER_USER]是安装使用oozie server的用户
        [OOZIE_SERVER_HOSTNAME]是安装oozie server的主机名
        [USER_GROUPS_THAT_ALLOW_IMPERSONATION]是用户的所属组
     以上汉字纯属个人见解,如有问题欢迎指正
    -->
    <!-- OOZIE -->
<property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>centos01</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>root</value>
    </property>

注意:在hadoop.proxyuser.root.groups的值改成*,也是可以运行的。

4、在/opt/oozie-4.2.0目录下创建一个libext目录,并在/opt/hadoop-2.6.0目录下使用以下命令将Hadoop下的所有jar包复制到libext目录中:find -name *.jar |xargs  -t -i cp {} /opt/oozie-4.2.0/libext。注意:需要将libext中的hsqldb-2.0.0.jar删掉,否则会引起jar包冲突。

5、将下载好的ext-2.2.zip以及mysql驱动包(例如:mysql-connector-java-5.1.35.jar)复制到libext目录下。

6、执行下面的命令,将ext2.2.0.zip、hadoop的相关jar包、以及mysql-connector-java-<版本>.jar、htrace-core-<版本>.jar、avro-<版本>.jar 打进新war包里:

bin/addtowar.sh -inputwar oozie.war  -outputwar oozie-server/webapps/oozie.war -hadoop 2.6.0 /opt/hadoop-2.6.0/ -extjs libext/ext-2.2.zip -jars /opt/oozie-4.2.0/libext/mysql-connector-java-5.1.35.jar:/opt/oozie-4.2.0/libext/htrace-core-3.0.4.jar:/opt/oozie-4.2.0/libext/avro-1.7.4.jar

注意:

1) htrace-core和avro这两个jar包不加的话,后面提交job时会出错!并且执行了上面这句后,就不能再执行bin/oozie-setup.sh prepare-war 了,否则替换掉oozie-server/webapps/中已经生成的oozie.war。

2)在ubuntu上执行上面命令时遇到zip:command not found;Failed:Creating new Oozie WAR的问题。这是因为没有安装Zip导致的。装上即可。

7、如果还没有安装mysql,那么需要安装一个mysql。安装好后吗,在mysql数据库中创建名为oozie的数据库(注意:oozie-site.xml中有个配置项oozie.service.JPAService.create.db.schema,默认值为false,表示非自动创建数据库,所以我们需要自己创建oozie数据库),并进行访问授权,然后在/opt/oozie-4.2.0/下执行:

bin/ooziedb.sh create -sqlfile oozie.sql -run

查看oozie数据库,如果产生了以下的表,就说明该步骤OK

技术分享

8、安装oozie-sharelib。

1) 在oozie-4.2.0目录下有一个 oozie-sharelib-4.2.0.tar.gz。使用tar -zxvf oozie-sharelib-4.2.0.tar.gz将它解压。解压出后是一个share目录

技术分享

2)进入到share/lib/sqoop中。将sqoop-1.4.6-hadoop100.jar去掉(我这边改成sqoop-1.4.6-hadoop100.jar.bak)
技术分享

注意:之所以要将sqoop-1.4.6-hadoop100.jar去掉,是因为我发现,在不去掉的情况下,运行Sqoop的例子会报错。这个错误可能是sqoop-1.4.6-hadoop100和sqoop-1.4.4-hadoop200.jar中的类冲突导致的。去掉之后,就可以成功运行了。

3)将mysql-connector-java-5.1.35.jar复制到/opt/oozie-4.2.0/share/lib/sqoop目录中。如果没有这个jar,将不能从mysql将数据导入或导出。

3)将这个share上传到hdfs上:

hdfs dfs -put  /opt/oozie-4.2.0/share  /user/root

注意,与oozie-site.xml中的oozie.service.WorkflowAppService.system.libpath的值保持一致,所以必须放到/user/root这个目录下。

9、使用以下命令启动oozie服务:

bin/oozie-start.sh

这时在/opt/oozie-4.2.0/oozie-server/webapps目录下多了oozie这个目录。如果缺少jar包或者jar包冲突了可以对

/opt/oozie-4.2.0/oozie-server/webapps/oozie/WEB-INF/lib中的进行添加或删除jar包

技术分享
10、使用以下命令验证服务是否启动成功,

oozie admin -oozie http://localhost:11000/oozie -status

如果是System model:Normal,表明启动成功,否则失败。
11、查看是否可以通过浏览器访问web页面:

http://192.168.127.11:11000/oozie/
技术分享

12、在运行job之前,最好开启Hadoop的jobhistory。它可以帮助你查看job调度时产生的日志。启动命令:

mr-jobhistory-daemon.sh start historyserver

使用jps命令查看是否启动成功,如果出现了 JobHistoryServer进程,表示启动成功。

 (如果在第3步中hadoop还没有重启,需要重启下,否则后面的job可能会运行失败)

 

Oozie4.2 Client安装

Oozie server 安装中已经包括了Oozie client。如果想要在其他机子上也使用Oozie,那么只要在那些机子上安装Oozei的client即可。

所需环境:

Unix (tested in Linux and Mac OS X)

Java 1.6+

 

开始安装

1、Oozie4.2中有一个oozie-client-4.2.0.tar.gz,将它复制到需要安装oozie client的机子上

技术分享

2、解压:

tar zxvf /data/insallers/oozie-client-4.2.0.tar.gz -C /opt

这时在/opt下有一个 oozie-client-4.2.0

3、添加环境变量:

技术分享

注意:上面还可以添加一个环境变量,export OOZIE_URL=http://centos01:11000/oozie这样在后面的oozie job这个命令中就不需要加 -oozie了

4、然后可以直接使用oozie来操作了,例如:

可以使用oozie job -oozie http://centos01:11000/oozie -config /data/installers/examples/apps/sqoop/job.properties -run 这样的命令来操作了。

 

Oozie Examples

 1、在/opt/oozie-4.2.0下有一个oozie-examples.tar.gz 。将它进行解压,解压之后生成一个examples目录。在该目录的apps中有一些简单的例子:

 技术分享

 2、在运行这些例子之前,需要对这些例子进行一些修改,例如我们运行shell这个例子。

 技术分享

先来查看一下job.properties的内容:

技术分享

这些例子中JobTracker 都是localhost:8021,NameNode 都是hdfs://localhost:8020 。这是hadoop1的端口。我们需要根据自己集群的情况,对它做相应的修改。我现在的hadoop集群是2.6.0版本的。并且NameNode和ResourceManager都是HA的。所以我的配置是:

技术分享

注意:这里ns1 是hadoop中hdfs-site.xml中的dfs.nameservices。rm1,rm2是yarn-site.xml中的yarn.resourcemanager.ha.rm-ids(如下2图)。如果ResourceManager不采用HA,采用的是单点,那么将8021这个端口改成8032端口(yarn.resourcemanager.address)。例如:ResourceManager所在的主机名centos03,那么改成jobTracker=centos03:8032即可。

技术分享

技术分享

3、将examples这个文件上传到hdfs中的/user/${user.name} 中,我采用的是root这个用户,所以是/user/root

4、执行以下命令运行
oozie  job  -oozie  http://centos01:11000/oozie  -config  /data/installers/examples/apps/shell/job.properties  -run
注意: -oozie 后面跟的是oozie server的地址,-config后面跟的是执行的脚本,除了在hdfs上要有一份examples,在本地也需要一份。这个命令中的/data/installers/examples/apps/shell/job.properties 是本地路径的job.properties,不是hdfs上的。
技术分享
5、根据上面的job Id ,可以使用下列命令进行查看
 oozie job -oozie http://centos01:11000/oozie -info 0000001-150804235314037-oozie-root-W
技术分享
6、根据上面的job Id ,可以使用下列命令进行日志

oozie job -oozie http://centos01:11000/oozie -log 0000001-150804235314037-oozie-root-W

7、可以访问http://centos01:11000/oozie 查看提交的job的情况:
技术分享

技术分享

参考网站:

https://hadooptutorial.info/oozie-share-lib-does-not-exist-error/#javaioFileNotFoundException_File_userusersharelib_does_not_exist
http://blog.csdn.net/teddeyang/article/details/16339533
http://oozie.apache.org/docs/4.2.0/AG_Install.html
http://www.cloudera.com/content/cloudera/en/documentation/cdh4/v4-2-0/CDH4-Installation-Guide/cdh4ig_topic_17_6.html

http://stackoverflow.com/questions/11555344/sqoop-export-fail-through-oozie

 

以下主要是我在安装使用oozie时遇到的一些问题,如果按照上面的步骤安装使用,可能就不会出现下面的问题了,可以忽略不看!

1、关于addtower命令:

技术分享

2、遇到过的问题:

1)编译时出现,解决方法:手动下载maven-clean-plugin插件的jar

技术分享

2)编译时出现,解决方法:mvn dependency::tree

技术分享

3)编译时出现,解决方法:手动下载依赖

技术分享

4)安装时出现。解决方法:移除libext中的hsqldb-2.0.0.jar

技术分享

5) 安装时出现,使用“bin/addtowar.sh -inputwar oozie.war  -outputwar oozie-server/webapps/oozie.war -hadoop 2.6.0 /opt/hadoop-2.6.0/ -extjs libext/ext-2.2.zip”命令替代“bin/oozie-setup.sh prepare-war”这个命令来解决。原因可能是后面的命令会将libext中杂七杂八的jar包放入到oozie-server/webapps/oozie/WEB-INF/lib/ 中,引起jar包冲突等问题。

技术分享

技术分享

6)有时出现无法启动或关闭oozie服务时,尝试将/opt/oozie-4.2.0/oozie-server/temp下的除了safeToDelete.tmp文件的其他文件删掉,即可(即只保留safeToDelete.tmp)。

技术分享

7) oozie服务启动失败:

技术分享
在/opt/oozie-4.2.0/logs中查看catalina.out这个日志,根据提示信息,应该是没有mysql驱动的原因。

技术分享

将mysql驱动包复制到oozie-server/webapps/oozie/WEB-INF/lib/下:

cp libext/mysql-connector-java-5.1.35.jar  oozie-server/webapps/oozie/WEB-INF/lib/ 
重新执行第9和第10步,现在oozie服务已经成功启动了:

技术分享

8)、提交job时出现“Error:HTTP error code:500:Internal Server Error”的问题

技术分享

发现在localhost.2015-08-03.log这个日志文件中记录了这个错误:

技术分享

解决方法:往oozie-server/webapps/oozie/WEB-INF/lib/ 中加入htrace-core-3.0.4.jar

9)、job执行完成后出现。解决方法:往oozie-server/webapps/oozie/WEB-INF/lib/ 中加入avro-1.7.4.jar

技术分享

10)、执行sqoop相关jab后出现。解决方法:去掉share/lib/sqoop中的sqoop-1.4.6-hadoop100.jar

技术分享
 

Oozie4.2 安装部署、以及example测试