クエリ最適化MapJoinに関連したハイブ大きなテーブルと小さなテーブル

小さなテーブルとクエリに関連した大きなテーブルは、クエリ速度mapjoinを最適化するために使用することができます。
mapjoinは、それは何ですか?
MapJoinを理解する前に、別の方法で、CommonJoinをご紹介しましょう。
私たちは、SQL文を書くことはハイブ、ハイブSQLは、MapReduceのタスクに解析されることを知っています。
単純なリレーショナルクエリの場合、CommonJoinミッション設計段階と地図がステージを減らします。
マッパーは接続テーブルとキー値と中間出力ファイルに接続されたキー接続からデータを読み出します。Hadoopのいわゆるシャッフル段階でのソートとマージにこれらのキー。ソート減速機の入力として結果、および実際の参加。それは、ソートとマージ必要とするので、非常に高価な位相をシャッフルします。
従って、コストシャッフル相を削減し、タスクのパフォーマンスを向上させることができます減らします。
MapJoinはシャッフルとeducer段のコストを削減し、唯一の地図段階に参加することを目指しています。

MapJoinの作業メカニズムを示します:

 

ローカル・タスク(タスククライアントでローカルに実行される)、データを走査する責任B小さなテーブル、ハッシュテーブルのデータ構造に変換してあり、且つ、ローカルファイル、ファイルに書き込ま1)タスクA、中に分散キャッシュDistributeCacheにロードされました。
2)無削減MRのタスクであるタスクB、MapReduceは大きなテーブルのスキャンを開始します。マップ段階において、直接DistributeCacheに対応し、各関連するハッシュテーブルの記録及びBによれば、結果を出力します。
3)があるので何MapJoinは下げない、出力ファイルを直接地図、どのように多くのMapTaskので、その多くの結果ファイルがあります。

オープンMapJoin機能にコマンドラインで:
TRUEに設定hive.auto.convert.join =;
Hivev0.7前に、プロンプトヒント/ * + mapjoin(テーブル)が必要* / MapJoinが行われます。
デフォルト値は、デフォルトで有効になっMapJoin、0.7の後に真です。
ハイブが自動的に小さなテーブルであるテーブルを決定することができ、小さなテーブルはそんなに小さなテーブルのですか?
パラメータによってhive.mapjoin.smalltable.filesize = 25000000の決定、デフォルトは25Mです。

したがって前部および後部にjion小さなテーブルは、効果は、ハイブは自動的に小さなテーブルが誰であるかを判断するのと同じであり、それがメモリにロードされます。
。Bigtableのsmalltable Sに参加= ON s.id b.idからSELECT B * B;
。B SELECT *参加Bigtableのsmalltable S B = ON s.id b.idから。

おすすめ

転載: www.cnblogs.com/lucas-zhao/p/12025000.html