oozie 是hadoop 一个 工作流调度组件,能把多个MR作业组合为一个逻辑工作单元(一个工作流),从而自动完成任务调用。
从官方处 下载
解压之后进入目录, 执行 bin/mkdistro.sh -Dhadoop.auth.version=2.8.5 -Dhadoop.version=2.8.5 -Dsqoop.version=1.4.6 -DskipTests
进行编译, 这里我们不是用的 cdh 版本,所以直接编译就好
编译完成的文件会在 distro/target
目录下,解压编译好的压缩包安装
设置环境变量
export OOZIE_HOME=/opt/oozie-5.0.0
export OOZIE_LOG=/opt/logs/oozie
export PATH=$OOZIE_HOME/bin:$PATH
修改配置文件
# file: conf/oozie-site.xml
set oozie.service.JPAService.create.db.schema=false # 启动不自动创建表头
set oozie.service.ProxyUserService.proxyuser.hadoop.hosts=*
set oozie.service.ProxyUserService.proxyuser.hadoop.groups=*
# 设置数据库
set oozie.service.JPAService.jdbc.driver=com.mysql.jdbc.Driver
set oozie.service.JPAService.jdbc.url=jdbc:mysql://master:3306/oozie?createDatabaseIfNotExist=true&useSSL=false
set oozie.service.JPAService.jdbc.username=oozie
set oozie.service.JPAService.jdbc.password=oozie
# hadoop 设置
set oozie.service.HadoopAccessorService.hadoop.configurations=*=/opt/hadoop/etc/hadoop
set oozie.service.HadoopAccessorService.action.configurations=*=/opt/hadoop/etc/hadoop
# spark 设置
set oozie.service.SparkConfigurationService.spark.configurations=*=/opt/spark/conf
# lib 设置
set oozie.service.WorkflowAppService.system.libpath=/user/hadoop/share/lib
set oozie.use.system.libpath=true
set oozie.processing.timezone=GMT+0800 # 设置时区
# hostname
set oozie.http.hostname=master # 重要
set oozie.service.SchemaCheckerService.ignore.extras=false # 在启动的时候不校验表结构
修改oozie-env.sh
# 添加上该配置,在执行命令的时候就不用手动添加 oozie
OOZIE_URL=http://master:11000/oozie
创建目录 OOZIE_HOME/libext, 在官方文档 处下载好 ExtJS library. 这个是 web console 需要的组件,直接放到目录中, 执行以下命令
mkdir $OOZIE_HOME/libext
cp ext-2.2.zip $OOZIE_HOME/libext
# 执行以下命令会在当前目录创建lib包。并上传到hdfs, 会自动放在 hdfs:/user/<当前用户>/share/lib下,这个是 oozie 运行程序所需的包
cp oracle/instantclient_12_2/ojdbc8.jar $OOZIE_HOME/libext # 复制 oracle 包
cp mysql-connector-java-5.1.47-bin.jar $OOZIE_HOME/libext # 复制mysql jdbc
# 拷贝hadoop 相关jar 包还有一些运行所需的附属包, 这里是 oozie 本身运行所需的 lib 目录
find $HADOOP_HOME/share/hadoop -name "hadoop-*.jar" | xargs -n1 -I{} cp -f {} $OOZIE_HOME/libext
ls $HADOOP_HOME/share/hadoop/common/lib/* | grep -v slf4j | xargs -n1 -I{} cp -f {} $OOZIE_HOME/libext
# 这一步会做一些运行前准备工作,将jar包从压缩文件中拷贝出来,并创建 lib 目录
oozie-setup.sh sharelib create -fs hdfs://HACluster -locallib ./oozie-sharelib-5.0.0.tar.gz
创建数据库 oozie 和用户 oozie 并分配权限, 执行以下命令
bin/ooziedb.sh create -sqlfile oozie.sql -run # 创建 ooize 使用的数据表
执行 oozied.sh run
或者 oozied.sh start
启动
执行 oozie admin -oozie <http://master:11000/oozie> -status
检查服务状态 访问 web页面 , 并在页面上 setting 处修改 时区为 CST (Asia/Shanghai), 这样查看 jobinfo 就能看到正确的对应时间了
测试oozie, 解压根目录中的 example.tar.gz ,修改 examples/apps/map-reduce/job.properties
中的nameNode 和 resourceManager 为自己集群的对应配置
将对应的 examples 文件夹上传到hdfs 下的 /user/当前用户目录下
执行命令测试 oozie job -oozie <http://master:11000/oozie> -config examples/apps/map-reduce/job.properties -run
这里-config 可以指定本地使用的 job.properties 配置 (只能是本地使用),在 job.properties 里有一项配置 oozie.wf.application.path
指定了程序在hdfs 上的路径, oozie 会根据该配置指定执行何种任务,寻找相应的配置。