我在独立模式下运行Spark 2.0,成功配置它在服务器上启动,并且能够将Ipython Kernel PySpark配置为Jupyter Notebook中的选项。一切正常,但我面临的问题是,对于我启动的每个Notebook,我的所有4名工作人员都被分配到该应用程序。因此,如果我的团队中的另一个人尝试使用PySpark内核启动另一台笔记本电脑,则只有在我停止第一台笔记本电脑并释放所有工作人员后才能工作。Spark 2.0独立模式动态资源分配工作者启动错误
为了解决这个问题,我试图按照Spark 2.0 Documentation的指示。 所以,在我的$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
,只有第一个工人成功推出。从第一个工作日志落得这样的:
16/11/24 13:32:06 INFO Worker: Successfully registered with master spark://cerberus:7077
但是从工人2-4日志告诉我这个错误:
INFO ExternalShuffleService: Starting shuffle service on port 7337 with useSasl = false 16/11/24 13:32:08 ERROR Inbox: Ignoring error java.net.BindException: Address already in use
看来(我)第一个工人成功启动在7337港口洗牌服务,但工人2-4“不知道”这一点,并尝试在同一个港口启动另一项洗牌服务。
如果我首先启动洗牌服务(使用$SPARK_HOME/sbin/start-shuffle-service.sh
),然后尝试启动所有工作人员($SPARK_HOME/sbin/start-slaves.sh
),则所有工作人员(1-4)也会出现此问题。
有没有办法解决这个问题?为了让所有工作人员能够确定是否有一个洗牌服务正在运行并连接到它,而不是尝试创建一项新服务?