[英]Need to pass Variable from Shell Action to Oozie Shell using Hive
[英]Unable to Pass option using getopts to oozie shell Action
我在shell中创建了一个脚本,并在脚本中使用getopts方法传递参数,如下所示:
sh my_code.sh -F"file_name"
其中my_code.sh是我的Unix脚本名称,而file_name是我使用getopts传递给脚本的文件。
当我从命令行调用脚本时,这工作正常。
我想使用oozie调用相同的脚本,但是我不确定该怎么做。
我尝试将参数传递给xml中的“ exec”以及“ file”标签
当我尝试在exec标记中传递参数时,它给出了“ JavaNullPoint”期望
执行标签
<exec>my_code.sh -F file_name</exec>
文件 TAG
<file>$/user/oozie/my_code.sh#$my_code.sh -F file_name</file>
当我尝试在文件标签中传递参数时,出现错误,“没有这样的文件或目录”。 它正在/ yarn / hadoop目录中搜索file_name。
谁能建议我如何使用oozie来实现这一目标?
您需要在工作流程中创建一个lib/
文件夹,Oozie将在其中将脚本上载作为其过程的一部分。 该目录也应该上传到oozie.wf.application.path
位置。
之所以需要这样做,是因为Oozie可以在任何随机的YARN节点上运行,并假装您有一百个节点集群,否则您必须确保每个服务器都具有/user/oozie/my_code.sh
文件(当然很难追踪)。 当此文件可以放在HDFS上时,每个节点都可以在本地下载它。
因此,如果将脚本放在提交的工作流xml旁边的lib目录中,则可以直接按名称引用脚本,而不必使用#
语法
然后,您将对opts使用argument
xml标签。
https://oozie.apache.org/docs/4.3.1/DG_ShellActionExtension.html
我已经创建了lib /文件夹,并将其上传到oozie.wf.application.path位置。
我能够将文件传递给我的shell操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.