gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:09:13 26 4
gpt4 key购买 nike

我在 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>

文件标签

<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 目录中,那么您可以直接按名称引用脚本,而不是使用 # 语法

然后,您需要为选项使用 argument xml 标记

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

关于shell - 无法使用 getopts 将选项传递给 oozie shell 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51909903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com