从 PySpark 查询远程 Hive Metastore
Posted
技术标签:
【中文标题】从 PySpark 查询远程 Hive Metastore【英文标题】:Query remote Hive Metastore from PySpark 【发布时间】: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 表的元数据 【参考方案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
。以上是关于从 PySpark 查询远程 Hive Metastore的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 pyspark 从 hive 表中查询复杂的 SQL 语句
在 Hive 或 Pyspark 中查询以获取每个星期日和星期六的日期
将 sql server jar 添加到 pyspark 的类路径后无法查询 hive