Я пытаюсь выполнить запрос Hive с помощью pyspark. Я использую Hortonworks, поэтому мне нужно использовать Hive WarehouseConnector .
Выполнение одного или нескольких запросов просто и работает. Моя проблема в том, что я хочу выдавать set
команд раньше. Например, чтобы установить имя метки в tez ui: set hive.query.name=something relevant
или настроить некоторую конфигурацию памяти set hive.tez.container.size = 8192
. Чтобы эти операторы вступили в силу, они должны выполняться в том же сеансе, что и основной запрос, и это моя проблема.
Я пробовал 2 способа:
Первый - создать новый улей. сеанс для каждого запроса , с правильно настроенным URL-адресом, например ::
url='jdbc:hive2://hiveserver:10000/default?hive.query.name=relevant'
builder = HiveWarehouseSession.session(self.spark)
builder.hs2url(url)
hive = builder.build()
hive.execute("select * from whatever")
Он хорошо работает для первого запроса, но тот же URL-адрес повторно используется для следующего (даже если япопробуйте вручную удалить builder
и hive
), поэтому не работает.
Второй способ - установить глобально spark.sql.hive.thriftServer.singleSession=true
на сервере Sprift. Кажется, это работает, но мне стыдно ограничивать глобальный сервер Spark Thrift только для одного приложения.
Есть ли способ достичь того, что я ищу? Может быть, мог бы быть способ прикрепить запрос к одному исполнителю, так что, надеюсь, один сеанс?