Eil*_*iar 5 apache-spark jupyter-notebook apache-spark-2.0
我在独立模式下运行Spark 2.0,成功将其配置为在服务器上启动,并且还能够将Ipython Kernel PySpark配置为Jupyter Notebook中的选项.一切正常但我面临的问题是,对于我启动的每个笔记本,我的所有4个工作人员都被分配到该应用程序.因此,如果我的团队中的另一个人尝试使用PySpark内核启动另一个笔记本,那么在我停止第一个笔记本并释放所有工作人员之前,它根本不起作用.
为了解决这个问题,我试图按照Spark 2.0文档中的说明进行操作.所以,就我而言,$SPARK_HOME/conf/spark-defaults.conf我有以下几行:
spark.dynamicAllocation.enabled true
spark.shuffle.service.enabled true
spark.dynamicAllocation.executorIdleTimeout 10
Run Code Online (Sandbox Code Playgroud)
另外,$SPARK_HOME/conf/spark-env.sh我有:
export SPARK_WORKER_MEMORY=1g
export SPARK_EXECUTOR_MEMORY=512m
export SPARK_WORKER_INSTANCES=4
export SPARK_WORKER_CORES=1
Run Code Online (Sandbox Code Playgroud)
但是当我尝试启动工作时,使用时$SPARK_HOME/sbin/start-slaves.sh,只有第一个工作人员成功启动.来自第一个工作人员的日志最终如下:
16/11/24 13:32:06 INFO工人:成功注册了主人spark:// cerberus:7077
但工人2-4的日志显示了这个错误:
INFO ExternalShuffleService:使用useSasl = false在端口7337上启动shuffle服务16/11/24 13:32:08错误收件箱:忽略错误java.net.BindException:地址已在使用中
看来(对我来说)第一个工作人员在7337端口成功启动了shuffle-service,但工作人员2-4"不知道"这个并尝试在同一个端口上启动另一个shuffle-service.
如果我首先启动shuffle-service(使用$SPARK_HOME/sbin/start-shuffle-service.sh)然后尝试启动所有worker($SPARK_HOME/sbin/start-slaves.sh),那么所有工作人员(1-4)也会出现问题.
有没有选择绕过这个?如果有一个shuffle服务正在运行并连接到它而不是尝试创建一个新服务,那么所有工作人员都能够修复吗?
我遇到了同样的问题,似乎通过从配置文件中删除spark.shuffle.service.enabled项目(事实上我没有任何与dynamicAllocation相关的项目)来让它工作,而是将其放入SparkConf中我请求一个 SparkContext:
sconf = pyspark.SparkConf() \
.setAppName("sc1") \
.set("spark.dynamicAllocation.enabled", "true") \
.set("spark.shuffle.service.enabled", "true")
sc1 = pyspark.SparkContext(conf=sconf)
Run Code Online (Sandbox Code Playgroud)
我正常启动主站和从站:
$SPARK_HOME/sbin/start-all.sh
Run Code Online (Sandbox Code Playgroud)
我必须启动 shuffler-service 的一个实例:
$SPARK_HOME/sbin/start-shuffle-service.sh
Run Code Online (Sandbox Code Playgroud)
然后我开始用这个上下文写两个笔记本,让它们都做一个小工作。第一个笔记本的应用程序执行该工作并处于 RUNNING 状态,第二个笔记本的应用程序处于 WAITING 状态。一分钟后(默认空闲超时),资源将被重新分配,第二个上下文将开始执行其工作(并且两者都处于“运行”状态)。
希望这有帮助,约翰
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |