无法使用getopts将选项传递给oozie shell操作

iswrvxsc  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(379)

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

sh my_code.sh -F"file_name"

其中my_code.sh是我的unix脚本名,file_name是我使用getopts传递给脚本的文件。
当我从命令行调用我的脚本时,它工作得很好。
我想使用oozie调用同一个脚本,但我不知道如何才能做到这一点。
我尝试将参数传递给xml中的“exec”和“file”标记
当我尝试在exec标记中传递参数时,它给出了“javanullpoint”期望值
exec标签

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

文件标签

<file>$/user/oozie/my_code.sh#$my_code.sh -F file_name</file>

当我试图在文件标记中传递参数时,我得到了一个错误,“没有这样的文件或目录”。它正在/yarn/hadoop目录中搜索文件名。
有谁能建议我如何使用oozie来实现这一点?

nbysray5

nbysray51#

你需要创建一个 lib/ 文件夹作为工作流的一部分,oozie将在其中上载脚本作为其过程的一部分。这个目录也应该上传到 oozie.wf.application.path 位置。
之所以需要这样做,是因为oozie将在任何随机的yarn节点上运行,并假设您有100个节点的集群,否则您必须确保每个服务器都有 /user/oozie/my_code.sh 文件可用(当然很难跟踪)。当这个文件可以放在hdfs上时,每个节点都可以在本地下载它。
因此,如果将脚本放在提交的工作流xml旁边的lib目录中,则可以直接按名称引用脚本,而不是使用 # 语法
然后,你会想使用 argument 选项的xml标记
https://oozie.apache.org/docs/4.3.1/dg_shellactionextension.html

acruukt9

acruukt92#

我已经创建了lib/文件夹并将其上载到oozie.wf.application.path位置。
我可以将文件传递给shell操作。

相关问题