【发布时间】:2019-10-01 11:57:11
【问题描述】:
我正在尝试使用 pyspark 运行 Hive 查询。我正在使用 Hortonworks,所以我需要使用 Hive WarehouseConnector。
运行一个甚至多个查询既简单又有效。我的问题是我想在之前发出set 命令。例如在 tez ui 中设置 dag 名称:set hive.query.name=something relevant 或设置一些内存配置set hive.tez.container.size = 8192。要使这些语句生效,它们需要在与主查询相同的会话上运行,这是我的问题。
我尝试了两种方法:
第一个是为每个查询生成一个新的 hive 会话,并带有正确设置的 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 thrift服务器中全局设置spark.sql.hive.thriftServer.singleSession=true。这似乎确实有效,但我发现只为一个应用程序的利益而限制全局 spark thrift 服务器是一种耻辱。
有没有办法实现我正在寻找的东西?也许有一种方法可以将查询固定到一个执行者,所以希望是一个会话?
【问题讨论】:
标签: python-3.x hive pyspark hortonworks-data-platform