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. Метод, которым это работает, довольно прост.