Как запустить несколько экземпляров Spark 2.0 одновременно (в нескольких ноутбуках Jupyter)?

У меня есть скрипт, который позволяет мне использовать Spark в Jupyter Notebook. Это здорово, за исключением случаев, когда я запускаю команды spark во втором ноутбуке (например, чтобы проверить некоторые наброски).

Я получаю очень длинное сообщение об ошибке, ключевыми частями которого являются:

Py4JJavaError: Произошла ошибка при вызове o31.json. : java.lang.RuntimeException: java.lang.RuntimeException: невозможно создать экземпляр org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient`

. . .

Причина: ОШИБКА XSDB6: возможно, другой экземпляр Derby уже загрузил базу данных /metastore_db.

Проблема в том, что я могу запускать только один экземпляр Spark за раз.

Как настроить Spark для одновременного запуска в нескольких ноутбуках?


person coradek    schedule 06.02.2017    source источник


Ответы (1)


По умолчанию Spark работает поверх Hive и Hadoop и хранит свои инструкции по преобразованиям базы данных в Derby — облегченной системе баз данных. Derby может запускать только один экземпляр Spark за раз, поэтому, когда вы запускаете второй блокнот и запускаете команды Spark, происходит сбой.

Чтобы обойти это, вы можете подключить установку Spark Hive к Postgres вместо Derby.

Заварите установку postgres, если она у вас еще не установлена.

Затем загрузите postgresql-9.4.1212.jar (при условии, что вы используете java 1.8, также известную как java8) с https://jdbc.postgresql.org/download.html

Переместите этот файл .jar в каталог /libexec/jars/ для вашей установки Spark.

ex: /usr/local/Cellar/apache-spark/2.0.1/

(на Mac вы можете узнать, где установлен Spark, набрав brew info apache-spark в командной строке)

Затем создайте файл hive-site.xml в каталоге /libexec/conf для вашей установки Spark.

ex: /usr/local/Cellar/apache-spark/2.0.1/libexec/conf

Это можно сделать с помощью текстового редактора — просто сохраните файл с расширением «.xml».

hive-site.xml должен содержать следующий текст:

<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:postgresql://localhost:5432/hive_metastore</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.postgresql.Driver</value>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>mypassword</value>
</property>

</configuration>

«hive» и «mypassword» можно заменить на все, что имеет для вас смысл, но они должны соответствовать следующему шагу.

Наконец, создайте пользователя и пароль в Postgress: в командной строке выполните следующие команды:

psql
CREATE USER hive;
ALTER ROLE hive WITH PASSWORD 'mypassword';
CREATE DATABASE hive_metastore;
GRANT ALL PRIVILEGES ON DATABASE hive_metastore TO hive;
\q

Вот и все. Теперь Spark должен работать на нескольких ноутбуках Jupyter одновременно.

person coradek    schedule 06.02.2017