问题描述:
在使用pyspark链接Hive数据库访问其中库表时,步骤为:
- 创建SparkSeesion对象;
- 书写hive_sql查询语句;
- 使用spark.sql(hive_sql)进行查询。
但是提交任务后出现如下错误:
[Thread-4] ERROR DataNucleus.Datastore - Exception thrown creating StoreManager. See the nested exception
org.datanucleus.exceptions.NucleusException: Error creating transactional connection factory
at org.datanucleus.store.AbstractStoreManager.registerConnectionFactory(AbstractStoreManager.java:214) ~[datanucleus-core-4.1.17.jar:?]
at org.datanucleus.store.AbstractStoreManager.<init>(AbstractStoreManager.java:162) ~[datanucleus-core-4.1.17.jar:?]
at org.datanucleus.store.rdbms.RDBMSStoreManager.<init>(RDBMSStoreManager.java:285) ~[datanucleus-rdbms-4.1.19.jar:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_391]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_391]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_391]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_391]
at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.java:606) ~[datanucleus-core-4.1.17.jar:?]
at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.java:301) ~[datanucleus-core-4.1.17.jar:?]
at org.datanucleus.NucleusContextHelper.createStoreManagerForProperties(NucleusContextHelper.java:133) ~[datanucleus-core-4.1.17.jar:?]
at org.datanucleus.PersistenceNucleusContextImpl.initialise(PersistenceNucleusContextImpl.java:422) ~[datanucleus-core-4.1.17.jar:?]
经过查找网上没有给出明确的解决方法,均是模糊不清。不过也有道友出现类似的情况,通过日志定位到问题所在应为Spark/Jars文件夹下缺少mysql-connector.jar包,从而无法访问Hive的metastore。
解决方法:
首先需要下载mysql-connector.jar包,当然也可尝试在自己配置的Hive环境中找到此jar包,一般路径为$HIVE_HOME/lib。
1.Spark-shell
在打开Spark-shell时命令修改为:
spark-shell --driver-class-path $HIVE_HOME/lib/mysql-connector-j-8.1.0.jar
其中$HIVE_HOME是自己配置的路径,需要各位道友自行修改。出现spark-shell后可以直接输入测试代码进行测试,查询成功。
spark.sql("select * from test;");
2.运行脚本
如想直接运行脚本,则需要把下载或找到的mysql-connector.jar复制到$SPARK_HOME/jars路径下,然后直接运行脚本即可,显示查询成功。