ファイルを読み込んでいくつかの操作を行い、指定されたパスで出力ファイルを生成するspark javaプログラムを実行しているときに問題が発生しました。 マスタとスレーブが同じマシン上にある場合は、すべてが正常に動作します。スタンドアロンクラスタモードでは。 マルチマシンマルチノードクラスタで同じプログラムをデプロイすると問題が発生しました。つまり、マスターはx.x.x.102
で実行され、スレーブはx.x.x.104
で実行されています。 マスタースレーブは両方ともSSHキーを共有しており、互いに到達可能です。出力ファイルがApacheのスパークでスレーブマシンで生成されています
最初にスレーブは入力ファイルを読み取ることができませんでした。私はsc.textFile()
の前にsc.addFile()
に電話する必要があることを知りました。その問題を解決しました。しかし、出力パスの下の_temporaryフォルダのスレーブマシンで出力が生成されているのがわかりました。つまり:/tmp/emi/_temporary/0/task-xxxx/part-00000
ローカルクラスタモードでは、正常に動作し、/tmp/emi/part-00000
に出力ファイルを生成します。
私はSparkFiles.get()
を使用する必要があることを知りました。しかし、私はどのようにこのメソッドを使用するのか理解できません。
今私は
DataFrame dataobj = ...
dataObj.javaRDD().coalesce(1).saveAsTextFile("file:/tmp/emi");
を使用していますまでのいずれかは、私がSparkFiles.get()
を呼び出す方法を教えてくださいことはできますか?
要するに、ドライバが動作しているマシンに出力ファイルを作成するようにスレーブに指示するにはどうすればよいですか?
助けてください。
ありがとうございます。
要するに、マルチマシンのマルチノードクラスタ環境で、スレーブにドライバマシンに出力ファイルを保存する方法を教えてもらいたいのですが? – summary