繁体   English   中英

无法通过使用getopts的选项传递oozie shell操作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM