apache-spark - 如何同时运行 Spark SQL JDBC/ODBC 服务器和 pyspark?
问题描述
我有一个 Spark 的单节点部署。我在上面运行 JDBC/ODBC 服务器。哪个工作正常。但是,如果我同时使用 pyspark 保存表 ( df.write.saveAsTable()
),我会收到一条很长的错误消息。我认为它的核心部分是:
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /root/spark/bin/metastore_db.
做一些研究,我发现这是由 Spark 创建一个新会话引起的,该会话试图创建另一个 Derby 实例,这会导致错误。提供的解决方案是关闭所有其他 spark-shell 进程。但是,如果我这样做,那么 ODBC 服务器将停止运行。
我该怎么做才能让两者同时运行?
解决方案
您可能希望使用 derby 网络服务器而不是默认的嵌入式版本,以便它可以被多个进程共享。或者您使用其他数据存储,例如 MySQL。
安装 derby 网络服务器后,您可以将 derby-client.jar 文件复制到 spark jars 目录中,然后使用以下内容编辑该文件conf/hive-site.xml
:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby://localhost:1527/metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.ClientDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
</configuration>