【发布时间】: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