Spark 工作人员不断删除和添加执行程序

Posted

技术标签:

【中文标题】Spark 工作人员不断删除和添加执行程序【英文标题】:Spark worker keep removing and adding executors 【发布时间】:2016-02-25 18:40:26 【问题描述】:

我尝试使用本地 Ubuntu 虚拟机作为 master,远程 Ubuntu 虚拟机作为 worker 来构建 spark 集群。 由于本地虚拟机在 virtualbox 中运行,为了让远程访客可以访问它,我将虚拟机的 7077 端口转发到主机的 7077 端口。 我开始掌握:

./sbin/start-master.sh -h 0.0.0.0 -p 7077

我让它监听0.0.0.0,因为如果我使用默认的127.0.1.1,远程访客将无法连接到它。 我通过在远程机器上执行以下命令来启动worker:

./bin/spark-class org.apache.spark.deploy.worker.Worker   
spark://129.22.151.82:7077

worker 能够连接到 master,这可以在 UI 上看到:

然后我尝试运行“pi”示例python代码:

from pyspark import SparkContext, SparkConf
conf=SparkConf().setAppName("Pi").setMaster("spark://0.0.0.0:7077)
sc=SparkContext(conf=conf)

.... 一旦我运行它,程序就永远不会停止,我注意到程序总是在删除和添加执行程序,因为执行程序总是以错误代码 1 退出。这是执行程序的stderr

    Using Spark's default log4j profile: org/apache/spark/log4j-  defaults.properties
    16/02/25 13:22:22 INFO CoarseGrainedExecutorBackend: 
Registered signal handlers for [TERM, HUP, INT]
    16/02/25 13:22:22 WARN NativeCodeLoader: Unable to load 
native-hadoop library for your platform... using builtin-java 
classes where applicable
    16/02/25 13:22:23 INFO SecurityManager: Changing view acls to: kxz138,adminuser
    16/02/25 13:22:23 INFO SecurityManager: Changing modify acls to: kxz138,adminuser
    16/02/25 13:22:23 INFO SecurityManager: SecurityManager: 
authentication disabled; ui acls disabled; users with view 
permissions: Set(kxz138, adminuser); users with modify permissions: 
Set(kxz138, adminuser)
    **16/02/25 13:22:23 ERROR UserGroupInformation: 
PriviledgedActionException as:adminuser (auth:SIMPLE) 
cause:java.io.IOException: Failed to connect to /10.0.2.15:34935
    Exception in thread "main" java.io.IOException: Failed to connect to /10.0.2.15:34935**
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:216)
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:167)
    at org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:200)
    at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:187)

我注意到这里的错误实际上是网络问题。工作人员实际上正在尝试访问10.0.2.15,这是我的虚拟机的本地 NAT ip 地址,但失败了。 当我只从本地计算机部署工作人员时,不会发生此错误。 任何人都知道为什么会发生此错误?为什么工作人员试图访问 IP 地址10.0.2.15 而不是我的公共 IP?

顺便说一句,我已经设置了从主机到从机的无密钥 ssh 访问。

【问题讨论】:

你解决了这个问题吗,我面临的和上面一样:( @RahulKoshaley 很遗憾,没有......我开始质疑我将脚本提交到集群的方式。我可能不得不使用 spark-submit 提交脚本,而不是直接从我的 IDE 运行脚本。 我不明白, spark-submit 将如何解决问题。顺便说一句,我解决了我的问题。但这完全是一个差异问题 @RahulKoshaley 你是怎么解决的? 嗨,我的问题有所不同,因为我正在制作两个火花上下文,但是当我使用单个火花上下文运行作业时,它起作用了。 【参考方案1】:

我通过确保集群内的虚拟机属于同一个子网解决了这个问题。例如,最初,我将 IP 192.168.56.101 设置为主节点,192.168.57.101 设置为工作节点,255.255.255.0 作为子网掩码。但这意味着两个 IP 地址不在同一个子网中。将子网掩码更改为 255.255.0.0 后,我可以正常运行我的应用程序。您可能还需要相应地编辑一些配置文件(例如,~/.bashrcconf/spark-env.shconf/slaves.shconf/spark-default.conf/etc/hosts

【讨论】:

以上是关于Spark 工作人员不断删除和添加执行程序的主要内容,如果未能解决你的问题,请参考以下文章

区分 Apache Spark 中的驱动程序代码和工作代码

多节点火花集群上的 spark-shell 无法在远程工作节点上旋转执行程序

Spark不断向死去的执行者提交任务

什么是 Spark 作业?

YARN 上 Spark 应用程序的物理内存使用量不断增加

解释Spark Structured Streaming执行程序和Kafka分区之间的映射