2016-06-16 6 views
0

Hive 1.2でベーステーブルを作成するために、約14個のテーブルを結合しています。各テーブルには、数百万レコードを持っていると私はORCファイル形式を使用していたクエリHiveの多くのテーブルで効果的な結合を実行する

hive.exec.dynamic.partition=true; 
hive.exec.max.dynamic.partitions.pernode=200000; 
hive.exec.max.dynamic.partitions=200000; 
hive.exec.max.created.files=250000; 
hive.enforce.bucketing=true; 
hive.auto.convert.join=false; 
mapreduce.map.memory.mb=8192; 
mapreduce.reduce.memory.mb=8192; 
mapred.reduce.child.java.opts=-Xmx8096m; 
mapred.map.child.java.opts=-Xmx8096m; 
hive.exec.dynamic.partition.mode=nonstrict; 

を実行し、IDに基づいてテーブルをバケット化し、年、四半期、月に基づいて、テーブルを分割する際にこれらのパラメータを使用します。この表は、明らかに結合の点で重い計算を実行します。他のパラメータを知らせたり、より効果的に結合を実行するために使用できる別の戦略を実行したりしてください。

答えて

0

ソーステーブル内のファイルとファイルブロックのサイズを調べることもできます。実行されるすべての結合は基本的に各ファイルブロックに対して実行されるため、ファイル/ブロックのサイズを大きくすると結合を少なくする必要があります。反面、ファイル/ブロックが大きくなると並列化が少なくなるため、適切なバランスを見つけるためにいくつかのテストを行う必要があります。以下の設定で小さなファイルマージを実行して、ブロックサイズを調整できます。これらの設定では、ファイルごとに1つのブロックが生成されるため、ほとんどの場合、パフォーマンスには最適です。

-- config settings to be added to the DML that loads your source tables 
-- these will merge the files into 500MB files with only one block per file 
-- as long as the block size is set higher than the file size then only one block will be produced 
set hive.merge.smallfiles.avgsize = 524288000; 
set dfs.block.size = 1073741824; 
関連する問題