【问题标题】:Run multiple hive query from pyspark on the same session在同一会话上从 pyspark 运行多个配置单元查询
【发布时间】: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(即使我尝试手动删除 builderhive),所以不起作用。

第二种方法是在spark thrift服务器中全局设置spark.sql.hive.thriftServer.singleSession=true。这似乎确实有效,但我发现只为一个应用程序的利益而限制全局 spark thrift 服务器是一种耻辱。

有没有办法实现我正在寻找的东西?也许有一种方法可以将查询固定到一个执行者,所以希望是一个会话?

【问题讨论】:

    标签: python-3.x hive pyspark hortonworks-data-platform


    【解决方案1】:

    这一直是我的一个大问题......实际上仍然是。

    为我解决此问题的解决方案是将所有查询放在一个查询文件中,其中每个查询都用分号分隔。然后我在 python 脚本中使用直线运行查询。

    不幸的是,它不适用于返回结果的查询...仅适用于设置、覆盖、插入类型的查询。

    如果您发现了更有效的方法,请分享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多