MapReduce--初级
74 | 420 |
通过 | 提交 |
题目描述
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