MapReduce是 Google的一项重要技术,它是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。至少现阶段而言,对许多开发人员来说,并行计算还是一个比较遥远的东西。MapReduce就是一种简化并行计算的编程模型,它让那些没有多少并行计算经验的开发人员也可以开发并行应用。在我看来,这也就是MapReduce的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛。相对于现在普通的开发而言,并行计算需要更多的专业知识,有了MapReduce,并行计算就可以得到更广泛的应用。
MapReduce的名字源于这个模型中的两项核心操作:Map和Reduce。也许熟悉Functional Programming的人见到这两个词会倍感亲切。简单的说来,Map是把一组数据一对一的映射为另外的一组数据,其映射的规则由一个函数来指定,比如对[1, 2, 3, 4]进行乘2的映射就变成了[2, 4, 6, 8]。Reduce是对一组数据进行归约,这个归约的规则由一个函数指定,比如对[1, 2, 3, 4]进行求和的归约得到结果是10,而对它进行求积的归约结果是24。
Map操作是独立的对每个元素进行操作,在FP中,操作是没有副作用的,换句话说,Map操作将产生一组全新的数据,而原来的数据保持不变。因此,它是高度并行的。Reduce操作虽然不如Map操作并行性那么好,但是它总会得到一个相对简单的结果,大规模运算也相对独立,因此也是比较适合并行的。
无论是Map还是Reduce都是以另外的函数作为参数,在 FP中,这样的函数被称为高阶函数(high-order function)。正是因为它们可以同其它函数相结合,所以,我们只要把Map和Reduce这两个高阶函数进行并行化处理,而无需面面俱到的把所有的函数全部考虑到。这样便形成了一个以Map和Reduce为基础的框架,具体应用相关代码写在用户代码中,之后与MapReduce结合获得并行处理的能力。当然,这么做的前提是按照这个框架的要求,把计算归结为Map和Reduce操作。为什么是Map和Reduce?从前面的内容我们可以看出,在 Map过程中,我们将数据并行,也就是将数据分开,而Reduce则把分开的数据合到了一起,换句话说,Map是一个分的过程,Reduce则对应着合,这一分一合便在不知不觉中完成了计算。所以,站在计算的两端来看,与我们通常熟悉的串行计算没有任何差别,所有的复杂性都在中间隐藏了。
所有这些并行化能力的获得都与FP有着密不可分的关系。事实上,不仅仅是MapReduce从FP中获得了灵感,其它一些并行编程模型也走上了同样的道路。 FP中有很多的好东西,比如自动内存管理,比如动态类型。在遥远的年代里,因为机器性能的原因,它们无法得到广泛应用,当机器性能不再是瓶颈,这些东西便逐渐复活了。
前面提到过,并行计算对于普通开发人员来说,有一个比较高的门槛。从前我们或许可以不理会并行计算,但是随着Intel开始将多核带入人们的日常生活,并行计算将会变得更加平民化,毕竟谁也不希望自己机器里面的多核只有一个在干活。现在的许多操作系统会把多核视为多处理器,但那也得有多任务才能在CPU处多分得一杯羹。对于服务器端应用来说,拥有多任务的能力是一个正常的现象。但对于很多桌面应用来说,一条道跑到黑的情况比较多见。而且,多任务并非为并行计算专门准备的,所以,控制粒度是很大的。如果需要更细粒度的并行计算,至少从表达能力上来说,多任务就有些麻烦了。
并行计算进入日常开发的难度就在于编程模型,太复杂的东西会被人唾弃的,CORBA在这方面已经是个反面教材了。MapReduce已经为我们演示了一种可以接受的编程模型,接下来,变化还会有,Intel和AMD都在努力。不过,具体的进程得取决于多核CPU占领市场的进度。
分享到:
相关推荐
改进型MapReduce(MapBalanceReduce)针对原生MapReduce存在的问题进行了优化,特别是在数据均衡和并行Job调度方面取得了显著进步。通过引入新的调度机制和数据处理策略,有效地解决了数据倾斜和任务调度不均衡等问题...
然而,在实际应用过程中,人们发现传统的MapReduce框架如Hadoop MapReduce存在资源利用率不高、任务执行效率低等问题,这限制了其在大规模集群上的应用效果。为了应对这些挑战,杨栋提出了HCE(Highly Efficient ...
然而,Hadoop 1.x版本的MapReduce存在一些问题,如JobTracker的单点故障风险,以及由于JobTracker承担过多职责导致的资源消耗过大。这些问题在后续的Hadoop版本中得到了改进,例如引入YARN(Yet Another Resource ...
7. MapReduce框架在决策树算法中的限制:基于MapReduce实现决策树算法也存在一些限制,例如对输入数据的规模和复杂度的限制,对决策树算法的计算速度和效率的限制等。 8. 基于MapReduce实现决策树算法的优点:基于...
- **键值对的使用**:在MapReduce中,数据总是以键值对的形式存在。键用于标识数据,值则包含了实际的数据内容。这种结构使得数据可以很容易地被组织和处理。 - **数据分区**:MapReduce中的数据会被根据键的范围...
MapReduce虽然强大,但也存在一些局限,如内存限制和数据 Shuffle 开销。为了优化性能,可以使用更高级的工具,比如Apache Spark,它提供了内存计算,减少了磁盘I/O,从而提升了处理速度。此外,可以使用Combiner来...
此外,如果存在重复的个人记录,可以通过比较键值对来消除它们。 3. **Reduce阶段**: Reduce阶段负责聚合Map阶段产生的中间结果。在这个族谱清洗项目中,Reducer可能会收集所有与特定人物相关的键值对,然后合并...
因为在单词计数程序任务中,不同单词的出现次数之间不存在相关性,相互独立,所以,可以把不同的单词分发给不同的机器进行并行处理。因此,可以采用 MapReduce 来实现单词计数的统计任务。 其次,确定 MapReduce ...
然而,K-Means本身存在一些局限性,如对初始聚类中心敏感、不适合处理非凸形状的聚类等,这些问题在使用时需要注意。 总的来说,这个斯坦福大学的MapReduce示例为学习如何在分布式环境中应用K-Means算法提供了一个...
例如,数值可能以字符串形式存在,需要转换为数值类型。同时,对于空行或无效数据,需要进行适当的处理,避免影响计算结果。 总的来说,MapReduce提供了一种灵活的方式来处理大规模数据的平均值计算问题。通过选择...
### MapReduce详解包括配置文件 #### 一、MapReduce概览...尽管存在一定的局限性,但在处理大规模静态数据集时仍然具有不可替代的优势。通过深入理解其工作机制和特点,开发者可以更好地利用MapReduce来解决实际问题。
MapReduce是一个分布式数据处理的编程模型,用于处理和生成大数据集。...尽管它的某些局限性导致新的处理模型如Spark的崛起,但MapReduce在特定场景下的价值依然存在,是大数据处理领域的重要工具之一。
虽然在标准的MapReduce流程中不允许只存在reducer而没有mapper的情况,但是可以通过特殊配置使mapper仅执行简单的数据转发操作,将数据直接传递给reducer,这样就形成了只有reducer的MapReduce作业。 #### 五、总结...
这可能意味着文件名、路径有误,或者文件本身不存在。在成功上传文件之后,下一步是运行MapReduce作业。文中没有详细说明如何运行作业,但在Hadoop MapReduce中,一般通过Hadoop命令行工具来提交作业,命令通常类似...
- **布隆过滤器**:这是一种空间效率高的概率数据结构,用于判断一个元素是否可能存在于集合中。在Map阶段,每个Map任务都会创建一个局部的布隆过滤器,然后在Reduce阶段将它们组合,减少不必要的数据传输和计算。 ...
尽管BSP和MapReduce分别代表了并行计算的不同方面,但它们之间存在紧密的联系。MapReduce可以被视为BSP模型的一个特例,特别是在大规模数据处理场景下。BSP的超步概念与MapReduce中的Map和Reduce阶段有着天然的对应...