Hive Distinct Query требует времени, когда у нас есть больше файлов - PullRequest
0 голосов
/ 17 октября 2019

Структура таблицы -

hive> desc table1;
OK
col1 string
col2 string
col3 string
col4 bigint
col5 string
Time taken: 0.454 seconds, Fetched: 5 row(s);

Количество лежащих в основе файлов -

[user@localhost ~]$ hadoop fs -ls /user/hive/warehouse/database.db/table | wc -l
58822
[user@localhost ~]$

Отдельный запрос - select distinct concat(col1,'~',col2,'~',col3) from vn_req_tab;

Total records - ~2M Above query runs for 8 hours.

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

1 Ответ

1 голос
/ 18 октября 2019

У вас очень большое количество маленьких файлов, и это главная проблема. Когда вы выполняете запрос, преобразователь 1 выполняется для каждого файла, таким образом, существует много сопоставителей, которые запускают каждый преобразователь для небольшого фрагмента данных (по 1 файлу каждый), что означает, что они потребляют ненужные ресурсы из кластера и ждут завершения других.

Обратите внимание, что hadoop идеально подходит для больших файлов с большими данными.

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

Попробуйте установитьнижеприведенные свойства

set mapred.min.split.size=100000000; // u can set max.split.size for optimal performance.

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

set mapred.min.split.size=100000000;

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

...