Pyspark Shell中出现HiveMetaStore错误,但Jupyter Noteb中没有错误

2024-04-30 03:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图使用pyspark dataframe或sql时,我遇到了一件奇怪的事情。当它在ipython笔记本或python控制台中工作时,我得到javax.jdo.JDOFatalInternalException:Error creating transactional connection factory“在pyspark shell中运行时出错。在

简而言之,如果我在iPython笔记本或简单的python终端中运行以下命令,一切都会正常工作:

import findspark
findspark.init("C:\Spark\spark-2.3.3-bin-hadoop2.7")

import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
spark.sql('''select 'spark' as hello ''').show()

当我通过键入'pyspark'打开pyspark shell时,我执行以下命令:(SparkSession already initialized):

^{pr2}$

我被抛出了一个错误:

>>> spark.sql('''select 'spark' as hello ''').show()
2019-05-12 18:41:35 WARN  HiveMetaStore:622 - Retrying creating default database after error: Error creating transactional connection factory
javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
...
pyspark.sql.utils.AnalysisException: 'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'

很奇怪,你知道为什么它在一种环境下工作,而在另一种环境下却不起作用吗?谢谢!在

编辑: 更多错误:

java.sql.SQLException: Unable to open a test connection to the given database. JDBC url = jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true, username = root. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

Tags: toimportcreatingsqlfactoryerrorjavaconnection
1条回答
网友
1楼 · 发布于 2024-04-30 03:34:09

我让它发挥作用了。所以在启动Spark时,你有两个选择spark.sql.catalogImplementation“设置(配置单元或内存中)。我正在使用Windows,在设置Hive以使用pyspark时有点头疼。由于某些原因,运行pyspark的jupyter笔记本没有实现该设置(正因如此,它一直在工作)。但是,当运行interactivepyspark时,该设置是使用默认值运行的spark.sql.catalogImplementation=配置单元. 如果要避免配置单元的麻烦,只需在运行时提供参数:

pyspark  conf spark.sql.catalogImplementation=in-memory

然后运行这一行来测试它是否有效:

^{pr2}$

如果这样的话,一切都很好。在

如果您想将该设置设为默认值,只需转到spark目录并编辑conf/spark文件-默认值.conf再加上设置'spark.sql.catalogImplementation=中-“记忆”。它最初可能是一个模板文件,所以请确保将其保存为.conf文件。在那之后,你启动pyspark的每件事,你都应该对hive没有问题。在

另一种检查方法是在pyspark会话启动时转到UI并检查environment页面(http://localhost:4041/environment/)。在“Spark属性”下,您可以看到什么值spark.sql.catalogImplementation有(我相信您也可以在交互式shell中检查该值)。在

同样,我只是在我的Windows机器上本地运行pyspark,但是现在,pyspark和dataframe支持可以无缝地与jupyter笔记本和交互式shell一起工作!在

相关问题 更多 >