网站首页 > 技术文章 正文
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
Fayson的github:https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
前面Fayson介绍了使用Oozie API向Kerberos和非Kerberos集群提交Spark和Java作业,本篇文章主要介绍如何使用Oozie Client API向Kerberos环境的CDH集群提交Shell Action工作流。
- 内容概述
1.环境准备及描述
2.示例代码编写及测试
3.总结
- 测试环境
1.CM和CDH版本为5.13.1
- 前置条件
1.集群已启用Kerberos
2.环境准备及描述
1.编写测试ooziejob.sh脚本
#!/bin/bash name=$1 echo "hello $name" >> /tmp/oozieshell.log
(可左右滑动)
2.我们将作业运行的ooziejob.sh上传到HDFS的/faysontest/jars目录
kinit fayson klist hadoop fs -mkdir -p hadoop fs -mkdir -p /user/fayson/oozie/shellaction/lib hadoop fs -put ooziejob.sh /user/fayson/oozie/shellaction/lib hadoop fs -ls /user/fayson/oozie/shellaction/lib
(可左右滑动)
3.定义一个Shell Action的workflow.xml文件,内容如下:
<workflow-app name="ShellWorkflow" xmlns="uri:oozie:workflow:0.5"> <start to="shell-d9b6"/> <kill name="Kill"> <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <action name="shell-d9b6"> <shell xmlns="uri:oozie:shell-action:0.1"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <exec>${exec}</exec> <argument>${argument}</argument> <capture-output/> </shell> <ok to="End"/> <error to="Kill"/> </action> <end name="End"/> </workflow-app>
(可左右滑动)
注意:workflow.xml文件中使用的参数配置为动态参数,会在后面的代码中指定该参数的值。
4.将定义好的workflow.xml文件上传至HDFS的
/user/faysontest/oozie/shellaction目录下
[root@ip-172-31-16-68 ~]# klist [root@ip-172-31-16-68 ~]# hadoop fs -mkdir -p /user/fayson/oozie/shellaction [root@ip-172-31-16-68 ~]# hadoop fs -put workflow.xml /user/fayson/oozie/shellaction [root@ip-172-31-16-68 ~]# hadoop fs -ls /user/fayson/oozie/shellaction
(可左右滑动)
5.准备JAAS文件oozie-login.conf,内容如下
com.sun.security.jgss.initiate { com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true debug=true keyTab="/Volumes/Transcend/keytab/fayson.keytab" principal="fayson@FAYSON.COM"; };
(可左右滑动)
3.创建Maven示例工程
1.使用Maven创建Java工程
2.工程pom.xml文件内容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cdh-project</artifactId> <groupId>com.cloudera</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>oozie-demo</artifactId> <packaging>jar</packaging> <name>oozie-demo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.4</version> </dependency> <dependency> <groupId>net.sourceforge.spnego</groupId> <artifactId>spnego</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>org.apache.oozie</groupId> <artifactId>oozie-client</artifactId> <version>4.1.0</version> </dependency> </dependencies> </project>
(可左右滑动)
4.编写Oozie示例代码
1.编写ShellWorkflowDemo.java,示例代码如下
package com.cloudera.kerberos; import org.apache.oozie.client.AuthOozieClient; import org.apache.oozie.client.WorkflowAction; import org.apache.oozie.client.WorkflowJob; import java.util.List; import java.util.Properties; /** * package: com.cloudera.kerberos * describe: 使用Oozie-client的API接口向Kerberos集群提交Shell Action作业 * creat_user: Fayson * email: htechinfo@163.com * creat_date: 2018/3/15 * creat_time: 下午11:10 * 公众号:Hadoop实操 */ public class ShellWorkflowDemo { private static String oozieURL = "http://ip-172-31-16-68.ap-southeast-1.compute.internal:11000/oozie"; public static void main(String[] args) { System.setProperty("java.security.krb5.conf", "/Volumes/Transcend/keytab/krb5.conf"); System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); System.setProperty("ssun.security.jgss.debug", "true"); //Kerberos Debug模式 System.setProperty("java.security.auth.login.config", "/Volumes/Transcend/keytab/oozie-login.conf"); AuthOozieClient oozieClient = new AuthOozieClient(oozieURL, AuthOozieClient.AuthType.KERBEROS.name()); oozieClient.setDebugMode(1); try { Properties properties = oozieClient.createConfiguration(); properties.put("oozie.wf.application.path", "${nameNode}/user/fayson/oozie/shellaction"); properties.put("oozie.use.system.libpath", "True"); properties.put("nameNode", "hdfs://nameservice1"); properties.put("jobTracker", "ip-172-31-16-68.ap-southeast-1.compute.internal:8032"); properties.put("exec", "lib/ooziejob.sh"); properties.put("argument", "fayson"); //运行workflow String jobid = oozieClient.run(properties); System.out.println(jobid); //等待10s new Thread(){ public void run() { try { Thread.sleep(10000l); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); //根据workflow id获取作业运行情况 WorkflowJob workflowJob = oozieClient.getJobInfo(jobid); //获取作业日志 System.out.println(oozieClient.getJobLog(jobid)); //获取workflow中所有ACTION List<WorkflowAction> list = workflowJob.getActions(); for (WorkflowAction action : list) { //输出每个Action的 Appid 即Yarn的Application ID System.out.println(action.getExternalId()); } } catch (Exception e) { e.printStackTrace(); } } }
(可左右滑动)
5.示例运行及验证
1.运行JavaWorkflowDemo代码,向CDH集群提交Shell作业
返回的Jobid为
2.登录CM进入Yarn服务的“应用程序”菜单查看
3.打开Yarn的8088 Web界面查看
点击执行成功的Map查看作业是在那个节点运行
4.登录ip-172-31-21-83节点查看Shell脚本执行结果
可以看到作业已运行成功,到此已完成了通过OozieAPI接口创建workflow并运行的示例演示。
6.总结
- 通过Oozie API提交作业,需要先定义好workflow.xml文件
- 参数传递通过在代码里面调用oozieClient.createConfiguration()创建一个Properties对象将K,V值存储并传入oozieClient.run(properties)中。
- 在指定Shell脚本时需要注意,shell脚本必须放在workflow.xml文件同级的lib目录下,并且在代码中不能指定完整的HDFS路径,只需要指定相对路径即可properties.put("exec", "lib/ooziejob.sh");
相关Oozie API向集群提交作业文章:
《
如何使用Oozie API接口向非Kerberos环境的CDH集群提交Spark作业
》
《
如何使用Oozie API接口向非Kerberos环境的CDH集群提交Java作业
》
《
如何使用Oozie API接口向非Kerberos环境的CDH集群提交Shell工作流
》
《
如何使用Oozie API接口向Kerberos环境的CDH集群提交Spark作业
》
《
如何使用Oozie API接口向Kerberos环境的CDH集群提交Spark2作业
》
《
如何使用Oozie API接口向Kerberos集群提交Java程序
》
GitHub地址:
https://github.com/fayson/cdhproject/blob/master/ooziedemo/src/main/java/com/cloudera/kerberos/ShellWorkflowDemo.java
https://github.com/fayson/cdhproject/blob/master/ooziedemo/conf/workflow-shell-template.xml
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操
猜你喜欢
- 2024-10-09 用最快速度,打造「最强 Webpack 前端工具链」,强势运行
- 2024-10-09 苹果iPhone 15 Pro系列手机静音拨片将改为Action按钮
- 2024-10-09 22个必须学习的Linux安全命令 简述linux的安全口令规则
- 2024-10-09 盘点|22个基本的Linux安全命令 linux教程安全性
- 2024-10-09 什么是CSRF攻击? 简述csrf攻击的基本原理
- 2024-10-09 DELMIA软件物流仿真:操作对象显示与隐藏功能介绍与使用方法
- 2024-10-09 机器人机械臂ROS通讯机制发布订阅多线程
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)