マップサイド結合と参加する

この投稿では、Hadoopマップ側の結合とVsについて説明します。参加します。また、Hiveでマップリデュース、結合テーブル、結合側、マップ側結合操作を使用する利点とは何かを学びます

このブログでは、 マップ側結合 および通常の結合操作に対するその利点 ハイブこれは、実装するために学ぶ必要がある重要な概念です。 しかし、これについて知る前に、まず次の概念を理解する必要があります。 「参加」 で結合を実行すると、内部で何が起こりますか ハイブ

参加する 2つのテーブル(またはデータセット)のレコードを結合する句です。
2つのテーブルAとBがあると仮定します。それらに対して結合操作を実行すると、AとBのすべての列の組み合わせであるレコードが返されます。





ここで、例を使用して通常の結合の機能を理解しましょう。

結合操作を適用するたびに、ジョブは2つのステージで構成されるMapReduceタスクに割り当てられます。 「マップステージ 」と「 ステージを減らす ’。マップステージ中のマッパーの仕事は '読んだ' 結合テーブルからのデータ 「返品」 インクルード 「結合キー」 そして 「価値を結合する」 中間ファイルにペアリングします。さらに、シャッフル段階では、この中間ファイルがソートされてマージされます。削減段階での削減者の仕事は、このソートされた結果を入力として受け取り、結合のタスクを完了することです。



  • マップ側の結合は結合に似ていますが、すべてのタスクはマッパーのみによって実行されます。

  • マップ側の結合は、タスクを最適化するための小さなテーブルに最も適しています。



マップ側の結合はどのようにタスクを最適化しますか?

2つのテーブルがあり、そのうちの1つが小さなテーブルであると想定します。マップリデュースタスクを送信すると、元の結合マップリデュースタスクの前にマップリデュースローカルタスクが作成されます。このタスクは、HDFSから小さなテーブルのデータを読み取り、メモリ内のハッシュテーブルに格納します。読み取った後、メモリ内のハッシュテーブルをハッシュテーブルファイルにシリアル化します。

次の段階では、 元のjoinMap Reduceタスクが実行されると、ハッシュテーブルファイルのデータがHadoop分散キャッシュに移動され、Hadoop分散キャッシュがこれらのファイルを各マッパーのローカルディスクに取り込みます。したがって、すべてのマッパーは、この永続的なハッシュテーブルファイルをメモリにロードして、以前と同じように結合作業を行うことができます。最適化されたマップ結合の実行フローを次の図に示します。最適化後、小さなテーブルを1回だけ読み取る必要があります。また、複数のマッパーが同じマシンで実行されている場合、分散キャッシュはハッシュテーブルファイルの1つのコピーをこのマシンにプッシュするだけで済みます。

マップ側結合を使用する利点:

  • マップ側の結合は、ソートとマージにかかるコストを最小限に抑えるのに役立ちます。 シャッフル そして 減らす ステージ。
  • マップ側の結合は、タスクを完了するまでの時間を短縮することで、タスクのパフォーマンスを向上させるのにも役立ちます。

マップ側結合のデメリット:

  • マップ側結合は、マップ側結合操作を実行するテーブルの1つがメモリに収まるほど小さい場合にのみ適切です。したがって、両方のテーブルで巨大なデータであるテーブルに対してマップ側結合を実行することは適切ではありません。

MapReduce結合の簡単な例:

2つのテーブルを作成しましょう。

doubleからintjavaに変換する方法
  • Emp :従業員名、従業員ID、所属する部門など、従業員の詳細が含まれます。

  • 部門: 部門名、部門IDなどの詳細が含まれます。

次の図に示すように2つの入力ファイルを作成して、作成したテーブルにデータをロードします。

employee.txt

dept.txt

それでは、データをテーブルにロードしましょう。

実行しましょう マップ側 参加する 2つのテーブルで、各従業員が働いている部門のリストを抽出します。

ここでは、 2番目のテーブル部門 小さなテーブルです。部門の数は常に組織内の従業員の数よりも少ないことを忘れないでください。

次に、通常のリデュース側結合を使用して同じタスクを実行しましょう。

両方の結合を実行しているときに、2つの違いを見つけることができます。

  • Map-reduce結合は、通常の結合にかかる時間と比較して、より短い時間でジョブを完了しました。

  • Map-reduce結合は、レデューサーの助けを借りずにジョブを完了しましたが、通常の結合は、1つのレデューサーの助けを借りてこのジョブを実行しました。

したがって、 マップ側の結合 テーブルの1つがメモリに収まり、短時間でジョブを完了するのに十分小さい場合は、が最善の策です。

リアルタイム環境 、大量のデータを含むデータセットが作成されます。したがって、データセットの1つが小さいサイズの場合、分析の実行とデータの取得には時間がかかります。そのような場合 マップ側の結合 より短い時間で仕事を完了するのに役立ちます。

Hadoopをマスターするのにこれほど良い時期はありません! Edurekaによる特別にキュレーションされたビッグデータとHadoopコースを今すぐ始めましょう。

参照:
https://www.facebook.com/notes/facebook-engineering/join-optimization-in-apache-hive/470667928919

関連記事:

整数のjavaソート配列リスト

ビッグデータトレーニングが組織を変える7つの方法