无法使用 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 调用相同的脚本,但我不确定我该怎么做。
我尝试将参数传递给 "exec" 以及 xml
中的 "file" 标记
当我尝试在 exec 标记中传递参数时,它给出了 "JavaNullPoint" 预期
执行标签
<exec>my_code.sh -F file_name</exec>
文件标签
<file>$/user/oozie/my_code.sh#$my_code.sh -F file_name</file>
当我尝试在文件标签中传递参数时,出现错误,"No such File or directory"。它正在 /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 操作。
我在 shell 中创建了一个脚本,并在我的脚本中使用 getopts 方法传递参数,如下所示:
sh my_code.sh -F"file_name"
其中 my_code.sh 是我的 unix 脚本名称,file_name 是我使用 getopts 传递给我的脚本的文件。
当我从命令行调用我的脚本时,这工作正常。
我想通过 oozie 调用相同的脚本,但我不确定我该怎么做。
我尝试将参数传递给 "exec" 以及 xml
中的 "file" 标记当我尝试在 exec 标记中传递参数时,它给出了 "JavaNullPoint" 预期
执行标签
<exec>my_code.sh -F file_name</exec>
文件标签
<file>$/user/oozie/my_code.sh#$my_code.sh -F file_name</file>
当我尝试在文件标签中传递参数时,出现错误,"No such File or directory"。它正在 /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 操作。