2016-08-17 24 views
0

複数のスパーク送信ジョブのパラメータを埋め込むスクリプトがあります。ジョブはコピーしてシェルに貼り付けると機能しますが、文字列をバッククォートに入れてRubyから実行すると失敗します。スクリプトはシェルで動作しますがRubyでは動作しません

spark-submit --master yarn-cluster \ 
    --num-executors 2 \ 
    --files ... \ 
    --class ... \ 
    -otherflags ... 

Rubyは​​は、システム・パスであっても

sh: 1: spark-submit: not found 

を返します。さらに混乱するのは、Ruby内のRubyが正しくシェルコマンドを呼び出すようです。

+0

どのようにルビーを使いますか?どのように正確にあなたのルビースクリプトでバックティックを使用していますか? – infiniteRefactor

+0

私はテンプレートシェルスクリプトをとり、変数を記入し、 '#{shell_script}'を使って実行します。私は、私のマシン上でルビがどんなものであれ「ルビー」を使っています。 –

答えて

2

Rubyでコードが実行されている場合とは異なり、シェルのコマンドラインで何が違うかを考えてみましょう。

シェルはそれがうまくいけば、最終的に所望のものを見つけ出す、コマンドを探して歩く定義PATHを有しています。

Rubyはそれをしない、代わりに、あなたは実行ファイルへの絶対パスを定義する必要があります。その後、コピー/あなたのRubyスクリプトの中にあることを貼り付け、そこにそれを行うための様々な方法がありますが、最も簡単なのは、コマンドラインで

where spark-submit 

を使用することです。 Rubyの内

/usr/local/bin/spark-submit 

または

/path/to/rubys/gems/.../bin/spark-submit 

​​

が正しくシェルコマンドを呼び出すようだ:ほとんどの場合、あなたのようなものになってしまいます。

Rubyは現在のディレクトリでコマンドを見つけようとしています。