2016-03-24 4 views
4

Попытка решить проблему с небольшими файлами путем сжатия файлов под разделов улей путем вставки команды перезаписи раздела в hadoop.улей уплотнения с использованием вставки переписать раздел

Запрос:

SET hive.exec.compress.output=true; 
SET mapred.max.split.size=256000000; 
SET mapred.output.compression.type=BLOCK; 
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; 
set hive.merge.mapredfiles=true; 
set hive.merge.size.per.task=256000000; 
set hive.merge.smallfiles.avgsize=256000000; 


INSERT OVERWRITE TABLE tbl1 PARTITION (year=2016, month=03, day=11) 
SELECT col1,col2,col3 from tbl1 
WHERE year=2016 and month=03 and day=11; 

Входные файлы:

Для целей тестирования у меня есть три файла под улья раздела (2016/03/11) в HDFS с размером 40 МБ каждый.

2016/03/11/file1.csv

2016/03/11/file2.csv

2016/03/11/file3.csv

Пример мой блок size is 128, поэтому я хотел бы создать только один выходной файл. Но я получаю 3 разных сжатых файла.

Пожалуйста, помогите мне получить конфигурацию улья, чтобы ограничить размер выходного файла. Если я не использую сжатие, я получаю единственный файл.

Hive Версия: 1,1

ответ

1

Интересно, что вы все еще получаете 3 файла при указании раздела при использовании сжатия, так что вы можете захотеть взглянуть на динамическое разделение или канаву секционирования и сосредоточиться на количестве картографов и восстановителей созданный вашей работой. Если ваши файлы малы, я мог бы видеть, как вы хотите, чтобы все они были в одном файле на вашей цели, но затем я также задал бы вопрос о необходимости сжатия на них.

Количество файлов, созданных в вашей цели, напрямую связано с количеством редукторов или картографов. Если SQL, который вы пишете, нужно уменьшить, количество создаваемых файлов будет таким же, как количество редукторов, используемых в задании. Это можно контролировать, установив количество редукторов, используемых в задании.

set mapred.reduce.tasks = 1; 

В вашем примере SQL там, скорее всего, не будет каких-либо редукторов используются, так что количество файлов в мишени равно числу картопостроителей используемых которое равно количеству файлов в источнике. Нелегко контролировать количество выходных файлов на задании только для карты, но есть несколько параметров конфигурации, которые можно попробовать.

Настройка для объединения небольших входных файлов, так что порождается меньшее количество картографов, значение по умолчанию - false.

set hive.hadoop.supports.splittable.combineinputformat = true; 

Попробуйте установить порог в байтах для входных файлов, что-нибудь под этим порогом будет пытаться быть преобразованы в карту присоединиться к которой может повлиять на количество выходных файлов.

set hive.mapjoin.smalltable.filesize = 25000000; 

Что касается сжатия, я бы играть с изменением типа сжатия используется только чтобы увидеть, если это делает никакой разницы в вашей продукции.

set hive.exec.orc.default.compress = gzip, snappy, etc... 
+0

#Salmonerd, как вы сказали, что нет редуктора не работает, потому что его карта только работа, я в основном пытаюсь решить проблему небольших файлов путем объединения в более крупные файлы с помощью вставки перезаписать в улом раздела. Позвольте мне попробовать настройки, предложенные вами, и я вернусь. –

+0

Работает как и ожидалось. Создал только один файл из нескольких небольших файлов. –

+0

Удивительно, какие настройки вы реализовали? – Jared

Смежные вопросы