我正在尝试使用用户名/密码/ jdbc url查询PySpark中的远程Hive Metastore。我可以很好地初始化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
答案 0 :(得分:0)
metastore uris不是JDBC地址,它们只是由Metastore服务器进程打开的server:port
地址。通常为9083端口
Metastore本身不是jdbc:hive2
连接,而是将配置Metastore的相应RDBMS(由hive-site.xml设置)
如果要将Spark与JDBC一起使用,则不需要那些javax.jdo选项,因为JDBC读取器具有自己的用户名,驱动程序等选项