我有一个脚本,方便我在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以便一次在多个笔记本中运行?
答案 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笔记本中运行。