2017-08-30 62 views
0

在我spark-env.sh我有以下設置:無法啓動所有的火花工人

SPARK_LOCAL_IP=127.0.0.1 
SPARK_MASTER_HOST=127.0.0.1 
SPARK_WORKER_INSTANCES=2 
SPARK_WORKER_MEMORY=1000m 
SPARK_WORKER_CORES=1 

我使用start-master.sh啓動主,然後我開始使用start-slave.sh spark://localhost:7077
的母校web用戶界面是奴隸/工人顯示正常,但它顯示只有一名工人開始。 這是第一個工人的日誌(這是工作的罰款):

星火命令:/ usr/lib中/ JVM/JAVA-8的OpenJDK,AMD64 /斌/ java命令/媒體/ ahmedn1/Ahmedn12/spark/conf /:/ media/ahmedn1/Ahmedn12/spark/jars/* -Xmx1g org.apache.spark.deploy.worker.Worker --webui-port 8081 spark:// localhost:7077

17/08/30 12:19:31 INFO Worker:已啓動守護程序,進程名稱:28769 @ ahmedn1-Inspiron-5555
17/08/30 12:19:31 INFO SignalUtils:TERM的註冊信號處理程序
17/08/30 12:19:31 INFO SignalUtils:HUP的註冊信號處理程序
17/08/30 12:19:31 INFO SignalUtils:INT的註冊信號處理程序
17/08/30 12:19:33 INFO SecurityManager:將視圖acls更改爲:ahmedn1
17/08/30 12:19 :33 INFO SecurityManager的:更改修改ACL,以: ahmedn1
17/08/30 12點19分33秒的SecurityManager INFO:改變視圖的ACL 組:
17/08/30 12點19分33秒的SecurityManager INFO:更改修改 acls組爲:
17/08/30 12:19:33信息SecurityManager: SecurityManager:身份驗證已禁用;用戶禁用;具有查看權限的用戶 :Set(ahmedn1);具有查看權限的組: Set();具有修改權限的用戶:Set(ahmedn1);與 修改權限組:一組()
17/08/30 12點19分34秒INFO utils的:成功 啓動服務 'sparkWorker' 端口43479.
17/08/30 12時十九分35秒INFO 工人:啓動Spark worker 127.0.0.1:43479 with 2 cores,1000.0 MB RAM
17/08/30 12:19:35 INFO Worker:運行Spark 2.2.0版
17/08/30 12:19:35 INFO工作人員:Spark主頁: /media/ahmedn1/Ahmedn12/spark
17/08/30 12:19:35信息 ExternalShuffleService:啓動端口7337上的洗牌服務(驗證碼 enabled = false)
個 17/08/30 12時19分35秒INFO utils的:成功啓動 服務 'WorkerUI' 在端口8081
17/08/30 12時19分35秒INFO WorkerWebUI: 綁定WorkerWebUI到127.0.0.1,開始在http://127.0.0.1:8081
17/08/30 12點19分35秒INFO工人:連接到本地主機掌握:7077 ...
17/08/30 12點19分36秒INFO TransportClientFactory:成功創建 連接到localhost/127.0 .0.1:7077在309 ms之後(在引導程序 中花費0 ms)
17/08/30 12:19:37信息工作者:已成功註冊 ,主spark://127.0.0。1:7077

,這是第二個工人的日誌這顯然無法啓動:

星火命令:/ usr/lib中/ JVM/JAVA-8的OpenJDK,AMD64 /斌/ java命令 /媒體/ ahmedn1/Ahmedn12 /火花/ conf目錄/:/媒體/ ahmedn1/Ahmedn12 /火花/瓶/ *

-Xmx1g org.apache.spark.deploy.worker.Worker --webui端口8082 spark:// localhost:7077

17/08/30 12:19:34 INFO Worker:已啓動的進程nam守護程序e:28819 @ ahmedn1-Inspiron-5555
17/08/30 12:19:34 INFO SignalUtils:TERM的註冊信號處理程序
17/08/30 12:19:34 INFO SignalUtils:HUP的註冊信號處理程序
17/08/30 12:19:34 INFO SignalUtils:INT的註冊信號處理程序
17/08/30 12:19:36 INFO SecurityManager:將視圖acls更改爲:ahmedn1
17/08/30 12:19 :36 INFO SecurityManager的:更改修改ACL,以: ahmedn1
17/08/30 12時19分36秒的SecurityManager INFO:改變視圖的ACL 組:
17/08/30 12時19分36秒的SecurityManager INFO:更改MODI fy acls組:
17/08/30 12:19:36信息SecurityManager: SecurityManager:身份驗證已禁用;用戶禁用;具有查看權限的用戶 :Set(ahmedn1);具有查看權限的組: Set();具有修改權限的用戶:Set(ahmedn1);與 修改權限組:一組()
17/08/30 12點19分37秒INFO utils的:成功 啓動服務 'sparkWorker' 端口46067.
17/08/30十二時19分38秒INFO 工人:啓動兩個內核的Spark worker 127.0.0.1:46067,1000.0 MB RAM
17/08/30 12:19:38信息Worker:運行Spark 2.2.0版
17/08/30 12:19:38信息Worker:Spark home: /media/ahmedn1/Ahmedn12/spark
17/08/30 12:19:38信息 ExternalShuffleService:在端口7337上啓動隨機播放服務(驗證碼 enabled = false)
17/08/30 12:19:38錯誤收件箱:忽略錯誤 java.net.BindException:已在使用的地址 sun.nio.ch.Net.bind0(本地方法) sun.nio.ch .net.bind(Net.java:433)at sun.nio.ch.Net.bind(Net.java:425)at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:127) 在 io.netty.channel.AbstractChannel $ AbstractUnsafe.bind(AbstractChannel.java:501) 在 io.netty.channel。 DefaultChannelPipeline $ HeadContext.bind(DefaultChannelPipeline.java:1218) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:496) 在 io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:481) 在 io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline .java:965) at io.netty.channel.AbstractChannel.bind(AbstractChannel。Java的:210) 在 io.netty.bootstrap.AbstractBootstrap $ 2.run(AbstractBootstrap.java:353) 在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:399) 在io.netty .channel.nio.NioEventLoop.run(NioEventLoop.java:446)在 io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run(SingleThreadEventExecutor.java:131) 在 io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator .RUN(DefaultThreadFactory.java:144) 在java.lang.Thread.run(Thread.java:748)

所以,我看到的問題是在地址綁定可能與端口有關。但是它不是應該自動選擇一個自由端口嗎?

回答

0

因此,我注意到在嘗試啓動第二個工作人員的外部隨機服務後發生異常。
經過source codes的挖掘後,我發現每個羣集應該有一個洗牌服務。

// With external shuffle service enabled, if we request to launch multiple workers on one host, 
// we can only successfully launch the first worker and the rest fails, because with the port 
// bound, we may launch no more than one external shuffle service on each host. 
// When this happens, we should give explicit reason of failure instead of fail silently. For 
// more detail see SPARK-20989. 
val externalShuffleServiceEnabled = conf.getBoolean("spark.shuffle.service.enabled", false) 
val sparkWorkerInstances = scala.sys.env.getOrElse("SPARK_WORKER_INSTANCES", "1").toInt 
require(externalShuffleServiceEnabled == false || sparkWorkerInstances <= 1, 
    "Starting multiple workers on one host is failed because we may launch no more than one " + 
    "external shuffle service on each host, please set spark.shuffle.service.enabled to " + 
    "false or set SPARK_WORKER_INSTANCES to 1 to resolve the conflict.") 

所以,在我的條件我應該只有一個羣集或使用關閉洗牌服務:

spark.dynamicAllocation.enabled false 
spark.shuffle.service.enabled false 

當我這樣做,它解決了這個問題。