【问题标题】:Create temporary SparkSession with enableHiveSupport使用 enableHiveSupport 创建临时 SparkSession
【发布时间】:2018-02-19 20:15:30
【问题描述】:

我正在努力连接到允许动态数据类型连接的 Hadoop 中的数据。

我需要能够连接到 Hive Thrift Server A,拉入一些数据,然后连接到 Hive Thrift Server B 并拉入更多数据。

据我了解,enableHiveSupport 需要在初始 SparkSession.builder 上设置。有没有办法在事后添加/更改节俭连接?

我遇到的唯一可能的解决方案是使用newSession():SparkSession,但我不确定这是否是我正在寻找的正确解决方案。

我正在使用 Spark 2.1、Hadoop 2.7

【问题讨论】:

  • 您可以尝试在运行时更改 SparkConf 中的hive.metastore.uris
  • 我尝试在运行时使用sparkSession.conf.set("hive.metastore.uris", "thrift://B:port") 更改hive.metastore.uris,但是当我运行sparkSession.sql("SHOW DATABASES").show 时,我仍然从thrift A 中取回原始数据库列表。
  • 嗯。好吧,如果你的表不是某种奇怪的格式,你可以读取两个表后面的文件系统位置
  • 这是个好主意。不幸的是,这对于我正在使用的东西来说并不理想。
  • 找到了一个类似的问题并提供了解决方案。 stackoverflow.com/questions/44949246/…

标签: scala hadoop apache-spark hive mapr


【解决方案1】:

根据Spark The Definitive Guide一书“创建 [SparkConf] 后,SparkConf 对于特定的 Spark 应用程序是不可变的”Chambers 和 Zaharia(2018 年,第 276 页)

【讨论】:

    【解决方案2】:
       val spark = SparkSession.builder()
          .appName("Example")
          .master("local")
          .config("hive.metastore.uris","thrift://B:PortNumber")
          .enableHiveSupport()
          .getOrCreate()
    

    【讨论】:

    • 这会构建一个新的 SparkSession,但是如果你已经建立了一个 SparkSession,那么它就不能很好地工作。
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 2017-09-26
    • 2020-11-13
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多