mapReduceとハイブ間の接続

マップの原理図:

 

処理する:

ブロックデータ:親愛なる車クマ車

マップ処理データ:スペースに従って除算し、Key-Value形式を出力します。キーは除算によって取得された文字であり、値は1です。

マップによって処理されるデータ:(dear、1)、(car、1)、(bear、1)、(car、1)

シャッフル:同じキーを同じリデュースに入れます

4(Dear、1)キーと値のペア。[Dear、Iterable(1、1、1、)]に変換され、2つのパラメーターとしてreduce()に渡されます。

reduce()内で、Dearの総数を4として計算し、出力(Dear、4)をキーと値のペアとして計算します

https://blog.csdn.net/ych0112xzz/article/details/81186204にアクセス し ます。
ハイブでの結合は、共通結合(削減フェーズで参加)とマップ結合(マップフェーズで参加)に分けることができます。

ハイブ共通結合

Hivesqlはmrタスクに変換され、yarnで実行されます

mapJoin  

マップステージ

  • ソーステーブルのデータを読み取ります。マップが出力されると、結合オン条件の列がキーとして使用されます。結合に複数の関連付けられたキーがある場合、これらの関連付けられたキーの組み合わせがキーとして使用されます。
  • マップによって出力される値は、結合後に気になる列です(selectまたはwhereで必要)。同時に、値には、この値がどのテーブルに対応するかを示すテーブルのタグ情報も含まれます。
  • キーで並べ替え
  • ソーステーブルのデータを読み取ります。マップが出力されると、結合オン条件の列がキーとして使用されます。結合に複数の関連付けられたキーがある場合、これらの関連付けられたキーの組み合わせがキーとして使用されます。
  • マップによって出力される値は、結合後に気になる列です(selectまたはwhereで必要)。同時に、値には、この値がどのテーブルに対応するかを示すテーブルのタグ情報も含まれます。
  • キーで並べ替え

シャッフルステージ

ハッシュの値に応じて、キー、および2つの表に同じ鍵が同じで低減していることを保証するように、異なるハッシュ値に応じて減少させるためのキー/値をプッシュ

フェーズを減らす

結合操作は、キーの値に従って完了します。その間、さまざまなテーブルのデータがタグによって識別されます。 
プロセスを説明するための例として、次のHQLを取り上げます。

SELECT
a.id,a.dept,b.age
FROM a join b
ON (a.id = b.id);

è¿éåå¾çæè¿°

    

hive-map-joinテーブルaが大きなテーブル、bが小さなテーブル、hive.auto.convert.join = trueであるとすると、Hiveは実行時に自動的にMapJoinに変換されます。

理由:シャッフルフェーズ中の大量のデータ送信を節約し、操作を減らす必要がなくなります

è¿éåå¾çæè¿°

  • プロセスに示されているように、最初はタスクAです。これはローカルタスク(クライアントでローカルに実行されるタスク)であり、小さなテーブルbのデータをスキャンし、HashTableデータ構造に変換して、次のように書き込みます。ローカルファイルファイルをDistributeCacheにロードした後、HashTableのデータ構造は次のように抽象化できます。
    | key | value | 
    | 1 | 26 | 
    | 2 | 34 |
  • -次はタスクBです。このタスクはReduceを使用しないMRです。MapTasksを開始して大きなテーブルaをスキャンします。マップフェーズで、aの各レコードをDistributeCacheのテーブルbに対応するHashTableに関連付け、結果を直接出力します。 
    -MapJoinにはReduceがないため、結果ファイルはMapによって直接出力されます。Mapタスクと同じ数の結果ファイルがあります。

ハイブグループの原則

https://blog.csdn.net/u013668852/article/details/79866931

複数フィールドでグループ化するgroupbyのフィールドの組み合わせをマップのキー値として使用します

select rank, isonline, count(*) from city group by rank, isonline;

GroupByのフィールドをマップの出力キー値に結合し、MapReduceソートを使用して、LastKeyをreduceフェーズに保存し、さまざまなキーを区別します。MapReduceプロセスは次のとおりです(もちろん、これは、Reduce側の非ハッシュ集計プロセスを説明するためだけのものです)

画像

おすすめ

転載: blog.csdn.net/qq_24271537/article/details/113359842