MSK ремонт большого стола займет очень много времени - PullRequest
1 голос
/ 29 апреля 2020

У меня ежедневный прием данных в HDFS. Из данных в HDFS я генерирую таблицы Hive, разделенные по дате и другому столбцу. Один день имеет 130G данных. После генерации данных я запускаю msck repair. Теперь на каждую мску задач больше 2 часов. По моему мнению, msck просканирует данные всей таблицы (у нас есть данные за 200 дней) и затем обновит метаданные. Мой вопрос: есть ли способ, позволяющий msck только сканировать данные за последний день, а затем обновлять метаданные, чтобы ускорить весь процесс? Кстати, проблема с небольшими файлами отсутствует, я уже объединяю мелкие файлы до msck.

1 Ответ

0 голосов
/ 29 апреля 2020

При создании внешней таблицы или выполнении восстановления / восстановления разделов с этой конфигурацией:

set hive.stats.autogather=true;

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

Решение состоит в том, чтобы отключить его перед созданием / изменением таблицы / восстановлением разделов

set hive.stats.autogather=false; 

См. Эти связанные заявки: HIVE-18743 , HIVE-19489, HIVE-17478

Если вам нужна статистика, вы можете собирать статистику только для новых разделов, если это необходимо, используя

ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)]  
  COMPUTE STATISTICS 

См. Подробности здесь: ANALYZE TABLE

Также, если вы знаете, какие разделы следует добавить, используйте ALTER TABLE ADD PARTITION - вы можете добавить множество разделов в одну команду.

...