В Apache Hive, БД с большим количеством внешних таблиц занимает слишком много времени для DROP CASCADE - PullRequest
0 голосов
/ 13 марта 2020

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

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

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

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

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

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

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

Любые идеи почему это будет так медленно?

1 Ответ

0 голосов
/ 15 марта 2020

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

...