我在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实现这一目标吗?
答案 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操作。