我有一个脚本可以填写多个spark-submit作业的参数。当我将它们复制并粘贴到shell中时,作业会起作用,但是当我将字符串放入反引号并从Ruby中执行时,它们会失败。
spark-submit --master yarn-cluster \
--num-executors 2 \
--files ... \
--class ... \
-otherflags ...
Ruby返回
sh: 1: spark-submit: not found
即使spark-submit
在系统路径中。更令人困惑的是:
`spark-submit`
Ruby中的似乎正确调用了shell命令。
答案 0 :(得分:2)
当你在shell中的命令行时,与在Ruby中运行代码时相比,请考虑一下它们的不同之处。
shell定义了PATH
,它会查找命令,希望最终找到所需命令。
Ruby不会这样做,而是需要定义可执行文件的绝对路径。有多种方法可以做到,但最简单的方法是使用
where spark-submit
在命令行中,然后将其复制/粘贴到Ruby脚本中。最有可能的是你会得到类似的东西:
/usr/local/bin/spark-submit
或
/path/to/rubys/gems/.../bin/spark-submit
Ruby中的
spark-submit
似乎正确调用了shell命令。
Ruby正试图在当前目录中找到该命令。