我无法配置sparksql以便可以访问spark-thrift服务器中的配置单元表(不使用jdbc,而是从spark本地访问)
我使用单个配置文件 conf/hive-site.xml
对于spark thrift server和spark sql。我有 javax.jdo.option.ConnectionURL
属性设置为 jdbc:derby:;databaseName=/home/user/spark-2.4.0-bin-hadoop2.7/metastore_db;create=true
. 我还设置了 spark.sql.warehouse.dir
指向的绝对路径的属性 spark-warehouse
目录。我和你一起经营储蓄服务器 ./start-thriftserver.sh
我可以观察到嵌入式derby数据库是用 metastore_db
目录。我可以和你联系 beeline
,创建一个表并查看 spark-warehouse
用表的子目录创建的目录。所以在这个阶段是好的。
我启动pyspark shell时启用了配置单元支持 ./bin/pyspark --conf spark.sql.catalogImplementation=hive
,并尝试访问配置单元表:
from pyspark.sql import HiveContext
hc = HiveContext(sc)
hc.sql('show tables')
我犯了这样的错误:
错误xj040:无法使用类加载器sun.misc启动数据库“/home/user/spark-2.4.0-bin-hadoop2.7/metastore_db”。launcher$appclassloader@1b4fb997
错误xsdb6:derby的另一个示例可能已经启动了数据库/home/user/spark-2.4.0-bin-hadoop2.7/metastore\u db
pyspark.sql.utils.analysisexception:u'java.lang.runtimeexception:java.lang.runtimeexception:无法示例化org.apache.hadoop.hive.ql.metadata.sessionhivemetastoreclient;
显然spark正在尝试创建新的derby数据库,而不是使用我放在配置文件中的metastore。如果我停止了thrift服务器,只运行spark,一切正常。我怎么能修好它?
embedded derby metastore数据库可以同时拥有thrift server和spark access吗?或者我需要使用mysql?我没有集群,一切都在本地进行。
1条答案
按热度按时间9rbhqvlz1#
嵌入式derby metastore数据库可以在本地使用,但对于生产环境,建议使用任何其他metastore数据库。是的,你绝对可以用mysql作为metastore。为此,你必须在
hive-site.xml
.有关详细信息,请参阅配置指南use mysql for the hive metastore。