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

Pyspark 如何一次运行多个Spark 2.0实例(在多个Jupyter笔记本中)?,pyspark,derby,jupyter-notebook,apache-spark-2.0,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` 原因:错误

我有一个脚本,可以方便地在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设置为同时在多个笔记本电脑中运行?

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

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

Brew安装postgres(如果尚未安装)

然后下载
postgresql-9.4.1212.jar
(假设您运行的是Java1.8又称java8) 从

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

例如:
/usr/local/ceral/apachespark/2.0.1/

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

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

例如:
/usr/local/ceral/apachespark/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>
就这样,你完了。Spark现在应该同时在多台Jupyter笔记本上运行

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