我在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来实现这一点?
2条答案
按热度按时间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
acruukt92#
我已经创建了lib/文件夹并将其上载到oozie.wf.application.path位置。
我可以将文件传递给shell操作。