`

MapReduce的存在

阅读更多
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实验报告.doc

    中间key/value对被存在本地硬盘的R个不同的区域中,由于可能的key值很可 能不止R个,故必须利用一个分割函数来划分中间文件,常用的是散列的方法(如 hash(key) mod R)。保证key值相同的key/value对被存放同一区域...

    论文研究-迭代式MapReduce研究进展.pdf

    迭代计算普遍存在于大数据处理中,而传统的MapReduce不能显式地支持迭代计算。近几年,研究者扩展和改进原始MapReduce,已开发了若干迭代式MapReduce以更好地为大数据处理而支持迭代计算。对迭代式MapReduce编程框架...

    MapReduce实例分析:单词计数

    因为在单词计数程序任务中,不同单词的出现次数之间不存在相关性,相互独立,所以,可以把不同的单词分发给不同的机器进行并行处理。因此,可以采用 MapReduce 来实现单词计数的统计任务。 其次,确定 MapReduce ...

    Hadoop中MapReduce基本案例及代码(五)

    前四节提供了几个小案例 下面详细介绍MapReduce中Map任务Reduce任务以及MapReduce的执行流程。 Map任务: 读取输入文件内容,解析成key,value对。...注意:MapReduce中,Mapper可以单独存在,但是Reducer不能存在。

    Hadoop源代码分析(包org.apache.hadoop.mapreduce)

    包org.apache.hadoop.mapreduce的Hadoop源代码分析

    论文研究-基于MapReduce的随机抽样K-means算法.pdf

    利用MapReduce框架改进K-means虽然解决了这个问题,但也存在着聚类效果不稳定以及准确率不高等问题,提出一种改进算法,利用MapReduce框架实现K-means时,采用多次随机抽样,通过计算密度、距离与平方误差等方法,...

    Hadoop平台的MapReduce模型性能优化研究

    本文首先介绍了Hadoop平台的背景,包括它在技术背景上的产生与发展,在应用背景上的应用与前景。之后对 Hadoop的关键技术 HDFS、MapReduce和Scheduler...这种管理机制实现简单,但是存在资源囤积现象,降低了资源利用率。

    hdfs的api操作、mapreduce以及重写patitioner的例子

    hdfs的api操作、mapreduce以及重写patitioner的例子,eclipse项目格式,导入就可以了

    Hadoop MapReduce架构

    尽管 MapReduce 1.0 中存在一些问题,但是整体架构比较清晰,更适合初学者理解 MapReduce 的核心概念。所以,本教程首先使用 MapReduce 1.0 来介绍 MapReduce 的核心概念,然后再在此基础上介绍 MapReduce 2.0。 一...

    Google云计算经典论文 GFS BigTable MapReduce

    We have designed and implemented the Google File Sys- tem, a scalable distributed file system for large distributed data-intensive applications. It provides fault tolerance while running on ...

    yarn入门——yarn的架构及作业调度

    mapReduce存在问题:JobTracker单点故障JobTracker承受的访问压力大,影响系统扩展不支持MapReduce之外的计算框架,比如Storm,spark,flink是一种新的Hadoop资源管理器,它是一个通用资源管理系统,YARN的基本思想是...

    论文研究-基于MapReduce的最大团算法.pdf

    同时它的简单性也存在一些不足,如内在的表达能力较弱,对于一些复杂的算法必须由程序员对其进行分解,分解为可以在MapReduce框架内独立运行的单元. 本研究着重分析了使用MapReduce编程框架对社会网络分析中的最大团...

    第二章 分布式文件系统HDFS+MapReduce(代码实现检查文件是否存在&WordCount统计).docx

    第二章 分布式文件系统HDFS+MapReduce(代码实现检查文件是否存在&WordCount统计),课程依赖上一个章节:第一章 大数据安装教程(Virtual&ubuntu&hadoop单机)

    一种基于MapReduce高效K-means并行算法

    针对K-means算法对初值选取的依赖,收敛速度慢,聚类精度低,以及对海量数据的处理存在内存瓶颈的问题,提出一种基于MapReduce的高效K-means并行算法.该算法在MapReduce框架基础上,结合K选择排序算法进行并行采样,提高...

    simple-mapreduce:使用C ++和MPI构建的MapReduce应用

    此外,此功能已通过带有文字计数任务的多个文本进行了测试,但尚未经过全面测试,因此可能存在错误。目录1项目结构目录的结构如下。 .├─ app/ # put main task of mapreduce| ├─ CMakeLists.txt # cmake file ...

    MapReduce-recomend:二度人脉好友推荐mapreduce算法

    我们定义一个符号“>”来代表follow,上面的例子可以这样表示A>BB>C在社交网络任何一个活跃的用户U都存在对应的两个集合,一个是粉丝集合,一个是关注集合,以用户U作为中间联系的2度人脉对,是粉丝集合和关注集合的...

    MapReduce-program:在Hadoop上使用MapReduce程序计算大型语料库的句子的可能性

    该项目涉及使用hadoop上的MapReduce程序计算巨大语料库中每个句子的合理性。 通过使用以下公式,在位置i处存在的单词的句子的概率: P(i, w) = Num(i, w) / N; 其中Num(i,w)是w在一个句子的第i个位置处存在...

    Sparkvs.MapReduce时间节约66%,计算节约40%

    MapReduce为大数据挖掘提供了有力的支持,但是复杂的挖掘算法往往需要多个MapReduce作业才能完成,多个作业之间存在着冗余的磁盘读写开销和多次资源申请过程,使得基于MapReduce的算法实现存在严重的性能问题。...

    论文研究-基于MapReduce的增量式数据集的相似性连接.pdf

    MapReduce框架下已存在很多相似性连接算法,但仍然存在一些不足,如大量的索引加大时间、空间的开销;现有算法不能有效地完成增量式数据集的相似性连接等。针对海量增量式数据集进行了研究,采用抽样技术得到有效...

    predictblty:Hazelcast MapReduce API 上的简单机器学习实现

    Hazelcast MapReduce API 上的简单机器学习实现 ML API 现在还处于早期阶段,它只支持 kNN。 我添加了一种使用注释和添加距离计算方法添加自己的对象的方法。 下一个要支持的基于共现矩阵的推荐方法。 我计划支持...

Global site tag (gtag.js) - Google Analytics