MapReduce--初级

 1 Sec 64 MB |  显示标签
74420
通过提交

题目描述

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(规约)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。

图1 MapReduce逻辑图

对MapReduce模型进行简化,直观地,我们认为现有的集群里,有一台Master结点,用以发送指令,并完成Reduce过程;有N台Slaves结点,用以完成Map阶段的工作,并将结果以键值对的方式通过网络传递给Master结点。理想状况下,忽略数据的分布情况、数据的传输时间,以及IO的时间消耗(这些问题往往是设计并行程序时的关键问题)。

MapReduce中有一个问题为负载平衡问题,即reduce阶段必须在所有map结点完成后开始,如果map结点的任务负载不平衡,那么负载小的map结点很快就会将结果计算完毕,而进入等待,而负载大的map结点将继续运行。而Reduce阶段将会在最后一个map结点运行结束后开始,因此严重的负载不均问题将导致极大的计算资源的浪费。

简化地,我们不考虑map结点、reduce结点运行出错等细节问题,而只针对负载均衡问题本身:若任务以指令为单位,某任务A共有M条指令,每条指令在map结点上运行消耗K秒,reduce阶段总共消耗R秒,那么理论上,运用MapReduce模型完成A任务最少的时间开销是多少呢?

输入格式

输入为一行,共4个数字,用单个空格隔开,分别代表M、N、K、R。

数据范围不会超过109

输出格式

输出为一行,包含一个数字T,保留2位小数(四舍五入)。

T为完成任务A的时间开销,即完成A任务的最少需要多少分钟。

样例输入 #1

2151 3 1 3

样例输出 #1

12.00

来源

The 13th ZJNU Anniversary Contest
 上传者
coach
 创建时间
2014-07-17 23:50
 修改时间
2017-05-14 04:46