2017-05-13 9 views
1

内部でRDDでどのようにパーティションを再編成したのかわかりませんでしたか?私はパーティションの数を増やすためにRDD上で再パーティション化メソッドを呼び出すことができますが、内部でどのように実行されるのか理解しています。スパーク内部 - パーティションはメモリ内のすべてのパーティションをロードしますか?

と仮定すると、最初は5パーティションがあったと彼らが持っていた -

  • 第一パーティション - 100個の要素
  • 第二パーティション - 200個の要素
  • 第三パーティション - 500個の要素
  • 第四パーティション - 5000個の要素を
  • 第5パーティション - 200個の要素

一部のパーティションはHBaseからロードされ、データがHBaseで正しくソルトされなかったために歪んでしまい、一部のリージョンサーバーにエントリが多すぎることがありました。

この場合、パーティションを10にすると、すべてのパーティションが最初にロードされ、次にシャッフルして10個のパーティションが作成されますか?すべてのデータをメモリにロードできない場合、つまり、すべてのパーティションを一度にメモリにロードできない場合はどうなりますか? Sparkがすべてのパーティションをメモリにロードしない場合、どのようにカウントを知るのですか?また、データが10個のパーティションに正しくパーティション化されていることをどのように確認しますか?

答えて

1

私が理解したところから、repartitionは確実にshuffleをトリガーします。 Sparkmemory issueがスローされます、その後memoryにすべてのデータをロードすることができない場合はJob Logical Planから、次のドキュメントを約repartition

- for each partition, every record is assigned a key which is an increasing number. 
    - hash(key) leads to a uniform records distribution on all different partitions. 

言うことができます。したがって、Sparkのデフォルト処理はすべてmemoryで行われます。つまり、のデータには常に十分なメモリが必要です
Persistオプションを使用すると、メモリが不足している場合は、diskにデータを入力してsparkspillとすることができます。
Jacek Laskowskiについても説明します。
Understanding your Apache Spark Application Through Visualizationは、自分でテストして知るには十分なはずです。

関連する問題