остановить повторную попытку hive войти в систему HMSHANDLER в кластер databricks

#apache-spark #log4j #slf4j #azure-databricks

#apache-spark #log4j #slf4j #azure-databricks

Вопрос:

Я использую azure databricks 5.5 LTS с spark 2.4.3 и scala 2.11. Почти каждый запрос, отправляемый в кластер databricks, выдает следующий журнал ошибок

 ERROR RetryingHMSHandler: NoSuchObjectException(message:There is no database named global_temp)
at org.apache.hadoop.hive.metastore.ObjectStore.getMDatabase(ObjectStore.java:487)
at org.apache.hadoop.hive.metastore.ObjectStore.getDatabase(ObjectStore.java:498)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  

Хотя это не влияет на конечный результат того, что мы пытаемся сделать, наши журналы постоянно заполняются этим, и просматривать их не очень приятно. Я попытался отключить его, установив следующее свойство для драйвера и исполнителя

 log4j.level.org.apache.hadoop.hive.metastore.RetryingHMSHandler=OFF
  

только для того, чтобы позже понять, что класс RetryingHMSHandler фактически использует slf4j logger, есть ли элегантный способ преодолеть это?

Комментарии:

1. slf4j — это своего рода оболочка поверх log4j / logback. Чтобы установить надлежащий уровень журнала, вам необходимо зависеть от log4j / logback / properties

2. Спасибо за ваш комментарий @Steephen, но это то, что log4j.level.... я должен делать, нет?

3. да, logging.apache.org/log4j/2.x/manual/customloglevels.html

Ответ №1:

Возможно, поздно, но столкнулся с той же проблемой с кластером Databricks 9.1 LTS (Apache Spark 3.1.2, Scala 2.12). Решаемая с помощью скрипта инициализации, который добавил следующие два свойства

 log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL, publicFile
log4j.additivity.org.apache.hadoop.hive.metastore.RetryingHMSHandler=false
  

в log4j.properties драйвера.

Моей целью было удалить все подробные журналы из файла «log4j-active.log», который можно загрузить из пользовательского интерфейса задания. Следуя https://learn.microsoft.com/en-us/azure/databricks/kb/clusters/overwrite-log4j-logs , я решил добавить / перезаписать некоторые значения свойств в файле log4j.properties драйвера (конечно, сначала я взглянул на его содержимое).

Добавив эти два свойства, я смог удалить также повторную попытку hmshandler (единственный сторонний вызов журнала, который все еще сохранялся)

Надеюсь, это поможет 😉