В Apache Hive базе данных с большим количеством внешних таблиц требуется слишком много времени для DROP CASCADE

Я нашел много ответов о том, КАК удалить БД и все ее таблицы, но ничего не объясняет, почему для удаления требуется ~3-4 секунды на таблицу, по-видимому, в SERIAL (один за другим).

У меня есть база данных с 2414 ВНЕШНИМИ таблицами, указанными на места паркета, и DROP DATABASE <db> CASCADE; может потребоваться 1-2 ЧАСА, чтобы просто удалить метаданные для БД.

В отдельном сеансе я могу повторно SHOW TABLES IN <deleted DB>;и наблюдайте, как количество столов уменьшается примерно на 1 каждые 3-4 секунды. Это занимает более 2 часов, прежде чем сеанс отменяет удаление и позволяет нам заменить БД на новую...

504 rows selected (0.29 seconds)
...
503 rows selected (0.17 seconds)
...
502 rows selected (0.29 seconds)
...

Что так долго занимает улей? Есть ли конфигурация, которую я могу использовать, чтобы сделать это быстрее? Есть ли способ узнать, что он делает в это время?

Я бы подумал, что другие столкнулись бы с этой проблемой, если бы она была более распространенной, поэтому я думаю, что у меня есть параметр, который я могу настроить, чтобы исправить это (?)...

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

Есть идеи, почему это будет так медленно?

1 ответ

AFAIK, он должен отказаться от всех своих ссылок. Это может быть внешняя таблица, но если в метасторе много разделов, статистики и т.д. Кроме того, если в нем много строк, ему необходимо установить определенные блокировки. Вы можете проверить метастор (mysql или аналог) и посмотреть, можете ли вы ввести какие-либо индексы или периодически собирать статистику.

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