Spark中shuffle数据的存储

Spark中shuffle过程由ShuffleRDD触发。

shuffle的数据包含读取和写入两种操作,在一个SparkContext中,所有的shuffleRDD具有一个递增的shuffleID来唯一标识Shuffle数据对应的RDD及Partition。

Spark集群中由MapOutTracker来跟踪Shuffle数据的位置,MapOutTracker有两个子类:MapOutTracker和MapOutTrackerSlaver。Slaver汇报自己节点机器上的MapStatus给Master,通过RPC过程就能获取全局的MapStatus信息,这样每个ShuffleTask也就知道了对应的shuffleId的数据存储在哪个机器上。

数据的存储通过ShuffleManager来管理,它会通过ShuffleReader和ShuffleWrite来负责读写两个过程。具体的数据存储是通过BlockManager来完成的,这里不再详细论述BlockManager的功能。

ShuffleManager操作数据的时候,首先根据MapOutTracker机制获取ShuffleId的位置,然后启动Fetch过程从本地或远程拉取数据,组装成Iterator[Any]格式供RDD计算使用,具体其实是通过ShuffleBlockFetcherIterator来实现的。

概括一下,ShuffleManager、MapOutTracker等都是管理的Shuffle数据的元数据,真实数据的操作是通过BlockManager来实现的,ShuffleBlockFetcherIterator是一个中间类,用来生成Iterator[Any]给RDD的partition计算使用。

 

 

转载于:https://my.oschina.net/u/778683/blog/2998016

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值