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

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

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

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

Py4JJavaError: An error occurred while calling o31.json. : java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient`

. . .

Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /metastore_db



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

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

最佳答案

默认情况下,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的安装位置)

接下来,为您的Spark安装在/libexec/conf目录中创建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中运行。

关于pyspark - 如何一次(在多个Jupyter Notebook中)运行多个Spark 2.0实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42078594/

相关文章:

python - pyspark对角比较两列

azure - 如何在 PySpark 中保存带有当前日期和时间的文件名?

java - ResultSet.get 抛出 java.sql.SQLException : Invalid operation at current cursor position

python - "Where is the Mouse Right Now?"

macos - 在 localhost 上启动 Jupyter Notebook 会导致 '[Errno 49] Can' t 分配请求的地址,但是 ip=127.0.0.1 有效

string - Pyspark:如何将字符串(从密集向量创建)转换回密集向量?

pyspark - 通过对多列进行分组来用平均值填充缺失值

java - 在独立 Java 应用程序中设置嵌入式 Derby 数据库

sql - 如何获取数据库表中值的前x%

python-3.x - 如何使用 Windows 调度程序在启动时自动运行 jupyter 笔记本(使用 Anaconda)