Выполнить несколько запросов улья из pyspark в одном сеансе - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь выполнить запрос 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 только для одного приложения.

Есть ли способ достичь того, что я ищу? Может быть, мог бы быть способ прикрепить запрос к одному исполнителю, так что, надеюсь, один сеанс?

...