plt*_*rdy 8 apache-spark pyspark jupyter
我在三个VM上使用Spark 1.6.0,1x Master(独立),2x工作者w/8G RAM,每个2CPU.
我正在使用下面的内核配置:
{
"display_name": "PySpark ",
"language": "python3",
"argv": [
"/usr/bin/python3",
"-m",
"IPython.kernel",
"-f",
"{connection_file}"
],
"env": {
"SPARK_HOME": "<mypath>/spark-1.6.0",
"PYTHONSTARTUP": "<mypath>/spark-1.6.0/python/pyspark/shell.py",
"PYSPARK_SUBMIT_ARGS": "--master spark://<mymaster>:7077 --conf spark.executor.memory=2G pyspark-shell --driver-class-path /opt/vertica/java/lib/vertica-jdbc.jar"
}
}
Run Code Online (Sandbox Code Playgroud)
目前,这是有效的.我可以使用spark context sc和sqlContextwithout import,就像在pyspark shell中一样.
当我使用多个笔记本电脑时出现问题:在我的火花大师身上,我看到两个'pyspark-shell'应用程序,这有点意义,但一次只能运行一个.但是在这里,"跑步"并不意味着执行任何操作,即使我没有在笔记本上运行任何东西,它也会显示为"正在运行".鉴于此,我不能在笔记本之间共享我的资源,这是非常可悲的(我目前必须杀死第一个shell(=笔记本内核)来运行第二个).
如果您对如何操作有任何想法,请告诉我!另外,我不确定我使用内核的方式是"最佳实践",我已经很难设置spark和jupyter一起工作了.
大家好
小智 1
问题在于 Spark 用于存储 Metastore 的数据库(Derby)。Derby 是一种轻量级数据库系统,一次只能运行一个 Spark 实例。解决方案是设置另一个数据库系统来处理多实例(postgres、mysql...)。
例如,您可以使用 postgres 数据库。
Linux shell 上的示例:
# download postgres jar
wget https://jdbc.postgresql.org/download/postgresql-42.1.4.jar
# install postgres on your machine
pip install postgres
# add user, pass and db to postgres
psql -d postgres -c "create user hive"
psql -d postgres -c "alter user hive with password 'pass'"
psql -d postgres -c "create database hive_metastore"
psql -d postgres -c "grant all privileges on database hive_metastore to hive"
Run Code Online (Sandbox Code Playgroud)
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>pass</value>
</property>
</configuration>
Run Code Online (Sandbox Code Playgroud)