MapReduce与软件事务内存:分布式编程与并发处理的探索
1. MapReduce相关技术
MapReduce在处理大规模数据时十分强大,但运行时间常受“掉队者”(stragglers)影响。“掉队者”指执行最后几个映射或归约任务耗时较长的机器,可能因任务本身复杂,也可能是机器性能不佳,如CPU被其他进程占用、硬盘故障致读取缓慢。
为解决该问题,可采用备份任务(Backup tasks)。当只剩少量映射任务时,主节点会在空闲工作节点为每个进行中的映射任务安排一个备份执行。只要任务的主实例或备份实例完成,该任务就标记为完成,归约任务同理。虽备份任务会额外占用1 - 2%的计算资源,但能显著缩短大型MapReduce操作的完成时间。
MapReduce模型还有一些扩展特性:
- 分区函数(Partitioning function) :用户指定归约任务或输出文件数量(R),中间数据通过分区函数按中间键分区。默认分区函数用哈希(hash(key) % R)使数据均匀分布在R个分区。不过,某些情况下用其他键函数分区更有用,如输出键为URL时,希望同一主机的所有条目在同一输出文件,用户可自定义分区函数,如hash(Hostname(urlkey)) % R。
- 排序保证(Ordering guarantees) :MapReduce实现会对中间数据排序,将相同中间键的中间值分组。因很多用户希望归约函数按排序键调用,所以在MapReduce库接口中保证此排序属性。
- 跳过坏记录(Skipping bad records) :用户代码的bug可能使映射
超级会员免费看
订阅专栏 解锁全文

1740

被折叠的 条评论
为什么被折叠?



