2017-06-04 13 views
1

スパークはRDDで論理パーティションを作成します。私はそれに2つの質問があります: -同じノードでパーティションを処理していますか?

1)パーティションは、各パーティションを別々のノードで処理できる並列処理に役立ちます。私の質問は、私はマルチコア マシンを持っている場合、私は同じノード内のパーティションを処理できないのですか?

2)ファイルシステムからファイルを読み込んで、4つのパーティションで1つのRDDを作成したとします。各パーティションをRDDにさらに分割することができますか?例えば: -

firstRDD=sc.textFile("hdfs://...") 
//firstRDD contains four partition which are processed on four diff nodes 
secondRDD=firstRDD.filter(someFunction); 
// Now will each node create separate secondRDD which will have further paritions ? 

答えて

1

単一ノード内または4つのノードまでとすることができる4つのパーティションへの入力テキストファイル分割は、複数のパーティションに分割されていないれ、従って同じエグゼキュータによって評価されることそれらを最初に読んでください。 ただしの場合は、RDD /データフレームをrepartition(64エグゼキュータ用に64個のパーティションを持つなど)にすることができます。これはコストがかかりますが、計算上高価な作業で特に価値があるシャッフルを強制します。これが問題である一般的な状況は、GZIPファイルのような分割不可能なファイルを読むことです。単一のエグゼキュータは、サイズに関係なく、ファイルを読み込み(処理を実行する必要があります)!したがって、再分割することは、並列化された計算を容易にするため、多くのGZIPワークロードにとって非常に有益です。

+0

あなたが言ったのは、最初の読み込みで同じエグゼキュータで評価されます.4つの部分が4つのノードで処理される場合、エグゼキュータは4つありません。 'しかし、あなたは再パーティション化することができます.'パーティションがRDDで作成されると、明示的にパーティションを作成するまで、デフォルトでそれ以上のパーティション分割は行われませんか? –

+0

4つのノードがそれぞれ1つのパーティションで読み取られ、4つのエグゼキュータを意味する場合はYesです。 1つのパーティション内のデータは、変換(つまり、集計)に応じて、より多くのパーティションに分割できます。たとえば、1つの大きなgzipファイルを読み込み、いくつかの列を追加し、集計なしでデータをサニタイズして書き出すと、明示的に再パーティション化するよう指示しない限り、単一のエグゼキュータにワークロード全体が与えられます。 – Garren

+0

https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-rdd-partitions.html –

関連する問題