首页 > 解决方案 > 使用 spark-jobserver 0.8.1 创建数据库“metastore_db”失败

问题描述

我正在将我的服务器从 spark 2.1.1 和 job-server 0.8.0 升级到 spark 2.3.0 和 job-server 0.8.1-SNAPSHOT(工作正常)。我将 JobSqlDao 与 MySql 一起使用,并使用 SessionContextFactory 创建一个 sqlContext。在 local.conf 中,我有:

 sql-context {
      context-factory = spark.jobserver.context.SessionContextFactory
 }

一切正常,端口 8090 和 4040 看起来一切正常,但是当我尝试向作业服务器发出第一个请求时,我得到了

错误 XBM0H:无法创建目录 /metastore_db

在网上搜索后,这看起来与 Hive 有关。我没有在我的代码中使用 hive,但似乎关于新的 SessionContextFactory 的某些东西似乎需要它。所以我在 spark/conf 中添加了一个 hive-site.xml 文件,内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:derby:;databaseName=/home/mineset/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.EmbeddedDriver</value>
</property>
</configuration>

但现在我得到这个错误:

原因:java.net.ConnectException:从 ra.esi-internal.esi-group.com/192.168.xxx.xx 到 192.168.xxx.xx:8020 的调用因连接异常失败:java.net.ConnectException:连接被拒绝;有关更多详细信息,请参阅: http ://wiki.apache.org/hadoop/ConnectionRefused at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect。 DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)

我还尝试将 hive-site.xml 配置为使用 mysql(实际上是 mariadb),但随后出现如下错误:

ENGINE=INNODB : 指定的键太长;最大密钥长度为 767 字节 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; 最大密钥长度为 767 字节 网络搜索表明这可以通过升级到 5.7 来解决(我目前使用的是 5.5,并且真的不想升级)。

是否有上下文工厂可用于获取不需要配置单元的 sqlContext?这个 SessionContextFactory 是 0.8.1 中的新内容,似乎是我的问题的根源。似乎有很多方法可以配置 hive(使用 derby、mysql、embeded、client 等)。我认为在我的情况下如何配置并不重要,因为我不使用它 - 我只想找到一种不会出错的简单方法。有什么建议么?

标签: apache-sparkspark-jobserver

解决方案


推荐阅读