我在独立模式下运行Spark 2.0,成功将其配置为在服务器上启动,并且还能够将Ipython Kernel PySpark配置为Jupyter Notebook中的选项。一切正常但我面临的问题是,对于我启动的每个笔记本,我的所有4个工作人员都被分配到该应用程序。因此,如果我团队中的另一个人尝试使用PySpark内核启动另一个笔记本电脑,那么在我停止第一个笔记本电脑并释放所有工作人员之前,它就无法工作。
要解决此问题,我尝试按照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工作人员:成功注册了主人 火花://赛伯乐:7077
但是工人2-4的日志显示了这个错误:
INFO ExternalShuffleService:在端口7337上启动shuffle服务 with useSasl = false 16/11/24 13:32:08错误收件箱:忽略错误 java.net.BindException:已在使用的地址
似乎(对我而言)第一名工人在7337号港口成功启动了洗牌服务,但工人2-4不知道"关于这一点,并尝试在同一端口上启动另一个shuffle服务。
如果我首先启动shuffle-service(使用$SPARK_HOME/sbin/start-shuffle-service.sh
)然后尝试启动所有工作人员($SPARK_HOME/sbin/start-slaves.sh
),则所有工作人员(1-4)也会出现问题。
可以选择解决这个问题吗?如果有一个shuffle服务正在运行并连接到它而不是尝试创建一个新服务,那么所有工作人员都能够修复吗?
答案 0 :(得分:1)
我有同样的问题,似乎通过从配置文件中删除spark.shuffle.service.enabled项目来实现它(实际上我没有任何与dynamicAllocation相关的项目)而是把当我请求SparkContext时,这在SparkConf中:
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-service的实例:
$SPARK_HOME/sbin/start-shuffle-service.sh
然后我开始使用这个背景的两个笔记本,并让他们两个做一个小工作。第一个笔记本的应用程序完成工作并处于RUNNING状态,第二个笔记本的应用程序处于WAITING状态。一分钟后(默认空闲超时),资源重新分配,第二个上下文完成其工作(两者都处于RUNNING状态)。
希望这有帮助, 约翰