ハイブチューニングのヒント

1.Fetchクロール

set hive.fetch.task.conversion=more(默认)
1

手段をフェッチフェッチ、いくつかのケースのためのハイブクエリは必ずしもMapReduceの計算を使用することはできません。
このプロパティがそれ以上に設定された後、グローバル検索で、フィールド、限界を見つけるので、MapReduceのを離れて見ていません。設定後の文のすべてのタイプのどれものMapReduceを探しに行かなければなりません。

2.ローカルモード

set hive.exec.mode.local.auto=true(开启本地模式)
1

ハイブローカルモードでは、単一のマシン上のすべてのタスクを処理することができます。小さなデータセットの場合、実行時間を大幅に短縮することができる
データ量がこの値よりも小さい場合、ローカルのMR方法を使用して、ローカルモードを開いた後にローカルMRを設定するための入力データの最大量1.

set hive.exec.mode.local.auto.inputbytes.max=134217728(默认)
1

データ量がこの値よりも小さい場合、ローカルのMR方法を使用して、ローカルモードを有効ローカルMR 2の入力ファイルの最大数を設定します

set hive.exec.mode.local.auto.input.files.max=4(默认)
1

表3.最適化

3.1小さなテーブル大きなテーブルジョイン(左側に必要な小さなテーブル。)

注意:ハイブの新バージョンでは、小さなテーブルのJOIN JOINと大きなテーブルが最適化された小さなテーブルの上に大きなテーブルがあります。左右の小さなテーブルには有意な差がありません

3.2大きなテーブルには、大きなテーブルを結合します

テーブル内の多くのNULL値がある場合のMapReduceプロセスになり、空気がキー値となり、対応する値は、値の多くになり、その値はメモリ不足によって引き起こさ減らすと共にキーに到達する;そう空気をフィルタリングする方法を見つけます値。
1.検索結果が空ではありません

   insert overwrite table jointable select n.* from 
   (select * from nullidtable where id is not null ) n left join ori o on n.id = o.id;
12

キーを避けるために2.クエリNULL値とそれに割り当てられた乱数は、nullです

insert overwrite table jointable
select n.* from nullidtable n full join ori o on 
case when n.id is null then concat('hive', rand()) else n.id end = o.id;
123

注:このメソッドは、データ・スキューの問題を解決することができます

3.3MapJoin

ステージに参加完了を削減:いいえMapJoin MapJoin場合、または条件を満たしていない、意志はその後、ハイブが共通に変換パーサは、すなわち、操作に参加しましょう。データが発生しやすいスキュー。MapJoin小さなテーブルには、すべての減速処理は避け、最後にメモリ・マップに参加ロードすることができます。

MapJoinを設定します。

set hive.auto.convert.join = true(默认)
1

バルブは、大きなテーブル小さなテーブル(デフォルト25M考え小さなテーブル)の値を設定します。

 set hive.mapjoin.smalltable.filesize=25000000;
1

3.4Group BY

デフォルトでは、同じ位相地図キーは、それが終わりを削減完成されている重合中のすべての傾斜ではない、大きすぎるキーデータを分散データを削減、多くの重合操作は、最後のセグメントの今部分的に重合マップの端はで減らすことができます結果を得ます

重合パラメータの開放端地図
地図セグメントの重合か、デフォルトはtrueです

hive.map.aggr = true
1

地図重合操作終了のエントリ数

hive.groupby.mapaggr.checkinterval = 100000
1

データスキューロードバランシングは、(デフォルトはfalse)がある場合

hive.groupby.skewindata = true
1

注意:オプションをtrueに設定すると、結果のクエリプランは、2つのMRジョブを持っています。最初のMRジョブは、地図の出力結果は、ランダムに各重合操作を削減するために配布されるセクションを行い削減し、その結果を出力し、このプロセスの結果がで削減異なるに配布する鍵そうすることで、グループと同じですその後、分散型(このプロセスはキーによる同グループは同じを削減するために配布されることを確認することができます)を削減し、最終的には最終的に完全なキーによってグループが結果第2のMRジョブ前処理データ;ので、負荷分散の目的を達成するために重合操作。

再カウントに3.5Count(個別)

個別カウントデータは大容量のデータを使用することは一つだけのMapReduceジョブを完了することは困難になる際に劣らず影響しない場合には、MapReduceのを使用することです。これは、パケットがグループを使用する必要が二組のMapReduceセットmapreduce.job.reduces = 5を使用するために完了されているが、これは低減負荷を軽減軽減MapReduceの最初の工程は地図及び5によって達成されるように、それが使用されますが、マルチジョブが行われますが、大容量のデータの場合には、これは間違いなく価値があります。

3.6ランクフィルター

  • 列のプロセスは:選択して、パーティションの使用、ろ過し、より少ない選択をするために、唯一の希望の列を取ります*
  • 行:外部の関連付けを使用する場合、それは次に濾過し、最初に関連付けられたテーブル全体をライトバックしますサブフィルタ条件テーブル場合、パーティションに切断。

例:
条件、次いで濾過1.テスト最初のリンク2つのテーブル

hive (default)> select o.id from bigtable bjoin ori o on o.id = b.idwhere o.id <= 10;
1

サブクエリ、関連テーブル後2

hive (default)> select b.id from bigtable b join (select id from ori where id <= 10 ) o on b.id = o.id;
1

3.7。動的なパーティショニング

リレーショナルデータベース、パーティションテーブルの挿入データ、データベースは自動的に適切なパーティションへのデータの値に基づいて、フィールドを分割し、ハイブはまた、同様の機構、すなわち、動的パーティション(動的パーティション)を提供するが、ハイブ動的パーティショニングを使用して、対応する構成が必要です。
設定するすべてのプロパティの初

set hive.exec.dynamic.partition = true;
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.exec.max.dynamic.partitions = 1000;
set hive.exec.max.dynamic.partitions.pernode = 100;
set hive.exec.max.created.files = 100000;
set hive.error.on.empty.partition = false;
123456

動的分割のシミュレーション

 insert overwrite table ori_partitioned_target partition (p_time)
select id, time, uid, keyword, url_rank, click_num, click_url, p_time from ori_partitioned;
12

4.データ傾い

4.1合理的なセット数の地図

スライス設定値

set mapreduce.input.fileinputformat.split.maxsize=???
1

4.2小さなファイルをマージ

合併マップの小さなファイルの実装前に、マップの数を減らす:CombineHiveInputFormatは、小さなファイルがある
機能(システムのデフォルトフォーマット)の合併を。HiveInputFormatは小さなファイルのための機能をマージしません。

set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
1

複雑なファイルの数が4.3増加の地図

 set mapreduce.job.maps =???
1

4.4合理的なセット数の削減

1の数減らす調整する方法
デフォルトの256メガバイトを減らし各処理のデータを

hive.exec.reducers.bytes.per.reducer=256000000
1

削減の各タスクの最大数、デフォルトは1009です

hive.exec.reducers.max=1009
1

式の数を減らします

N=min(参数2,总输入数据量/参数1)
1

2.調整する第二の方法は、の数を減らします

set mapreduce.job.reduces=???
1

3.reduce番号良くありません

  • 過度の消費は、起動と初期化時間とリソースを削減します。
  • また、削減数は、あなたが小さなたくさんのファイルを生成する場合は、次のタスクへの入力としてこれらの小さなファイルならば、あまりにも多くの小さなファイルの問題、その後、出力ファイルの数があるでしょう、あなたはまた、表示されます。設定を減らします我々はまた、2つの原則の数を考慮する必要があります。数を減らし、適切な使用して大量のデータを処理して、単一タスク処理が右にデータ量を削減すること。

4.5並列実行

パラメータを設定することにより、Hive.exec.parallelは、それが同時に開くことができ、本当です。しかし、共有クラスタ内で、我々は並列位相増加ジョブは、クラスタの利用率が増加した場合、次の注意を払う必要があります。

set hive.exec.parallel=true; //打开任务并行执行
set hive.exec.parallel.thread.number=16; //同一个 sql 允许最大并行度,默认为 8。

おすすめ

転載: blog.51cto.com/14309075/2415633