有一个这样的需求,apache oozie调用shell命令(x.sh的脚本文件),x.sh的逻辑为先执行第一个jar包命令,后执行一个spark任务,第一个jar任务命令执行成功后返回的结果作为参数传递给第二个命令,再执行第二个spark-submit命令。不要问为什么不用两个action(一个为shellaction,另外一个为spark action)的话,啥叫需求,反正你懂。调试过程中,发现诸多问题,此类问题还不好解决,特写此分享,供各位同行少走弯路。我相信赠人玫瑰手有余香。此分享包含如下:

  • shell脚本文件
  • workflow.xml文件
  • job.properties文件
  • 错误摘要经验分享

环境:
Apache Ambari:2.7.3.0
HDP:HDP-3.1.0.0
oozie:4.3.1
oozie4.3.1官网地址

一、shell脚本文件

二、shell脚本文件

<?xml version="1.0" encoding="utf-8"?><workflow-app xmlns="uri:oozie:workflow:0.5" name="defaultBuilder"><start to="cid1129343684748382208"/><action name="cid1129343684748382208"><shell xmlns="uri:oozie:shell-action:0.1"><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><exec>${nameNode}/business/oozie/hub/hub.sh</exec><argument>参数1字符串</argument><argument>参数2字符串</argument><file>${nameNode}/business/oozie/hub/hub.sh</file><file>${nameNode}/business/oozie/hub/ostar-etl.jar</file><file>${nameNode}/business/oozie/dhe-dipc.jar</file><capture-output/></shell><ok to="end"/><error to="error"/></action><kill name="error"><message>spark failed.error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><end name="end"/>
</workflow-app>

三、 job.properties文件

nameNode=hdfs://bdpcluster
#yarn.resourcemanager.address
jobTracker=bj-smzy-scrm-cdp-test-v-52-134.xcm.cn:8050
queueName=default
jobRoot=business/oozie/scheduler
#workflow.xml存放位置
oozie.wf.application.path=${nameNode}/${jobRoot}/${schedulerId}oozie.use.system.libpath=true
#当前程序需要以来的其他JAR包路径
oozie.libpath=${nameNode}/business/ooziesecurity_enabled=false
dryrun=false
master=yarn
mode=cluster
sparkOpt=--executor-cores 5 --executor-memory 3G --num-executors 5 --conf spark.driver.cores=5 --conf spark.driver.maxResultSize=0 --conf spark.driver.memony=5gschedulerId=default-scheduler
jobName=bi-job

四、错误摘要经验分享

  1. 提示找不到jar,或者sh文件

请注意在workflow.xml文件中,是否包含file属性

  1. 执行第一个jar命令,提示找不到java命令( java: command not found)

A、请确认JDK环境变量是否正常
B、在sh命令中,需要添加 export JAVA_HOME=/usr/java/jdk1.8
C、如果添加上JAVA_HOME还是报错,则把配置环境变量的三个参数都export

  1. Cannot run program “hub.sh” (in directory “/hadoop/yarn/local/usercache/hdfs/appcache/application_1557221091029_0826/container_e65_1557221091029_0826_01_000002”): error=13, Permission denied

此问题不一定是权限问题,我刚开始出现此问题,赋777还是报这个错,最后发现是由于sh文件的格式为dos,需要set ff=unix下问题解决

  1. shell脚本中deploy-mode需要设置为client

1、如果设置为cluster,第二个命令不会执行,oozie status执行完第一个任务后,直接kill掉任务
2、由于oozie执行shell action的流程是随机找一台机器进行执行,所以请保证集群中每一台机器是否按照了yarn或sparak client(后续看能否指定某一台执行)

  1. shell的参数,我传输的是json字符串,参数大或特殊字符的时候,会出现被截断,一个参数会变成多个

所有参数请用双引号引起来,保证不被截断(主要是我shell太菜了,不然不会犯怎么低级的错误)

  1. Service org.apache.hadoop.mapreduce.v2.app.MRAppMaster failed in state INITED; cause: java.lang.NumberFormatException: For input string: “30s”
    java.lang.NumberFormatException: For input string: “30s”
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:589)
    at java.lang.Long.parseLong(Long.java:631)
    at org.apache.hadoop.conf.Configuration.getLong(Configuration.java:1429)
    at org.apache.hadoop.hdfs.client.impl.DfsClientConf.(DfsClientConf.java:247)
    at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:309)
    at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:293)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:157)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2812)
    at org.apache.hadoop.fs.FileSystem.access200(FileSystem.java:100)atorg.apache.hadoop.fs.FileSystem200(FileSystem.java:100) at org.apache.hadoop.fs.FileSystem200(FileSystem.java:100)atorg.apache.hadoop.fs.FileSystemCache.getInternal(FileSystem.java:2849)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2831)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:389)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:181)
    at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.getFileSystem(MRAppMaster.java:503)
    at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.serviceInit(MRAppMaster.java:287)
    at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
    at org.apache.hadoop.mapreduce.v2.app.MRAppMaster$4.run(MRAppMaster.java:1518)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836)
    at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.initAndStartAppMaster(MRAppMaster.java:1515)
    at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1448)

上线正式环境时,出现此错误,一头懵逼状态,还以为是数据问题,数据比对完成后,跟数据没半毛钱关系。最后发现,在mapred-site.xml配置文件中,多了一个配置项
mapreduce.job.user.classpath.first=true ,删除即可

  1. java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:1012) at cn.face.framework.etl.service.AbstractDataXAssemblyHandler.putDataxFile(AbstractDataXAssemblyHandler.java:111) at cn.face.framework.etl.service.AbstractDataXAssemblyHandler.assembly(AbstractDataXAssemblyHandler.java:82) at cn.face.framework.etl.util.ThreadImpl.importData(ThreadImpl.java:96) at cn.face.framework.etl.util.ThreadImpl.run(ThreadImpl.java:48) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

此错误是由于我第一个命令中,执行了创建文件的操作,让人的第一感觉是斜杠问题,百度一翻后,基本答案都是说由于操作系统的斜杆,但是我写的是java程序。用的File.separator,故不应该是此问题。经过理论查看,是由于权限问题。因为oozie shell的执行流程是随机找一台集群机器进行相应操作。故需要保证每台机器中,执行的用户都需要拥有相应文件夹的的权限。即:
chown -R devops:maint x目录
chmod 777 x目录/job

  1. 此文章持续更新。。。

oozie action shell 实战(完整配置文件)相关推荐

  1. k8s之Pod详解(五)【Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)】

    参考于Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级) Pod Pod的结构 每个Pod中都可以包含一个或者多个容器 这些容器可以分为两类: 用户自定义用的 ...

  2. 企业Shell实战-MySQL分库分表备份脚本

    本文来自 http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.ht ...

  3. 【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )

    文章目录 前言 一.Groovy 配置文件格式 二.Groovy 配置文件读取 二.完整配置文件及解析代码示例 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 G ...

  4. shell实例第0讲:shell脚本完整pdf文档下载

    shell脚本完整pdf文档下载 链接:https://pan.baidu.com/s/10NTBAHv0zyP-wDnlblVvLg 提取码:6myf shell脚本完整pdf文档目录如下:

  5. hue 用oozie调度shell(sqoop)脚本问题

    hue 用oozie调度shell(sqoop)脚本问题 真是搞了好几天 hue上的日志问题给的太有迷惑性了 问题一:用户权限问题 对应的更改文件权限就可以了 HADOOP_USER_NAME=${w ...

  6. spark python教程_Python Spark 2.0 Hadoop机器学习与大数据实战 完整pdf_IT教程网

    资源名称:Python Spark 2.0 Hadoop机器学习与大数据实战 完整pdf 第1章 Python Spark机器学习与Hadoop大数据 1 第2章 VirtualBox虚拟机软件的安装 ...

  7. 老男孩shell实战读书笔记 (6-10章节)

    老男孩shell教程 (6-10章节) shell脚本的条件测试与比较 在bash编程中,条件测试常用的语法形式如下表: 说明⚠️: 语法1中的test命令和语法2中的[]是等价的. 语法3中的[[] ...

  8. oozie调度shell脚本

    oozie调度任务的一般步骤如下: 创建工作目录并复制模板 在oozie的根目录下,有已经写好的配置文件模板,job.properties和workflow.xml,我们只需要复制过来修改即可,不用从 ...

  9. shell实战之日志脱敏

    本次实战目标为日志脱敏,将日志目录内的所有文件进行处理,凡是涉及到卡号和密码的信息,一律以"*"号替代,要替代的内容都从对应的标签内获取,本脚本执行目录 drwxr-xr-x 5 ...

最新文章

  1. ONNX MLIR方法
  2. 《精通自动化测试框架设计》—第1章 1.3节五天太久,还能压缩吗
  3. centos6.5下的elk部署
  4. 关于a标签的 href 与 onlick
  5. [PHP]php发布和调用Webservice接口的案例
  6. 怎么快速掌握一门新技术
  7. 本周NLP、CV、机器学习论文精选推荐
  8. 数据库mysql存储过程_[数据库]mysql存储过程的建立及使用
  9. VS2012编译PCL1.70的过程
  10. 高斯曲率求表面极值点
  11. day 69 orm操作之表关系,多对多,多对一(wusir总结官网的API)
  12. 推荐5个适合小白使用的论文文献查找网站!
  13. MyBatis官方文档
  14. android音乐播放器歌词解析,iOS 音乐播放器歌词解析
  15. linux recovery模式是什么,recovery.img是什么
  16. JavaScript实现点击一下显示,再点击一下隐藏的功能(使用工厂函数)
  17. 计算机无法显示输入字体,电脑中ps输入字体不显示是怎么回事
  18. ITIL 服务台:ITSM帮助员工创建实践
  19. Windows 下TSI721驱动软件使用
  20. 117道Java面试题及答案(大多都是项目里面所用到的技术点)

热门文章

  1. 计算机专业毕业设计论文答辩PPT模板,10套计算机毕业设计答辩PPT模板
  2. SQL语句大全,乔哥工作以后学到的所有的SQL都在这里
  3. sqlserver打开或创建mdf失败
  4. iOS获取UDID的方法
  5. 华为服务器sn号如何修改,linux 查询服务器sn号
  6. java宅急送下载_pom.xml · blucywei/java宅急送物流管理项目 - Gitee.com
  7. jCore中文本地化工作札记 - 2
  8. Linear equations
  9. ecef转换经纬度坐标 c语言代码,WGS84和ECEF坐标的转换
  10. VSCode代码格式化快捷键