如何一次运行多个Spark 2.0实例(在多个Jupyter笔记本中)?

时间:2017-02-06 22:41:56

标签: pyspark derby jupyter-notebook apache-spark-2.0

我有一个脚本,方便我在Jupyter笔记本中使用Spark。这很棒,除非我在第二个笔记本中运行spark命令(例如测试一些临时工作)。

我收到一条非常长的错误消息,其中的关键部分似乎是:

  

Py4JJavaError:调用o31.json时发生错误。   :java.lang.RuntimeException:java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient`

     

。 。 。

     

引起:错误XSDB6:Derby的另一个实例可能已经启动了数据库/ metastore_db

问题似乎是我一次只能运行一个Spark实例。

如何设置Spark以便一次在多个笔记本中运行?

1 个答案:

答案 0 :(得分:2)

默认情况下,Spark运行在Hive和Hadoop之上,并在Derby中存储其数据库转换指令 - 一个轻量级数据库系统。 Derby一次只能运行一个Spark实例,因此当您启动第二个笔记本并开始运行Spark命令时,它会崩溃。

为了解决这个问题,您可以将Spark的Hive安装连接到Postgres而不是Derby。

Brew install postgres,如果你还没有安装它。

然后下载postgresql-9.4.1212.jar(假设你正在运行java 1.8 aka java8) 来自https://jdbc.postgresql.org/download.html

将此.jar文件移动到Spark安装的/libexec/jars/目录。

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

(在Mac上,您可以通过在命令行中键入brew info apache-spark来找到安装Spark的位置)

接下来,在/libexec/conf目录中为Spark安装创建hive-site.xml。

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>

&#39;配置单元&#39;和&#39; mypassword&#39;可以替换为你有意义的东西 - 但必须与下一步匹配。

最后在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笔记本中运行。