【问题标题】:Jupyter & PySpark: How to run multiple notebooksJupyter & PySpark:如何运行多个笔记本
【发布时间】:2016-03-30 14:02:56
【问题描述】:

我在三个 VM 上使用 Spark 1.6.0,1x Master(独立),2x worker 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"
 }  
}  

目前,这有效。我可以使用 spark context sc & sqlContext 而无需导入,就像在 pyspark shell 中一样。

当我使用多个笔记本时出现问题: 在我的 spark master 上,我看到两个“pyspark-shell”应用程序,这有点道理,但一次只能运行一个。但是在这里,“运行”并不意味着执行任何东西,即使我没有在笔记本上运行任何东西,这也会显示为“正在运行”。鉴于此,我无法在笔记本之间共享我的资源,这非常可悲(我目前必须杀死第一个外壳(=笔记本内核)才能运行第二个)。

如果您对如何操作有任何想法,请告诉我! 另外,我不确定我使用内核的方式是否是“最佳实践”,我已经在设置 ​​spark 和 jupyter 以协同工作时遇到了麻烦。

谢谢大家

【问题讨论】:

  • @AlbertoBonsanto 这将如何解决并发问题? :)
  • @eliasah 这肯定不会。还是很高兴得到一些建议:p
  • 你想分享 sparkcontext 吗?
  • 这不是目标,但也不是问题
  • 如果您要为每个笔记本创建上下文,则需要 Mesos 或 chronos 之类的东西。堆栈会突然变得非常复杂。

标签: apache-spark pyspark jupyter


【解决方案1】:

问题是 Spark 用来存储 Metastore (Derby) 的数据库。 Derby 是一个轻量级的数据库系统,一次只能运行一个 Spark 实例。 解决方案是设置另一个数据库系统来处理多实例(postgres、mysql...)。

例如,您可以使用 postgres 数据库。

  • 在 spark/jars 中添加 postgres jar
  • 在 spark conf 中添加配置文件 (hive-site.xml)
  • 在你的机器上安装 postgres
  • 在 postgres 中为 spark/hive 添加用户、密码和数据库(取决于 hive-site.xml 中的值)

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"

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>

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 2020-05-17
    • 2018-09-23
    • 2020-03-11
    • 1970-01-01
    • 2020-11-18
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多