我正在将我的服务器从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有关。我没有在我的代码中使用配置单元,但似乎有关新的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:Call From ra.esi-internal.esi-group.com/192.168.xxx.xx到192.168.xxx.xx:8020 连接异常失败:java.net.ConnectException:Connection 拒绝;有关更多详情,请参阅 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) 在org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)
我也尝试将hive-site.xml配置为使用mysql(acutally mariadb),但后来我遇到了这样的错误:
ENGINE = INNODB:指定的密钥太长;最大密钥长度为767 bytes com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 指定密钥太长;最大密钥长度为767字节 网络搜索表明这可以通过上传至5.7来解决(我目前正在使用5.5并且真的不想升级)。
是否有可用于获取不需要配置单元的sqlContext的上下文工厂?这个SessionContextFactory是0.8.1中的新东西,似乎是我的问题的根源。似乎有很多方法来配置hive(使用derby,mysql,embeded,client等)。我不认为在我的情况下如何配置它会很重要,因为我不会使用它 - 我只是想找到一种不会出错的简单方法。有什么建议吗?