繁体   English   中英

Spark 2.0独立模式动态资源分配工作者启动错误

[英]Spark 2.0 Standalone mode Dynamic Resource Allocation Worker Launch Error

我在独立模式下运行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

另外,在$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

但是当我尝试使用$SPARK_HOME/sbin/start-slaves.sh启动worker时,只有第一个worker成功启动。 来自第一个工作人员的日志最终如下:

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服务(使用$SPARK_HOME/sbin/start-shuffle-service.sh )然后尝试启动所有工作人员( $SPARK_HOME/sbin/start-slaves.sh ),所有工作人员(1-4)也会出现此问题$SPARK_HOME/sbin/start-slaves.sh )。

有没有选择绕过这个? 如果有一个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)

我像往常一样启动主人和奴隶:

$SPARK_HOME/sbin/start-all.sh

我必须启动一个shuffler服务的实例:

$SPARK_HOME/sbin/start-shuffle-service.sh

然后我开始使用这个上下文的两个笔记本,并让他们两个做一个小工作。 第一个笔记本的应用程序完成工作并处于RUNNING状态,第二个笔记本的应用程序处于WAITING状态。 一分钟后(默认空闲超时),资源重新分配,第二个上下文完成其工作(两者都处于RUNNING状态)。

希望这有帮助,约翰

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM