在我的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
启动奴隶/工人
mater web UI显示正常,但它只显示一个工作人员已启动。
这是第一个工作人员的日志(工作正常):
Spark命令:/ usr / lib / jvm / java-8-openjdk-amd64 / bin / java -cp / media / 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工作人员:启动守护进程名称: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:将视图更改为:ahmedn1
17/08/30 12:19:33 INFO SecurityManager:将修改修改为: ahmedn1
17/08/30 12:19:33 INFO SecurityManager:更改视图acls 团体:
17/08/30 12:19:33 INFO SecurityManager:更改修改 acls团队:
17/08/30 12:19:33 INFO SecurityManager: SecurityManager:禁用身份验证; ui acls disabled;用户 具有查看权限:设置(ahmedn1);具有查看权限的组: 组();具有修改权限的用户:Set(ahmedn1);团体 修改权限:Set()
17/08/30 12:19:34 INFO Utils:成功 开始服务' sparkWorker'在43479号港口 17/08/30 12:19:35 INFO Worker:启动Spark worker 127.0.0.1:43479,包含2个内核,1000.0 MB RAM
17/08/30 12:19:35 INFO工作人员:运行Spark版本2.2.0
17/08/30 12:19:35 INFO工人:Spark home: /媒体/ ahmedn1 / Ahmedn12 /火花
17/08/30 12:19:35 INFO ExternalShuffleService:在端口7337上启动shuffle服务(auth enabled = false)
17/08/30 12:19:35 INFO Utils:成功启动 service' 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工作人员:连接到masterhosthost:7077 ...
17/08/30 12:19:36 INFO TransportClientFactory:已成功创建 在309 ms之后连接到localhost / 127.0.0.1:7077(耗时0毫秒) 白手起家)
17/08/30 12:19:37 INFO工作人员:已成功注册 与主要火花://127.0.0.1:7077
这是显然未能启动的第二个工作人员的日志:
Spark命令:/ usr / lib / jvm / java-8-openjdk-amd64 / bin / java -cp /媒体/ ahmedn1 / Ahmedn12 /火花/ CONF /:/媒体/ ahmedn1 / Ahmedn12 /火花/瓶/ *
-Xmx1g org.apache.spark.deploy.worker.Worker --webui-port 8082 spark:// localhost:7077
17/08/30 12:19:34 INFO工作人员:启动守护进程名称: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:将视图更改为:ahmedn1
17/08/30 12:19:36 INFO SecurityManager:将修改修改为: ahmedn1
17/08/30 12:19:36 INFO SecurityManager:更改视图acls 团体:
17/08/30 12:19:36 INFO SecurityManager:更改修改 acls团队:
17/08/30 12:19:36 INFO SecurityManager: SecurityManager:禁用身份验证; ui acls disabled;用户 具有查看权限:设置(ahmedn1);具有查看权限的组: 组();具有修改权限的用户:Set(ahmedn1);团体 修改权限:Set()
17/08/30 12:19:37 INFO Utils:成功 开始服务' sparkWorker'在46067号港口 17/08/30 12:19:38 INFO Worker:以2个核心,1000.0 MB启动Spark worker 127.0.0.1:46067 RAM
17/08/30 12:19:38 INFO工作人员:运行Spark版本2.2.0
17/08/30 12:19:38 INFO工人:Spark home: /媒体/ ahmedn1 / Ahmedn12 /火花
17/08/30 12:19:38 INFO ExternalShuffleService:在端口7337上启动shuffle服务(auth enabled = false)
17/08/30 12:19:38错误收件箱:忽略错误 java.net.BindException:已在使用的地址 sun.nio.ch.Net.bind0(Native Method)at 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) 在 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) 在 io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:496) 在 io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:481) 在 io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:965) 在io.netty.channel.AbstractChannel.bind(AbstractChannel.java:210) 在 io.netty.bootstrap.AbstractBootstrap $ 2.run(AbstractBootstrap.java:353) 在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:399) 在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:446)at 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 :(得分:0)
所以,我注意到在尝试为第二个工作人员启动外部随机服务后发生异常 经过source codes的挖掘后,我发现每个群集应该有一个shuffle服务运行。
// 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.")
所以,在我的条件下,我应该只有一个集群或使用以下方式关闭shuffle服务:
spark.dynamicAllocation.enabled false
spark.shuffle.service.enabled false
当我这样做时,它解决了这个问题。