Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Apache Oozie 是一个工作流和协调系统,用于管理 Apache Hadoop 作业。 Oozie 与 Hadoop 堆栈集成,并支持以下作业:
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
还可以使用 Oozie 来计划特定于系统的作业,例如Java程序或 shell 脚本。
先决条件
具有企业安全性套餐(ESP)的 Azure HDInsight Hadoop 群集。 请参阅 使用 ESP 配置 HDInsight 群集。
注释
有关如何在非 ESP 群集上使用 Oozie 的详细说明,请参阅
连接到ESP集群
有关安全外壳(SSH)的详细信息,请参阅使用 SSH 连接到 HDInsight (Hadoop)。
使用 SSH 连接到 HDInsight 群集:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.cn若要验证 Kerberos 身份验证是否成功,请使用
klist命令。 如果不是,则使用kinit启动 Kerberos 身份验证。登录到 HDInsight 网关以注册访问Azure Data Lake Storage所需的 OAuth 令牌:
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.cn状态响应代码 为 200 OK 表示注册成功。 如果收到未经授权的响应(例如 401),请检查用户名和密码。
定义工作流
Oozie 工作流定义是用 Apache Hadoop 进程定义语言(hPDL)编写的。 hPDL 是一种 XML 进程定义语言。 执行以下步骤定义工作流:
设置域用户的工作区:
hdfs dfs -mkdir /user/<DomainUser> cd /home/<DomainUserPath> cp /usr/hdp/<ClusterVersion>/oozie/doc/oozie-examples.tar.gz . tar -xvf oozie-examples.tar.gz hdfs dfs -put examples /user/<DomainUser>/将
DomainUser替换为域用户名。 将DomainUserPath替换为域用户的主目录路径。 将ClusterVersion替换为你正在使用的群集数据平台版本。使用以下语句创建并编辑新文件:
nano workflow.xml打开 nano 编辑器后,输入以下 XML 作为文件内容:
<?xml version="1.0" encoding="UTF-8"?> <workflow-app xmlns="uri:oozie:workflow:0.4" name="map-reduce-wf"> <credentials> <credential name="metastore_token" type="hcat"> <property> <name>hcat.metastore.uri</name> <value>thrift://<active-headnode-name>-<clustername>.<Domain>.com:9083</value> </property> <property> <name>hcat.metastore.principal</name> <value>hive/_HOST@<Domain>.COM</value> </property> </credential> <credential name="hs2-creds" type="hive2"> <property> <name>hive2.server.principal</name> <value>${jdbcPrincipal}</value> </property> <property> <name>hive2.jdbc.url</name> <value>${jdbcURL}</value> </property> </credential> </credentials> <start to="mr-test" /> <action name="mr-test"> <map-reduce> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <prepare> <delete path="${nameNode}/user/${wf:user()}/examples/output-data/mrresult" /> </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/${wf:user()}/${examplesRoot}/input-data/text</value> </property> <property> <name>mapred.output.dir</name> <value>/user/${wf:user()}/${examplesRoot}/output-data/mrresult</value> </property> </configuration> </map-reduce> <ok to="myHive2" /> <error to="fail" /> </action> <action name="myHive2" cred="hs2-creds"> <hive2 xmlns="uri:oozie:hive2-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <jdbc-url>${jdbcURL}</jdbc-url> <script>${hiveScript2}</script> <param>hiveOutputDirectory2=${hiveOutputDirectory2}</param> </hive2> <ok to="myHive" /> <error to="fail" /> </action> <action name="myHive" cred="metastore_token"> <hive xmlns="uri:oozie:hive-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> </configuration> <script>${hiveScript1}</script> <param>hiveOutputDirectory1=${hiveOutputDirectory1}</param> </hive> <ok to="end" /> <error to="fail" /> </action> <kill name="fail"> <message>Oozie job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end" /> </workflow-app>将
clustername替换为群集的名称。若要保存文件,请选择 Ctrl+X。 输入 Y。然后选择 Enter。
工作流分为两个部分:
凭据。 本节输入用于身份验证 Oozie 操作的凭据:
此示例对 Hive 操作使用身份验证。 若要了解详细信息,请参阅 操作身份验证。
凭据服务允许 Oozie 操作模拟用户访问 Hadoop 服务。
操作。 本部分有三个操作:map-reduce、Hive 服务器 2 和 Hive 服务器 1:
map-reduce 动作运行一个 Oozie 包中的 map-reduce 示例,用于输出聚合字数。
Hive 服务器 2 和 Hive 服务器 1 操作对 HDInsight 提供的示例 Hive 表运行查询。
Hive 操作使用凭据部分中定义的凭据进行身份验证,方法是使用操作元素中的关键字
cred进行身份验证。
使用以下命令将
workflow.xml文件复制到/user/<domainuser>/examples/apps/map-reduce/workflow.xml:hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml将
domainuser替换为您在域中的用户名。
定义 Oozie 作业的属性文件
使用以下语句为作业属性创建和编辑新文件:
nano job.properties打开 nano 编辑器后,使用以下 XML 作为文件的内容:
nameNode=adl://home jobTracker=headnodehost:8050 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/[domainuser]/examples/apps/map-reduce/workflow.xml hiveScript1=${nameNode}/user/${user.name}/countrowshive1.hql hiveScript2=${nameNode}/user/${user.name}/countrowshive2.hql oozie.use.system.libpath=true user.name=[domainuser] jdbcPrincipal=hive/<active-headnode-name>.<Domain>.com@<Domain>.COM jdbcURL=[jdbcurlvalue] hiveOutputDirectory1=${nameNode}/user/${user.name}/hiveresult1 hiveOutputDirectory2=${nameNode}/user/${user.name}/hiveresult2- 如果您将 Azure Data Lake Storage Gen1 作为主群集存储,请使用
nameNode属性的adl://homeURI。 如果使用 Azure Blob 存储,请更改为wasb://home。 如果使用 Azure Data Lake Storage Gen2,请更改为abfs://home。 - 将
domainuser替换为您在域中的用户名。 - 将
ClusterShortName替换为群集的短名称。 例如,如果群集名称 https:// [示例链接] sechadoopcontoso.azurehdinsight.cn,则clustershortname群集的前六个字符是: sechad。 - 将
jdbcurlvalue替换为 Hive 配置中的 JDBC URL。 例如 jdbc:hive2://headnodehost:10001/;transportMode=http。 - 若要保存文件,请选择 Ctrl+X,输入
Y,然后选择 Enter。
运行 Oozie 作业时,此属性文件需要在本地存在。
- 如果您将 Azure Data Lake Storage Gen1 作为主群集存储,请使用
为 Oozie 作业创建自定义 Hive 脚本
可以为 Hive 服务器 1 和 Hive 服务器 2 创建两个 Hive 脚本,如以下部分所示。
Hive服务器1个文件
为 Hive 服务器 1 操作创建和编辑文件:
nano countrowshive1.hql创建脚本:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;将文件保存到 Apache Hadoop 分布式文件系统(HDFS):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
HiveServer2 文件
为 Hive 服务器 2 操作创建和编辑字段:
nano countrowshive2.hql创建脚本:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;将文件保存到 HDFS:
hdfs dfs -put countrowshive2.hql countrowshive2.hql
提交 Oozie 作业
为 ESP 群集提交 Oozie 作业类似于在非 ESP 群集中提交 Oozie 作业。
有关详细信息,请参阅将 Apache Oozie 与 Apache Hadoop 配合使用,以在基于 Linux 的 Azure HDInsight 上定义和运行工作流。
Oozie 作业提交的结果
Oozie 作业为用户执行。 因此,Apache Hadoop YARN 和 Apache Ranger 审核日志都显示这些作业作为被假冒的用户运行。 Oozie 作业的命令行界面输出结果类似于以下代码:
Job ID : 0000015-180626011240801-oozie-oozi-W
------------------------------------------------------------------------------------------------
Workflow Name : map-reduce-wf
App Path : adl://home/user/alicetest/examples/apps/map-reduce/wf.xml
Status : SUCCEEDED
Run : 0
User : alicetest
Group : -
Created : 2018-06-26 19:25 GMT
Started : 2018-06-26 19:25 GMT
Last Modified : 2018-06-26 19:30 GMT
Ended : 2018-06-26 19:30 GMT
CoordAction ID: -
Actions
------------------------------------------------------------------------------------------------
ID Status Ext ID ExtStatus ErrCode
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@:start: OK - OK -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@mr-test OK job_1529975666160_0051 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive2 OK job_1529975666160_0053 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive OK job_1529975666160_0055 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@end OK - OK -
-----------------------------------------------------------------------------------------------
Hive 服务器 2 的 Ranger 审核日志显示 Oozie 代表用户执行操作。 Ranger 和 YARN 视图仅对群集管理员可见。
在 Oozie 中配置用户授权
Oozie 本身具有用户授权配置,可以阻止用户停止或删除其他用户的作业。 若要启用此配置,请设置为 oozie.service.AuthorizationService.security.enabledtrue.
有关详细信息,请参阅 Apache Oozie 安装和配置。
对于 Hive 服务器 1 等组件(其中 Ranger 插件不可用或不受支持),只能进行粗粒度的 HDFS 授权。 细化授权只能通过“Ranger”插件使用。
获取 Oozie Web 用户界面
Oozie Web UI 提供基于 Web 的视图来显示群集上 Oozie 作业的状态。 若要获取 Web UI,请执行 ESP 群集中的以下步骤:
添加 边缘节点 并启用 SSH Kerberos 身份验证。
按照 Oozie Web UI 步骤启用到边缘节点的 SSH 隧道并访问 Web UI。