从PySpark查询远程Hive Metastore

时间:2020-09-27 18:10:02

标签: apache-spark pyspark hive

我正在尝试使用用户名/密码/ 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

1 个答案:

答案 0 :(得分:0)

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

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

如果要将Spark与JDBC一起使用,则不需要那些javax.jdo选项,因为JDBC读取器具有自己的用户名,驱动程序等选项