2017-10-28 13 views
0

私の入力は、1日の終わりまでにマージしたい小さなORCファイルが多数あり、100MBブロックに分割したいと思います。Hive Merge小さなORCファイル

私の入力と出力の両方S3と環境を使用していますが、EMRで、設定しています

ハイブパラメータ、

set hive.msck.path.validation=ignore; 
set hive.exec.reducers.bytes.per.reducer=256000000; 
SET hive.exec.dynamic.partition = true; 
SET hive.exec.dynamic.partition.mode = nonstrict; 
SET hive.mapred.mode = nonstrict; 

set hive.merge.mapredfiles=true; 
set hive.merge.mapfile=true ; 

set hive.exec.parallel = true; 
set hive.exec.parallel.thread.number = 8; 

SET hive.exec.stagingdir=/tmp/hive/  ; 
SET hive.exec.scratchdir=/tmp/hive/ ; 

set mapred.max.split.size=68157440; 
set mapred.min.split.size=68157440; 
set hive.merge.smallfiles.avgsize=104857600; 
set hive.merge.size.per.task=104857600; 
set mapred.reduce.tasks=10; 

私のINSERT文:

insert into table dev.orc_convert_zzz_18 partition(event_type) select * from dev.events_part_input_18 where event_type = 'ScreenLoad' distribute by event_type; 

さて問題は、あります私は合計で約500MBのサイズの80個の入力ファイルを持っています。この挿入文の後に、私はS3の4つのファイルを期待していましたが、これらのファイルはすべて1つのファイル必要な出力はありません。

は誰か、間違っている何が起こっているのか、私は知っている

+0

'mapred'のプロパティは、すべての –

+0

@ cricket_007はOKああ、おかげで確認します推奨されていません。私はちょうど答えを見つけました。クラスタリングを使用してパーティションをさらに複数の部分に分割できます。私のスパークの出力には小さなファイルがたくさんあり、Prestoを介してエンドユーザーにそれらの小さなファイルを公開すると、それらの小さなファイルをクエリするのが遅くなるため、ハイブをここで探検しています。https://community.hortonworks.com/content/supportkb/49637 /hive-bucketing-and-partitioning.html –

+0

小さなファイルの問題を解決するためにSparkで 'coalesce'または' repartition'を使うべきです –

答えて

1

を聞かせてくださいすることができますが、出力ファイルを制御するために2つの異なる概念を使用している:

  • パーティションを:セット:それはディレクトリ
  • がで配布設定しました各ディレクトリ内のファイル

各ディレクトリに4つのファイルが必要な場合は、ランダム番号だけで配布できます。たとえば、

insert into table dev.orc_convert_zzz_18 partition(event_type) 
select * from dev.events_part_input_18 
where event_type = 'ScreenLoad' distribute by Cast((FLOOR(RAND()*4.0)) as INT); 

しかし、あなたが照会する可能性のあるデータの一部の列で配布することをお勧めします。クエリ時間を改善できます。

詳細を読むことができますについて、それhere

+0

こんにちは@を試してみましたが、30パーティションを取得しています。 10ファイルになると思っているが、それでも30を得ることになります –

+0

あなたは正しいです、 'RAND'は0と1の間の倍を返します。私は答えを固定しました – lev

+0

私もこれを試しましたが、こちらのスクリーンショットを見てください。https://ibb.co/eFqorR –

関連する問題