Sparkでのパーティショニングの謎を解き明かす



このブログでは、Sparkでのパーティション分割、パーティションタイプ、およびキーベースの変換の実行速度がどのように向上するかについて知っておく必要があるすべてのことを説明しています。

PrithvirajBoseによる寄稿

Sparkの 復元力のある分散データセット (プログラミングの抽象化)は遅延評価され、変換は有向非巡回グラフ(DAG)として保存されます。したがって、RDDに対するすべてのアクションにより、SparkはDAGを再計算します。これがSparkで復元力を実現する方法です。これは、ワーカーノードに障害が発生した場合、DAGを再計算するだけでよいためです。





それも キャッシュする必要があります (適切なストレージレベルで永続化)RDDで頻繁にアクションを実行しても、SparkがDAGを再計算する必要がないようにRDD。このブログで取り上げられているトピックは、ApacheSparkおよびScala認定に基本的に必要です。このブログで取り上げられているトピックは、基本的に

なぜパーティショナーを使用するのですか?

クラスタコンピューティングの中心的な課題は、ネットワークトラフィックを最小限に抑えることです。データがKey-Value指向の場合、RDDでの後続の変換では、ネットワーク全体でかなりの量のデータがシャッフルされるため、パーティショニングが不可欠になります。同様のキーまたはキーの範囲が同じパーティションに格納されている場合、シャッフルが最小限に抑えられ、処理が大幅に高速化されます。



ワーカーノード間でデータをシャッフルする必要がある変換は、パーティション化の恩恵を大きく受けます。そのような変換は cogroup、groupWith、join、leftOuterJoin、rightOuterJoin、groupByKey、reduceByKey、combineByKey そして 調べる

RDDがキー値ベースの場合、パーティションは構成可能です。

パーティションのプロパティ

  1. 同じパーティション内のタプルは、同じマシン内にあることが保証されています。
  2. クラスタ内の各ノードには、複数のパーティションを含めることができます。
  3. パーティションの総数は構成可能であり、デフォルトでは、すべてのエグゼキューターノードのコアの総数に設定されています。

Sparkでのパーティショニングの種類

Sparkは2種類のパーティショニングをサポートしています。

  • ハッシュ分割 :Javaを使用 Object.hashCode パーティションを決定する方法 パーティション= key.hashCode()%numPartitions。

hash-partitioning-demystifying-partitioning-in-spark



  • 範囲分割 :範囲を使用して、範囲内にあるキーをそれぞれのパーティションに配布します。この方法は、キーに自然な順序があり、キーが負でない場合に適しています。以下のコードスニペットは、レンジパーティショナーの使用法を示しています。

拡張と実装のJavaの違い

コード例

ワーカーノード間でデータを分割する方法の例を見てみましょう。完全なScalaコードが利用可能です ここに

これが12座標(タプルとして)のテストデータです。

作成する org.apache.spark.HashPartitioner サイズ2の場合、キーはキーのハッシュコードに基づいてこれら2つのパーティションに分割されます。

c ++ sort int array

次に、ペアを検査して、次のようなさまざまなキーベースの変換を実行できます。 foldByKey そして reduceByKey。

要約すると、パーティショニングにより、キーベースの変換の実行速度が大幅に向上します。

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。

関連記事:

Hadoopをマスターした後にSparkを学ぶ必要がある理由

ApacheSparkとHadoopMapReduce