首页 > 解决方案 > 如何同时运行 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 服务器将停止运行。

我该怎么做才能让两者同时运行?

标签: apache-sparkpysparkapache-spark-sql

解决方案


您可能希望使用 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>

推荐阅读