DEA / ドメイン1 データの取り込みと変換

分散コンピューティング

分散コンピューティングは、1台のコンピューターでは時間がかかりすぎる、または載り切らない大量のデータを、複数のコンピューター (ノード) に分けて同時に処理する考え方です。、、、 は、どれも内部で分散処理をしています。

DEA では、分散コンピューティングを定義できること、そしてパーティション、、ドライバーとなどの基本の言葉から、性能問題の原因と対処を読み取れることが問われます。

Point
  • Distributed = 分散した の意味です。
  • Node = 結節点 です。分散処理では、処理を担当する1台1台のコンピューターを指します。
  • MPP = Massively Parallel Processing (超並列処理) の略で、Redshift のようなデータウェアハウスの処理方式です。
  • 和訳

概要

分散処理は、「分ける」「それぞれで処理する」「まとめる」の3段階で進みます。

概要の図 大量のデータS3 分割パーティション ノード1処理 ノード2処理 ノード3処理 シャッフルキーごとに集め直す 結果
言葉意味
パーティションデータを分けた1つの塊です。1つのタスクが1つのパーティションを処理します。
並列処理複数のノードが同時に別のパーティションを処理することです。
集計や結合のために、同じキーのデータを同じノードへ集め直すことです。ネットワークとディスクを使うため重い処理です。
ノードを増やして処理能力を上げることです (水平スケーリング)。
データの局所性データの近くで処理し、ネットワークの転送を減らす考え方です。

主要技術

①MapReduce の考え方

MapReduce は、分散処理の基本の型です。Hadoop の処理モデルとして広まりました。

段階内容例 (単語の出現回数を数える)
Map各ノードが担当分のデータを読み、キーと値の組に変換します各行を単語に分け、(単語, 1) を出力します。
Shuffle同じキーの組を同じノードへ集めます「data」の組をすべて1つのノードへ送ります。
Reduceキーごとに値をまとめます「data」の 1 を合計して出現回数にします。

は、この考え方を発展させ、途中の結果をメモリに置いて繰り返し使えるようにしたため、ディスクに書き出す MapReduce より高速です。


②Spark のドライバーとエグゼキューター ⚠️ 頻出

と の主な処理エンジンである は、次の役割分担で動きます。

役割担当問題が起きたときの兆候
ドライバープログラムを解釈し、処理の計画を立て、タスクをに配ります。結果を集めることもあります大きな結果を collect() でドライバーに集めると、ドライバーのメモリ不足になります。
エグゼキューター各ノードでタスクを実行し、データをメモリに保持しますパーティションが大きすぎたり偏ったりすると、エグゼキューターのメモリ不足になります。
タスク1つのパーティションに対する処理の単位ですタスクの数が少なすぎると並列にならず、遅くなります。
ステージの境目で区切られたタスクのまとまりですシャッフルの多い処理は、ステージが増えて遅くなります。

Glue では、ワーカーの種類 (G.1X、G.2X など) と数が、エグゼキューターの大きさと数を決めます。EMR では、コアノードとタスクノードの台数とで決まります。


③遅延評価と実行計画

の処理には、変換 (transformation) とアクション (action) の2種類があります。

種類例動き
変換filter、select、join、groupByすぐには実行されず、処理の計画に追加されるだけです。
アクションcount、write、collect、showここで初めて、それまでの変換がまとめて実行されます。

この「アクションまで実行しない」仕組みを遅延評価 (lazy evaluation) と呼びます。Spark はアクションの時点で計画全体を見て、フィルターを読み込みの段階へ押し下げる (述語のプッシュダウン)、不要な列を読まない、といった最適化をします。

同じデータを何度もアクションで使う場合は、cache() でメモリに保持すると、毎回の読み直しを避けられます。


④データスキューとシャッフルの影響

分散処理の速さは、一番遅いタスクで決まります。キーの値に偏りがあると、特定のパーティションだけが大きくなり、そのタスクだけが長く走ります。これを (偏り) と呼びます。

症状原因対処
ほとんどのタスクは終わったのに、数個だけが長く走る結合や集計のキーの偏り (キーに乱数を付けて分散させる)、 の AQE のスキュー結合の最適化 (#58)
の読み書きが大きい大きなテーブル同士の結合、広い集計小さい方をにする、結合前に絞り込む
タスクが少なく、ノードが遊んでいるパーティション数が少ない、分割できない圧縮ファイル (gzip の大きな1ファイル)repartition で増やす、分割可能な形式 ( など) にする

⑤MPP (Redshift) と Spark の違い

観点 () ( / )
形リーダーノードがクエリの計画を立て、コンピューティングノード (スライス) が並列に実行しますドライバーが計画を立て、が並列に実行します
データの置き場所主に Redshift のマネージドストレージに、で各スライスに配置します などの外部のストレージから読みます
得意なこと繰り返される の集計、多数の利用者の同時のクエリ複雑な変換、多様な形式のデータ、の前処理
偏りの原因分散キーの選び方による行の偏りパーティションのキーの偏り

Redshift では、結合で使う列を分散キーにすると、同じキーの行が同じスライスに置かれ、結合時のデータの再配置 (Spark のにあたる動き) を減らせます。


試験対策

①判断マトリクス

問題文のキーワード考えること理由
1台では処理しきれない大量データの変換分散処理 ( / の )複数ノードで並列に処理します。
数個のタスクだけが長く走る → 、AQE一番遅いタスクが全体の時間を決めます。
ドライバーのメモリ不足collect() で大きな結果を集めていないか結果は などに書き出します。
大きなテーブルと小さなテーブルの結合が遅いを避けます。
ノードを増やしても速くならないパーティション数、分割できないファイル並列にできる単位が足りません。
同じ中間結果を何度も使うcache()再計算と読み直しを避けます。
繰り返しの 集計を多数の利用者が実行 の の集計に向きます。

②よくある誤答

  • ノードを増やせば必ず速くなると考えること。やパーティションの不足があると、増やしても一部のタスクが足を引っ張ります。
  • filter を書いた時点で処理が走ると考えること。 は遅延評価で、アクションの時点でまとめて実行します。
  • を軽い処理と考えること。ネットワークとディスクを使う、分散処理で最も重い部分の1つです。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください