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がキー値ベースの場合、パーティションは構成可能です。パーティションのプロパティ
- 同じパーティション内のタプルは、同じマシン内にあることが保証されています。
- クラスタ内の各ノードには、複数のパーティションを含めることができます。
- パーティションの総数は構成可能であり、デフォルトでは、すべてのエグゼキューターノードのコアの総数に設定されています。
Sparkでのパーティショニングの種類
Sparkは2種類のパーティショニングをサポートしています。
- ハッシュ分割 :Javaを使用 Object.hashCode パーティションを決定する方法 パーティション= key.hashCode()%numPartitions。
- 範囲分割 :範囲を使用して、範囲内にあるキーをそれぞれのパーティションに配布します。この方法は、キーに自然な順序があり、キーが負でない場合に適しています。以下のコードスニペットは、レンジパーティショナーの使用法を示しています。
拡張と実装のJavaの違い
コード例
ワーカーノード間でデータを分割する方法の例を見てみましょう。完全なScalaコードが利用可能です ここに 。
これが12座標(タプルとして)のテストデータです。
作成する org.apache.spark.HashPartitioner サイズ2の場合、キーはキーのハッシュコードに基づいてこれら2つのパーティションに分割されます。
c ++ sort int array
次に、ペアを検査して、次のようなさまざまなキーベースの変換を実行できます。 foldByKey そして reduceByKey。
要約すると、パーティショニングにより、キーベースの変換の実行速度が大幅に向上します。
質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。
関連記事:
Hadoopをマスターした後にSparkを学ぶ必要がある理由