2016-08-10 4 views
5

私はSpark 1.6.0を使用しています。私はlog4j.propertiesと他の顧客のプロパティファイルのようないくつかのプロパティファイルを渡したいと思います。 --filesを使うことができますが、SparkContextにaddFileというメソッドがあることもわかりました。両方のオプションが同じであると仮定して、プログラムでファイルを追加するのではなく、--filesを使うのが好きでしたか?SparkContext.addFile vs spark-submit --files

--filesに関する多くのドキュメントが見つかりませんでした--files & SparkContext.addFile both options same?

参考文献約--filesおよびSparkContext.addFileについて見つけました。

答えて

9

これは、Sparkアプリケーションがクライアントモードで実行されているかクラスタモードで実行されているかによって異なります。

クライアントモードドライバ(アプリケーションマスタ)はローカルで実行されており、ローカルファイルシステム内で使用できるため、プロジェクトからこれらのファイルにアクセスできます。 SparkContext.addFileは、ローカルファイルを見つけ、期待どおりに動作するはずです。

アプリケーションがクラスタモードで実行されている場合。アプリケーションは、spark-submitを介して提出されます。つまり、アプリケーション全体がSparkマスターまたはYarnに転送されます.SparkマスターまたはYarnは、特定のノード上および分離した環境内のクラスター内でドライバー(アプリケーションマスター)を起動します。この環境には、ローカルプロジェクトディレクトリへのアクセス権がありません。したがって、必要なファイルもすべて転送する必要があります。これは--filesオプションで実現できます。 jarファイル(Sparkアプリケーションの依存関係)にも同じ概念が適用されます。クラスタモードでは、アプリケーションマスタのクラスパス内で使用できるようにするには、 - jarsオプションを使用して追加する必要があります。 PySparkを使用する場合、 - py-filesオプションがあります。

+1

SparkContext.addFile java docは「すべてのノードでこのSparkジョブでダウンロードするファイルを追加してください」と言っているので、--filesのように見えますが、addFileもすべてのノードにファイルを転送しますか? –

+1

アプリケーションの一部が分散実行されているため(Sparkはクラスタコンピューティングフレームワークなので)、すべてのノードでリソースが必要になる可能性が高いため、すべてのコンピューティングエグゼキュータでアクセスできるように配布されます。 – gclaussn

+1

私はクラスタモードで実行している場合、私はaddFileまたは--fileを使用してファイルをクラスタに転送できますか?クライアントモードの場合は、addFileとnot - filesを使用するだけです。 –