У меня есть внешний разделенный (by: source, execute_id, entity_name) Hive table, называемый business_views.
Я хотел бы знать, есть ли проблемы с одновременным запуском этих двух действий:
ALTER TABLE business_views DROP IF EXISTS PARTITION (entity_name = 'XXXX')
Запустите программу Spark Spark, которая пишет внутри многораздельной таблицы business_views:
DbUtils.scala:
spark.catalog.refreshTable(s"$DATABASE_NAME.$tableName")
df
.select(XXXXXXXXXXXXXXXXXXXXXXXXXXX)
.repartition($"source", $"execution_id", $"entity_name")
.write
.format("parquet")
.insertInto(business_views)
На самом деле нам нужно очистить некоторые разделы таблицы сценарием оболочки, пока в этой таблице записывается задание spark.
Когда я запускал откат (очистку раздела) во время spark sqlРабота Я получил эти ошибки:
org.apache.spark.SparkException: Работа прервана. at com.socgen.drhg.dhr.utils.DbUtils $ .writeToTableBv (DbUtils.scala: 92)
и
Вызывается: org.apache.hadoop. security.AccessControlException: В доступе отказано: пользователь = XXXXXX, доступ = EXECUTE, inode = "/ XXXXXX / XXXXXX / XXXXXX / XXXXXX / бизнес-представления / источник = XXXXXX / исполнительный_идентификатор = XXXXXX / имя_хозяйства = XXXXXX-: hdf: hdf: hdf:---
Но с разделом перетаскивания работает (откат) нормально.
Я не уверен, что на эти два действия есть реальная связь
Наша конфигурация улья:
ACID не активирован hive.support.concurrency = false
Я думаю, что если параллелизм не активирован, на столе нет блокировки, поэтомуединственной проблемой должна быть проблема несоответствия данных, но не реальная ошибка.
Поэтому мой вопрос: есть ли проблема, если мы отбрасываем раздел, когда новые разделы создаются / обогащаются заданием sparkSql?