无法启动所有火花工人

时间:2017-08-30 10:57:07

标签: ubuntu apache-spark

在我的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.runAllTask​​s(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)

所以,我发现问题出在地址绑定中,这可能与端口有关。但它不应该自动选择一个自由端口吗?

1 个答案:

答案 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

当我这样做时,它解决了这个问题。