Hive: объединение настроек конфигурации не работает

В Hive 2.2.0 я заполняю таблицу orc из другой исходной таблицы размером 1,34 ГБ, используя запрос

INSERT INTO TABLE TableOrc SELECT * FROM Table; ---- (1)

Запрос создает таблицу TableORC с 6 файлами orc, которые намного меньше, чем размер блока 256 МБ.

-- FolderList1
-rwxr-xr-x  user1   supergroup  65.01 MB    1/1/2016, 10:14:21 AM   1   256 MB  000000_0
-rwxr-xr-x  user1   supergroup  67.48 MB    1/1/2016, 10:14:55 AM   1   256 MB  000001_0
-rwxr-xr-x  user1   supergroup  66.3 MB     1/1/2016, 10:15:18 AM   1   256 MB  000002_0
-rwxr-xr-x  user1   supergroup  63.83 MB    1/1/2016, 10:15:41 AM   1   256 MB  000003_0
-rwxr-xr-x  user1   supergroup  69.11 MB    1/1/2016, 10:15:57 AM   1   256 MB  000004_0
-rwxr-xr-x  user1   supergroup  23.83 MB    1/1/2016, 10:16:02 AM   1   256 MB  000005_0

Чтобы потенциально удалить это, конфигурации ниже используются как предложено многими другими пользователями stackru, и TableORC усекается, и запрос (1) выполняется снова.

SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.size.per.task=128000000; -- (128MB)
SET hive.merge.smallfiles.avgsize=128000000; -- (128MB)

На этот раз результатом является TableOrc, имеющий 3 ORC-файла, а LOGS показывают 3 дополнительных задания MR.

-- FolderList2
 -rwxr-xr-x user1   supergroup  132.49 MB   1/1/2016, 11:47:01 PM   1   256 MB  000000_0
 -rwxr-xr-x user1   supergroup  130.12 MB   1/1/2016, 11:47:02 PM   1   256 MB  000001_0
 -rwxr-xr-x user1   supergroup  92.93 MB    1/1/2016, 11:47:03 PM   1   256 MB  000002_0

Мой вопрос заключается в том, почему размеры файлов ORC превышают 128 МБ, если для параметров конфигурации задано использование 128 МБ ( https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties).

hive.merge.size.per.task
Default Value: 256000000
Added In: Hive 0.4.0
Size of merged files at the end of the job.

1 ответ

Решение

Ваш начальный средний размер файла меньше, чем hive.merge.smallfiles.avgsizeИменно поэтому задача объединения начала объединять их. Первые два файла объединены 65,01 МБ + 67,48 МБ = 132,49 МБ, это больше, чем "hive.merge.size.per.task", поэтому задача объединения прекратит объединять этот полученный файл с большим количеством файлов. Он не будет разделен, чтобы быть точно 128M. Метод, которым это работает, довольно прост.

Другие вопросы по тегам