我在獨立模式下運行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)也會出現此問題。
有沒有辦法解決這個問題?爲了讓所有工作人員能夠確定是否有一個洗牌服務正在運行並連接到它,而不是嘗試創建一項新服務?