首页 > 代码库 > 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
oozie job -oozie http://centos01:11000/oozie -log 0000001-150804235314037-oozie-root-W
参考网站:
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测试