无法通过 PySpark 访问 Hive

Posted

技术标签:

【中文标题】无法通过 PySpark 访问 Hive【英文标题】:Cannot access Hive via PySpark 【发布时间】:2018-10-03 17:21:08 【问题描述】:

我是 Hadoop/Spark/Hive 的新手!

我创建了一个在本地运行的单节点 linux (Ubuntu 18.04.1 LTS) VM,其中包含以下内容; Hadoop 3.1.0; Spark:Spark 2.3.1,Hive:Hive-3.0.0

我的 Hive 使用标准的 Derby DB,我可以通过终端访问 hive 并创建数据库、表,然后很好地查询这些表。我的 metastore_db 位于 ~/hivemetastore/metastore_db

我还创建了以下内容:

hadoop fs -mkdir -p /user/hive/warehouse

hadoop fs -mkdir -p /tmp/hive

(注意——我在 $HIVE_HOME/conf 或 $SPARK_HOME/conf 下没有任何 hive-site.xml 文件)

但是,当我尝试从 pyspark(通过终端)读取配置单元表时,出现错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/spark-2.3.1-bin-hadoop2.7/python/pyspark/sql/session.py", line 710, in sql return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
File "/usr/local/spark-2.3.1-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
File "/usr/local/spark-2.3.1-bin-hadoop2.7/python/pyspark/sql/utils.py", line 69, in decoraise AnalysisException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.AnalysisException: 'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'

我用来从 pyspark 访问 hive 的代码是:

from pyspark.sql import SparkSession
spark = SparkSession.builder.enableHiveSupport().getOrCreate()
spark.sql('show databases').show()

【问题讨论】:

【参考方案1】:

您是否启动了元存储?

类型:

hive --service metastore

使用 rm metastore_db/*.lck 删除锁定或重新启动系统(或 PySpark shell)。

【讨论】:

我删除了锁定文件,然后尝试运行 hive --service metastore 但它似乎只是挂在该命令上并且没有任何反应 您是否以 su hive --service metastore 运行它并且您说您正在尝试读取配置单元表,但是您输入了“显示数据库”? 可以发截图吗? 读取表或尝试执行任何 hiveql 的相同问题 这是我的终端:hduser@ismail-VirtualBox:~/hivemetastore$ hive --service metastore 2018-10-03 21:32:35: 启动 Hive Metastore Server ^C hduser@ismail-VirtualBox :~/hivemetastore$ service hive-metastore start 启动 hive-metastore.service 失败:未找到单元 hive-metastore.service。 hduser@ismail-VirtualBox:~/hivemetastore$

以上是关于无法通过 PySpark 访问 Hive的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Pyspark 访问外部 Hive 元存储

我创建了一个文件来访问所有全局变量。我无法访问 pyspark-sql 查询中定义的 UDF 中的全局变量

IndexedRowMatrix().columnSimilarities() 检索到的 PySpark 相似性无法访问:INFO ExternalSorter: Thread *spilling i

通过 Spark 加载的表在 Hive 中无法访问

无法通过 SSMS 访问 Azure Synapse Spark 表

PySpark 无法通过 sparkContext/hiveContext 读取 Hive ORC 事务表?我们可以使用 Pyspark 更新/删除配置单元表数据吗?