单源最短路径算法的MapReduce实现(Metis版本)

1. Mapreduce框架

1.1 Mapreduce介绍

Mapreduce 是谷歌提出的一个分布式计算框架, 利用该框架, 能够让用户方便地利用多机并行处理数据。 该框架有两个重要的函数: Map 和 Reduce, Map 函数对整个输入数据进行处理, 按照用户定义的处理方式, 从输入的数据中产生中间键值对( key, value)。Reduce 函数对这些键值对进行处理, 相同 key 的键值对由同一个 Reduce 进程进行处理。最终将处理的结果进行合并。 整个处理流程如下:
mapreduce 执行流程

1.2 Phoenix & Metis

Phoenix 是由斯坦福大学基于多核多处理器系统实现的一套 mapreduce 框架, Phoenix框架能够自动管理线程的创建, 动态任务调度, 数据划分和故障容错。 本质上与用户写的多线程程序没有区别, 只不过通过这个框架, 能够更容易编写出能够划分为“map-reduce-merge”模式的数据处理业务。

Metis 框架是在 Phoenix 的基础上改进而来, Phoenix 中在 map 阶段使用哈希表, 对于哈希表中的每条条目使用排序数组进行保存, 而 Metis 采用了 BTree 的方式进行了代替, 以此来提高速度。
这里写图片描述


2. Metis 框架

2.1 三种数据处理模式

  • map_reduce
  • map_group
  • map_only

2.2 框架使用

struct SPFA: public map_reduce{
    bool split(split_t *out, int ncores);
    void map_function(split_t *ma);
    void reduce_function(void *k, void **v, size_t length);
    int key_compare(const void *s1, const void *s2);
};
  • split: 数据切分函数, 在这里根据 ncores 参数, 用户 自定义如何划分数据, 并将数据切分信息保存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值