【问题标题】:Query remote Hive Metastore from PySpark从 PySpark 查询远程 Hive Metastore
【发布时间】:2020-09-27 18:10:02
【问题描述】:

我正在尝试使用用户名/密码/jdbc url 查询 PySpark 中的远程 Hive 元存储。我可以很好地初始化 SparkSession,但无法实际查询表。如果可能的话,我想把所有东西都保存在 python 环境中。有什么想法吗?

from pyspark.sql import SparkSession

url = f"jdbc:hive2://{jdbcHostname}:{jdbcPort}/{jdbcDatabase}"
driver = "org.apache.hive.jdbc.HiveDriver"

# initialize
spark = SparkSession \
    .builder \
    .appName("Python Spark SQL Hive integration example") \
    .config("hive.metastore.uris", url) \ # also tried .config("javax.jdo.option.ConnectionURL", url)
    .config("javax.jdo.option.ConnectionDriverName", driver) \
    .config("javax.jdo.option.ConnectionUserName", username) \
    .config("javax.jdo.option.ConnectionPassword", password) \
    .enableHiveSupport() \
    .getOrCreate()
# query
spark.sql("select * from database.tbl limit 100").show()
AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;

在我能够使用 JDBC 连接到单个表但无法检索任何数据之前,请参阅 Errors querying Hive table from PySpark

【问题讨论】:

  • 看起来您正在尝试查询 HiveServer,而不是 Metastore 本身。 Metastore 不会使用 HiveDriver,它会使用 Mysql、Postgres、MSSQL、Derby 或 Oracle(每个都可以使用 sqlalchemy 而不是 Spark 进行查询),如果你想从 Spark 查询 HiveServer,你不会使用 JDBC
  • 那我只需要更换驱动吗?
  • 不太清楚您期望连接到什么。 Metastore 不会有任何实际存储在 Hive 中的数据,只有一堆关于 Hive 表的元数据

标签: apache-spark pyspark hive


【解决方案1】:

Metastore uri 不是 JDBC 地址,它们只是 Metastore 服务器进程打开的 server:port 地址。通常是端口 9083

元存储本身不会是jdbc:hive2 连接,而是将配置元存储的相应 RDBMS(由 hive-site.xml 设置)

如果你想通过 JDBC 使用 Spark,那么你不需要那些 javax.jdo 选项,因为 JDBC 阅读器有自己的用户名、驱动程序等选项

【讨论】:

  • 抱歉,Spark/Hive 的新手。我真的只是希望能够在 Python 环境中查询表,而不是每次都使用 DBeaver。使用我拥有的现有信息(网址/用户名/密码)执行此操作的最佳方法是什么?
  • 如果您已经在 Spark 配置目录中配置了 hive-site.xml,那么您的 SparkSession 上的 enableHiveSupport() 就是您所需要的,那么spark.sql 将能够查询 HiveServer。您不需要 Metastore 访问权限
  • 修改hive-site.xml 的替代方法是使用必要的配置选项构建SparkConf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2016-07-03
  • 2018-09-23
相关资源
最近更新 更多