阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oozie-4.1.0-CDH5.5.2 安装部署

205次阅读
没有评论

共计 11366 个字符,预计需要花费 29 分钟才能阅读完成。

一. Hadoop 常见调度框架:
(1)Linux Crontab:

Linux 自带的任务调度计划,在任务比较少的情况下,可以使用这种方式,直接执行脚本,例如添加一个执行计划:0 12 * hive -f xxx.sql
(2)Azkaban:
(3)Oozie:Cloudera 公司开源
(4)Zeus:阿里开源。

Oozie 是管理 Hadoop 作业的工作流调度系统。Oozie 定义了控制流节点和动作节点。Oozie 实现的功能:
(1)Workflow:顺序执行流程节点;
(2)Coordinator:定时触发 workflow;
(3)Bundle Job:绑定多个 Coordinator。

Oozie 是一个开源的工作流调度系统,它能够管理逻辑复杂的多个 Hadoop 作业,按照指定的顺序将其协同运行起来。例如,我们可能有这样一个需求,某个业务系统每天产生 20G 原始数据,我们每天都要对其进行处理,处理步骤如下所示:
1. 通过 Hadoop 先将原始数据同步到 HDFS 上;
2. 借助 MapReduce 计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张 Hive 表中;
3. 需要对 Hive 中多个表的数据进行 JOIN 处理,得到一个明细数据 Hive 大表;
4. 将明细数据进行复杂的统计分析,得到排序后的报表信息;
5. 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
上述过程可以通过工作流系统来编排任务,最终生成一个工作流实例,然后每天定时启动运行这个实例即可。在这种依赖于 Hadoop 存储和处理能力要求的应用场景下,Oozie 可能能够简化任务调度和执行。

二. Oozie 安装:
Oozie 不需要设置 OOZIE_HOME 环境变量(系统自行计算),推荐使用单独的用户(而不是 root)来安装 Oozie。

1. 编译源码,解压压缩包:
http://oozie.apache.org/docs/4.0.0/DG_QuickStart.html

如果需要对 Oozie 个性化修改,可以自行修改源代码并编译,这里我直接使用官网编译好的版本 oozie-4.1.0-cdh5.5.2.tar.gz:
[hadoop@h71 ~]$ tar -zxvf oozie-4.1.0-cdh5.5.2.tar.gz

以下配置添加到 core-site.xml 文件(使用用户和 hostname 替换文档中内容):
[hadoop@h71 ~]$ vi $HADOOP_HOME/etc/hadoop/core-site.xml

<!– OOZIE –>
<property>
    <name>hadoop.proxyuser.natty.hosts</name>
    <value>h71</value>
</property>
<property>
    <name>hadoop.proxyuser.natty.groups</name>
    <value>*</value>
</property>

添加以下内容到 oozie 配置文件,$OOZIE_HOME/conf/oozie-site.xml:
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ vi conf/oozie-site.xml

<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
    <value>*=/home/hadoop/hadoop-2.6.0-cdh5.5.2/etc/hadoop</value>
    <description>
        Comma separated AUTHORITY=HADOOP_CONF_DIR, where AUTHORITY is the HOST:PORT of
        the Hadoop service (JobTracker, 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>

在解压 oozie 二进制发行包的目录中,解压 hadooplibs 发行包,也就是 oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ tar -zxvf oozie-hadooplibs-4.1.0-cdh5.5.2.tar.gz
这样,oozie 的安装目录多了一个 hadooplibs 目录。

2. 详细配置:
启动应该使用 oozied.sh 脚本,并添加,start、stop、run 等参数。
在 oozie 的解压目录下创建 libext 目录。并将 hadooplibs 下的 jar 包拷贝到这个目录里,需要注意的是 hadooplibs 目录下有个文件夹 hadooplib-2.6.0-cdh5.5.2.oozie-4.1.0-cdh5.5.2,hadooplib-2.6.0-mr1-cdh5.5.2.oozie-4.1.0-cdh5.5.2;后者对应于 mapreduce1,所以我们拷贝第一个文件夹下的 jar 包即可。
还要将 ext-3.0.0.zip 的压缩包上传到 libext 目录,所需的 ext-3.0.0.zip 我已经上传

—————————————— 分割线 ——————————————

可以到 Linux 公社 1 号 FTP 服务器下载

FTP 地址:ftp://ftp1.linuxidc.com

用户名:ftp1.linuxidc.com

密码:www.linuxidc.com

在 2017 年 LinuxIDC.com/10 月 /Oozie-4.1.0-CDH5.5.2 安装部署 /

下载方法见 http://www.linuxidc.com/Linux/2013-10/91140.htm

—————————————— 分割线 —————————————— 

[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ mkdir libext
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ cp hadooplibs/hadooplib-2.6.0-cdh5.5.2.oozie-4.1.0-cdh5.5.2/* libext/
$ cp ext-3.0.0.zip /home/hadoop/ooozie-4.1.0-cdh5.5.2/libext/
$ unzip ext-3.0.0.zip
安装 mysql 数据库,并生成相关表(oozie 是一个 web 系统,需要自己的知识库),所以,我们需要 mysql connector 驱动包,拷贝到 $oozie_home/libext 下。
$ cp mysql-connector-java-5.1.33-bin.jar /home/hadoop/ooozie-4.1.0-cdh5.5.2/libext/

(1)生成 mysql 数据表(oozie 所需要的)
我们可以使用 bin/oozie-setup.sh 命令的“db create”参数,来操作 mysql 数据库创建相应的库和表。但在使用这个命令前,需要先给 oozie 关联上 mysql。下面先做关联操作:
修改 oozie 的配置文件($oozie_home/conf/oozie-site.xml),配置 driver、url、username、password:

<!– Oozie Related Mysql –>
    <property>
        <name>oozie.service.JPAService.jdbc.driver</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>oozie.service.JPAService.jdbc.url</name>
        <value>jdbc:mysql://h71:3306/oozie?createDatabaseIfNotExist=true</value>
    </property>

    <property>
        <name>oozie.service.JPAService.jdbc.username</name>
        <value>hadoop</value>
    </property>

    <property>
        <name>oozie.service.JPAService.jdbc.password</name>
        <value>123456</value>
    </property>

(2)关联好 mysql 之后,通过脚本创建 mysql 的库表:
注意:在创建库表之前要在 MySQL 中做如下操作:
mysql> grant all privileges on *.* to hadoop@’h71′ identified by ‘123456’;
mysql> flush privileges;

[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ bin/oozie-setup.sh db create -run oozie.sql

  setting CATALINA_OPTS=”$CATALINA_OPTS -Xmx1024m”

Validate DB Connection
DONE
Check DB schema does not exist
DONE
Check OOZIE_SYS table does not exist
DONE
Create SQL schema
DONE
Create OOZIE_SYS table
DONE

Oozie DB has been created for Oozie version ‘4.1.0-cdh5.5.2’

The SQL commands have been written to: /tmp/ooziedb-8197609038028550269.sql

执行成功之后,登陆到 mysql 验证数据库表的创建情况:

mysql> use oozie;
mysql> show tables;
+————————+
| Tables_in_oozie        |
+————————+
| BUNDLE_ACTIONS        |
| BUNDLE_JOBS            |
| COORD_ACTIONS          |
| COORD_JOBS            |
| OOZIE_SYS              |
| OPENJPA_SEQUENCE_TABLE |
| SLA_EVENTS            |
| SLA_REGISTRATION      |
| SLA_SUMMARY            |
| VALIDATE_CONN          |
| WF_ACTIONS            |
| WF_JOBS                |
+————————+
12 rows in set (0.00 sec)

(3)下面生成 war 包,供 tomcat 访问:
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ bin/oozie-setup.sh prepare-war
命令执行成功后,会提示 war 包已经生成在 webapps 目录下:New Oozie WAR file with added ‘JARs’ at /home/hadoop/oozie-4.1.0-cdh5.5.2/oozie-server/webapps/oozie.war

(4)上传 sharelib 压缩包到 HDFS 上:
在 $oozie_home 下,有 2 个 sharelib 压缩包,分别是 oozie-sharelib-4.1.0-cdh5.5.2.tar.gz 和 oozie-sharelib-4.1.0-cdh5.5.2-yarn.tar.gz,很明显,我们必须拷贝第二个带 yarn 的压缩包(前边的是 1.0 版本的,不带 yarn 的)。
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ bin/oozie-setup.sh sharelib create -fs hdfs://h71:9000 -locallib oozie-sharelib-4.1.0-cdh5.5.2-yarn.tar.gz
会报错:

  setting CATALINA_OPTS=”$CATALINA_OPTS -Xmx1024m”
the destination path for sharelib is: /user/hadoop/share/lib/lib_20170317224413

Error: User: hadoop is not allowed to impersonate hadoop

Stack trace for the error was (for debug purposes):
————————————–
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hadoop is not allowed to impersonate hadoop
        at org.apache.hadoop.ipc.Client.call(Client.java:1466)
        at org.apache.hadoop.ipc.Client.call(Client.java:1403)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)
        at com.sun.proxy.$Proxy14.getFileInfo(Unknown Source)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:752)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:256)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)
        at com.sun.proxy.$Proxy15.getFileInfo(Unknown Source)
        at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:2095)
        at org.apache.hadoop.hdfs.DistributedFileSystem$19.doCall(DistributedFileSystem.java:1214)
        at org.apache.hadoop.hdfs.DistributedFileSystem$19.doCall(DistributedFileSystem.java:1210)
        at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
        at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1210)
        at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1409)
        at org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:499)
        at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:351)
        at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:341)
        at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1944)
        at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1912)
        at org.apache.oozie.tools.OozieSharelibCLI.run(OozieSharelibCLI.java:166)
        at org.apache.oozie.tools.OozieSharelibCLI.main(OozieSharelibCLI.java:57)
————————————–

解决:
在 core-site.xml 添加如下属性,其中
hadoop.proxyuser.hadoop.groups 中的 hadoop 是用户,value 里面的 hadoop 是 group
[hadoop@h71 hadoop-2.6.0-cdh5.5.2]$ vi etc/hadoop/core-site.xml 
添加:

<property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>hadoop</value>
    <description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description>
</property>

<property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>h71</value>
    <description>The superuser can connect only from host1 and host2 to impersonate a user</description>
</property>

然后重启 hadoop:
[hadoop@h71 hadoop-2.6.0-cdh5.5.2]$ sbin/stop-all.sh
[hadoop@h71 hadoop-2.6.0-cdh5.5.2]$ sbin/start-all.sh

3. 启动 oozie 和测试:
启动 oozie,使用 oozied.sh 脚本。
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ bin/oozied.sh start

启动后,访问网址 http://h71:11000/oozie/
可以看到 oozie 的主页面:

Oozie-4.1.0-CDH5.5.2 安装部署

三. Oozie 测试和使用(执行官方 example 实例):
Oozie 官方提供了一个样例包,我们后边的开发都以这个 example 实例为模板进行。解压 Oozie 主目录下的 example 包:
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ tar zxf oozie-examples.tar.gz
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ cd examples/apps/

apps 目录下存放了我们需要配置的作业内容。
[hadoop@h71 apps]$ ls
aggregator  bundle  cron  cron-schedule  custom-main  datelist-java-main  demo  distcp  hadoop-el  hcatalog
hive  hive2  java-main  map-reduce  no-op  pig  shell  sla  spark  sqoop  sqoop-freeform  ssh  streaming  subwf

在目录中可以看到,有关于 map-reduce、sqoop、hive 等很多类型的作业的配置的实例。下面,我以 map-reduce 作业为例来说明,oozie 作业的配置方法。在 map-reduce 目录中有三个重要的内容:
(1)job.properties:定义 job 相关的属性,比如输入输出目录、namenode 节点等。定义了 workflow.xml 文件的位置。
(2)workflow.xml:定义工作流相关的配置,start、end、kill 等
(3)lib 文件夹:存放 job 任务需要的 jar 包。
注意:配置作业需要修改 job.properties 和 workflow.xml 两个文件。
配置 job.properties:

nameNode=hdfs://h71:9000
jobTracker=h71:8032
queueName=default
examplesRoot=examples
user.name=hadoop

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce/workflow.xml
outputDir=map-reduce

注:jobTracker 配置的是 ResourceManager 的端口。需要一定注意,我们的 ResourceManager 配置在 senior02 主机上,并且端口是 8032(不是 8088,8088 端口是 web 界面查看的端口)

配置 workflow.xml:

<workflow-app xmlns=”uri:oozie:workflow:0.2″ name=”map-reduce-wf”>
    <start to=”mr-node”/>
    <action name=”mr-node”>
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path=”${nameNode}/user/hadoop/${examplesRoot}/output-data/${outputDir}”/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.apache.oozie.example.SampleMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.apache.oozie.example.SampleReducer</value>
                </property>
                <property>
                    <name>mapred.map.tasks</name>
                    <value>1</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>/user/hadoop/${examplesRoot}/input-data/text</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>/user/hadoop/${examplesRoot}/output-data/${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to=”end”/>
        <error to=”fail”/>
    </action>
    <kill name=”fail”>
        <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name=”end”/>
</workflow-app>

上传 examples 目录到 HDFS 的 /user/natty/ 路径。
[hadoop@h71 ~]$ hadoop fs -put oozie-4.1.0-cdh5.5.2/examples/ /user/hadoop

运行 example 应用:
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ bin/oozie job -oozie http://h71:11000/oozie -config examples/apps/map-reduce/job.properties -run
job: 0000000-170317232542282-oozie-hado-W

杀掉 job:
[hadoop@h71 oozie-4.1.0-cdh5.5.2]$ bin/oozie job -oozie http://h71:11000/oozie -kill 0000000-170317232542282-oozie-hado-W

请注意,在执行应用前,要保证 oozie 是启动状态的。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147654.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计11366字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中