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

时间:2018-08-18 14:59:37

标签: shell hadoop oozie

我在shell中创建了一个脚本,并在脚本中使用getopts方法传递了参数,如下所示:

--k

其中my_code.sh是我的Unix脚本名称,而file_name是我使用getopts传递给脚本的文件。

当我从命令行调用脚本时,此方法工作正常。
我想使用oozie调用相同的脚本,但是我不确定该怎么做。

我尝试将参数传递给xml中的“ exec”和“ file”标记

当我尝试在exec标签中传递参数时,它给出了“ JavaNullPoint”期望值

exec 标记

sh my_code.sh -F"file_name"

文件标记

<exec>my_code.sh -F file_name</exec>

当我尝试在文件标签中传递参数时,出现错误,“没有这样的文件或目录”。它正在/ yarn / hadoop目录中搜索file_name。

任何人都可以建议我如何使用oozie实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

作为工作流程的一部分,您需要创建一个lib/文件夹,Oozie将在该文件夹中将脚本上载作为其过程的一部分。此目录也应该上传到oozie.wf.application.path位置。

之所以需要这样做,是因为Oozie将在任何随机的YARN节点上运行,并假装您有一百个节点集群,否则您必须确保每个服务器都有/user/oozie/my_code.sh文件可用(当然很难追踪)。当此文件可以放在HDFS上时,每个节点都可以在本地下载它。

因此,如果将脚本放在提交的工作流xml旁边的lib目录中,则可以直接按名称引用脚本,而不必使用#语法

然后,您将要为选择使用argument xml标签

https://oozie.apache.org/docs/4.3.1/DG_ShellActionExtension.html

答案 1 :(得分:0)

我已经创建了lib /文件夹,并将其上传到oozie.wf.application.path位置。

我能够将文件传递给我的shell操作。