2017-02-06 44 views
2

我有一個腳本,方便我在Jupyter筆記本中使用Spark。這很棒,除非我在第二個筆記本中運行spark命令(例如測試一些scratch操作)。如何一次運行多個Spark 2.0實例(在多個Jupyter筆記本中)?

我得到一個非常長的錯誤消息的關鍵部件,其中似乎是:

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以同時在多個筆記本中運行?

回答

1

默認情況下,Spark在Hive和Hadoop之上運行,並將其數據庫轉換指令存儲在Derby中 - 一個輕量級數據庫系統。 Derby一次只能運行一個Spark實例,因此當您啓動第二個筆記本並開始運行Spark命令時,它會崩潰。

爲了解決這個問題,您可以將Spark的Hive安裝連接到Postgres而不是Derby。

如果您尚未安裝,請安裝postgres。

然後下載postgresql-9.4.1212.jarhttps://jdbc.postgresql.org/download.html

移動這個.jar文件到/libexec/jars/目錄,在星火安裝(假設你正在運行的Java 1.8又名java8)。

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

(在Mac上,你可以找到在哪裏火花通過在命令行中鍵入brew info apache-spark安裝)

接下來在/libexec/conf目錄爲您星火安裝創建蜂房的site.xml。

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

這可以通過文本編輯器來完成 - 只要保存文件以「.XML」的延伸。

蜂房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> 

「蜂巢」和「輸入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筆記本。

相關問題