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

Posted

技术标签:

【中文标题】如何一次运行多个 Spark 2.0 实例(在多个 Jupyter Notebook 中)?【英文标题】:How to run multiple instances of Spark 2.0 at once (in multiple Jupyter Notebooks)? 【发布时间】:2017-02-06 22:41:55 【问题描述】:

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

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

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

。 . .

原因:ERROR XSDB6:另一个 Derby 实例可能已经启动了数据库 /metastore_db

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

如何设置 Spark 以同时在多个笔记本中运行?

【问题讨论】:

【参考方案1】:

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

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

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

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

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

例如:/usr/local/Cellar/apache-spark/2.0.1/

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

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

例如:/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 Notebook 中运行。

【讨论】:

以上是关于如何一次运行多个 Spark 2.0 实例(在多个 Jupyter Notebook 中)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spark 中一次对多个列进行聚合

如何在多个子网上运行 AWS EMR 集群?

如何在一个 EC2 实例上运行多个应用程序

spark sql中需要一次传递多个sql查询

想要在 Actionscript 2.0 Flash 中生成多个影片剪辑实例

如何使用单个 Laravel 代码实例配置和运行具有各自数据库的多个网站