美文网首页spark大数据生态圈玩转大数据
Spark内核分析之BlockManager工作原理介绍

Spark内核分析之BlockManager工作原理介绍

作者: z小赵 | 来源:发表于2018-01-05 10:11 被阅读66次

            最近一直在忙,没顾得上写文章,新年的第一篇文章,希望大家可以喜欢;好了,今天接着之前的内容,来聊聊BlockManager的工作原理,上图来分析;

    BlockManager原理图

            在DAGShceduler中有一个BlockManagerMaster对象,该对象的工作就是负责管理全局所有BlockManager的元数据,当集群中有BlockManager注册完成的时候,其会向BlockManagerMaster发送自己元数据信息;BlockManagerMaster会为BlockManager创建一个属于这个BlockManager的BlockManagerInfo,用于存放BlockManager的信息。

    简单介绍一下BlockManager主要的几个组件;

    DiskStore:负责磁盘存储

    MemoryStore:负责内存存储

    BlockManagerWorker:负责接收相关请求并执行任务

    ConnectionManager:负责与其他BlockManager建立连接

    下面我们来看看shuffle write和shuffle read的工作原理;

    Shuffle Write工作原理

    当Spark作业进行持久化或Shuffle等操作的时候,会出发BlockManager进行写操作;比如执行persist操作的时候,就会出发数据持久化的操作,数据会优先进入到内存,当内存不足,会将数据持久化到磁盘。此时如果指定了replicate,那么数据会通过BlockManagerWorker复制一份到其他节点上去。

    Shuffle Read工作原理

    当Spark作业的某个算子触发读取数据的操作,首先,会在该算子所在的BlockManager读取数据,如果本地没有数据,BlockManagerWorker会通知ConnectionManager,后者通过向其他BlockManager的ConnectionManager建立连接,然后本节点向建立连接的BlockManager节点拉取数据;当BlockManager的相关信息发生变化的时候,BlockManager会通过Actor向BlockManagerMaster发送改变信息,BlockManagerInfo内部的BlockStatus会相应地改变相应地状态。

    总结:以上对BlockManager的工作原理做简单介绍,从而理清数据在各个算子之间是如何存储和传递的;由于源码比较庞大,所以请感兴趣的小伙伴们自行去研究相关源码;欢迎关注。

    如需转载,请注明:

    上一篇:Spark内核分析之DAGScheduler划分算法实现原理讲解(重要)

    本篇:Spark内核分析之BlockManager工作原理介绍

    相关文章

      网友评论

      • 钢筋铁骨:您好。读完了文章,我有个疑问,楼主有没有遇到过:
        默认配置中,tmp目录下的内容,我理解就是spark的BlockManager来负责写的,这些内容应该是包含shuffle的中间过程。
        我现在遇到一个问题,我跑的是spark-streaming应用(4W/s的record,local模式),tmp目录会生成几十G,然后造成了我的spark-streaming应用延时,但我感觉我的数据量都达不到tmp的大小,这是什么情况
        z小赵:是不是可以考虑优化shuffle类算子,比如某些中间结果比较小的缓存下来做广播处理等等
        钢筋铁骨:@z小赵 我解决了,在window里的shuffle操作太多了,生成的都是临时数据,而且单机也遇到瓶颈了。解决办法有两步,1是去掉window,2是扩展成集群
        z小赵:我没有遇到过你所说的情况,有没有可能是你的任务产生了大量的中间数据导致tmp目录变得非常大
      • Zhang_er:兄弟666。比老铁的视频说的细多了
        z小赵:@Zhang_er 还需进步

      本文标题:Spark内核分析之BlockManager工作原理介绍

      本文链接:https://www.haomeiwen.com/subject/umalnxtx.html