Я обновляю свой сервер до версии 2.3.0 и сервера заданий 0.8.1-SNAPSHOT из версии 2.1.1 и сервера заданий 0.8.0 (которые работали нормально). Я использую JobSqlDao с MySql и использую SessionContextFactory для создания sqlContext. В local.conf у меня есть:
sql-context {
context-factory = spark.jobserver.context.SessionContextFactory
}
Все началось нормально, и все выглядит хорошо на портах 8090 и 4040, но когда я попытался выполнить свой первый запрос к серверу заданий, я получил
ОШИБКА XBM0H: Каталог / metastore_db не может быть создан
После поиска в Интернете это похоже на Hive. Я не использую hive в своем коде, но, похоже, что-то в новой SessionContextFactory, похоже, требует этого. Поэтому я добавил файл hive-site.xml в spark / conf со следующим содержимым:
<?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 (собственный метод)
at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
в 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 и, кажется, источником моих проблем. Кажется, есть много способов настроить куст (с помощью derby, mysql, embeded, client и т. Д.). Я не думаю, что в моем случае будет иметь значение, как он настроен, так как я его не использую - я просто хочу найти простой способ, который не выдает ошибку. Есть предложения?