众所周知,心跳是定期发送的信号,用于指示节点的正常运行或与系统的其他部分同步
在我们的系统中,我们有5个工人计算机,而其中的3个计算机执行。
我们的系统包括5个datanode机器(worker)和3个主机器,hadoop版本为2.6.4,所有机器均为redhat机器版本7.x
和Thrift服务器安装在第一台master1机器上(驱动程序在master1中)
在Spark中,心跳是执行者(从工作计算机)发送给驱动程序的消息(master1计算机),由案例类org.apache.spark.Heartbeat表示。
然后,驱动程序通过org.apache.spark.HeartbeatReceiver#receiveAndReply(context:RpcCallContext)方法接收到该消息。驱动程序:
心跳的主要目的在于检查给定节点是否仍处于活动状态(从工作计算机到master1计算机)
驱动程序通过向自身发送ExpireDeadHosts消息以固定间隔(在spark.network.timeoutInterval条目中定义)对其进行验证。处理该消息后,驱动程序将检查没有最近心跳的执行程序。
直到现在我解释这个概念
我们注意到执行器发送的消息无法传递给驱动程序,从毛线日志中我们可以看到警告
WARN executor.Executor: Issue communicating with driver in heartbeater
我的问题是-驱动程序(master1机器)无法从工作机获得心跳的原因是什么