spark receiver工作内幕

ReceiverTracker管理所有receiver,其中Recevier是一个抽象类

发消息有两种 :

一种是local 自己给自己发 ;
第二种是remote 远程给自己发

ReceiverTracker.scala中receive 方法有以下几个case 类
(StartAllReceiver RestartReceiver CleanupOldBlocks UpdateReceiverRateLimit ReportError)
这里写图片描述

接收到消息后回馈给发送者receiveAndReply

这里写图片描述

停止发送消息

这里写图片描述
启动RPC消息通信实体endpoint
这里写图片描述

Nis.id是指消息不管从kafka还是socket还是hdfs等哪里来源的都会有个自己的id
这里写图片描述

这里写图片描述

确保所有的slave都已经注册,避免所有receiver都放在一个node中,已经获得资源,在这均衡一下

这里写图片描述

这里写图片描述

schedulingPolicy类具体发送到什么地方进行计算,其中scheduleReceivers方法中有两个参数excutors跟receivers,计算哪些receiver在哪个excutor上执行

SocketInputDStream.scala
这里写图片描述

ReceiverSupervisor.scala
这里写图片描述

Case StartAllReceivers中是个循环过程
这里写图片描述
为了启动一个receiver搞了一个RDD,在下面运行了一个spark job,
用job有什么好处呢?
第一个是确保receiver一定被启动起来,job启动失败就给重来的,future.onComplete中有case Success和case Failure,不会因为框架的问题而启动失败;
第二个是task很有可能两个出现在一个机器上但是receiver不大可能,这样做吞吐量更强。
job在excutor中执行时候首先启动一个ReceiverSupervisorImpl(启动时候可以知道host集群excutorid)然后调用它的父类ReceiverSupervisor中的start方法,

这里写图片描述
这里写图片描述

ReceiverSupervisorImpl.scala中的

这里写图片描述
调用onStart及其startReceiver两个方法
这里写图片描述

这里写图片描述

Receivertracker.scala中的
这里写图片描述
ReceiverSupervisorImpl.scala中的
这里写图片描述
这两个对应的 此处并不是指Receivertracker这个类

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值