shuffle的简单实现

shuffle在分布式系统中是至关重要的操作,常用于数据混洗。简单实现包括直接传输和持久化后再传输两种方式。直接传输速度快但无容错,而持久化虽慢但保证容错。本文详细探讨了shuffle的实现,特别是持久化情况下的实现,涉及socket通信、序列化、反序列化以及actor并发库。在持久化过程中,数据先写入磁盘,然后通过网络传输到上端,期间可能使用缓冲区以提高效率。
摘要由CSDN通过智能技术生成

在分布式系统的实现中,shuffle是一个非常关键的操作,直接决定算法在分布式环境下执行的可行性。shuffle被称为数据混洗,它在某些并行系统中被称作exchange。shuffle最简单的实现方式就是对数据做某种策略上的切分(比如说哈希切分,比如说范围切分),然后可以选择切分之后的数据直接传输或者将数据持久化供容错,我们比较一下这两种方式。1,直接传输:当数据切分之后马上传输,会不经过磁盘,直接从内存中向另一个节点的内存中传,当然这可以使网络达到最大速度,但是没法容错,除非你设计的系统就天天跑个位数的机器(个人观点),否则你作业稍微一错,重跑。分布式下的作业一般涉及较多数据和长时间执行,我们可以计算一下trade-off,显然不划算。2,持久化之后传输虽然慢,但你的容错有保障,因为数据在磁盘上呢,不过你只能得到最多1/2的网络带宽极限(个人实现证明)。

空谈都是虚的,直接看shuffle的简单实现,我们就以压磁盘的情况来讨论,在经典的mapreduce理论中,可以分为两个节点,一个map阶段,一个reduce阶段,map节点端会容错,也就是压磁盘。我们在此分为上端和下端,因为数据位拉取策略,从执行拓扑的根节点开始执行,reduce端为上端,map端为下端:

说先上端会将其所在位置的执行子树发送到下端(我们首先考虑上端的情况),注意这一步我们需要做什么?因为要传输到远程节点执行。我们从最本源的地方说起,传输就涉及到网络,网络在C++/C中你可以选择库,但是为了挑战一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值