在同一会话上从 pyspark 运行多个配置单元查询
Posted
技术标签:
【中文标题】在同一会话上从 pyspark 运行多个配置单元查询【英文标题】:Run multiple hive query from pyspark on the same session 【发布时间】: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 服务器是一种耻辱。
有没有办法实现我正在寻找的东西?也许有一种方法可以将查询固定到一个执行者,所以希望是一个会话?
【问题讨论】:
【参考方案1】:这一直是我的一个大问题......实际上仍然是。
为我解决此问题的解决方案是将所有查询放在一个查询文件中,其中每个查询都用分号分隔。然后我在 python 脚本中使用直线运行查询。
不幸的是,它不适用于返回结果的查询...仅适用于设置、覆盖、插入类型的查询。
如果您发现了更有效的方法,请分享。
【讨论】:
以上是关于在同一会话上从 pyspark 运行多个配置单元查询的主要内容,如果未能解决你的问题,请参考以下文章
通过 pyspark 数据框创建配置单元管理的分区表并为每个运行附加数据
在同一个 Spark 会话中运行多个 Spark Kafka 结构化流查询会增加偏移量但显示 numInputRows 0