Что делает MSCK REPAIR TABLE за кулисами и почему он такой медленный? - PullRequest
0 голосов
/ 07 декабря 2018

Я знаю, что MSCK REPAIR TABLE обновляет метастор с текущими разделами внешней таблицы.

Для этого вам нужно всего лишь ls сделать в корневой папке таблицы (с учетом таблицыразделен только на один столбец) и получает все его разделы, очевидно, операция <1s.</p>

Но на практике операция может занять очень длительное время выполнения (или даже тайм-аут при запуске в AWS Athena ).

Итакмой вопрос: что на самом деле делает MSCK REPAIR TABLE за кулисами и почему?

Как MSCK REPAIR TABLE находит разделы?


Дополнительные данные, если они актуальны:

Все наши данные на S3, они медленныепри работе в EMR (Hive) или Athena (Presto) в таблице ~ 450 разделов, каждый раздел имеет по 90 файлов avg, всего 3 гигабайта для раздела, файлы в формате Apache parquet

1 Ответ

0 голосов
/ 11 декабря 2018

Вы правы в том смысле, что он читает структуру каталогов, создает из нее разделы, а затем обновляет метасредство улья.Фактически, в последнее время команда была улучшена для удаления несуществующих разделов из metastore.Пример, который вы приводите, очень прост, поскольку он имеет только один уровень ключей секционирования.Рассмотрим таблицу с несколькими ключами разделов (на практике распространено 2-3 ключа разделов).msck repair придется выполнить полный обход всех подкаталогов в каталоге таблицы, проанализировать имена файлов, убедиться, что имена файлов действительны, проверить, существует ли раздел в метастазах, и затем добавитьединственные разделы, которых нет в метастазах.Обратите внимание, что каждый листинг в файловой системе представляет собой RPC для namenode (в случае HDFS) или вызов веб-службы в случае S3 или ADLS, что может увеличить время.Кроме того, чтобы выяснить, присутствует ли раздел в metastore или нет, необходимо выполнить полный список всех разделов, о которых metastore знает для таблицы.Оба эти шага могут потенциально увеличить время, необходимое для команды на больших таблицах.Производительность таблицы восстановления MSK была значительно улучшена в последнее время Hive 2.3.0 (см. HIVE-15879 для более подробной информации).Вы можете настроить hive.metastore.fshandler.threads и hive.metastore.batch.retrieve.max для повышения производительности команды.

...