mapreduce的概念

mapreduce的概念

MapReduce是一种编程模型,用于大规模数据集(通常大于1TB)的并行运算。以下是关于MapReduce概念的详细解释:

一、MapReduce的定义与来源

  • MapReduce的概念“Map(映射)”和“Reduce(归约/化简)”,以及其主要思想,都是从函数式编程语言里借鉴而来的,同时它还具备矢量编程语言的特性。
  • MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。

二、MapReduce的工作原理

  • 在MapReduce模型中,通常需要指定一个Map函数和一个Reduce函数。
    • Map函数:用于把一组键值对映射成一组新的键值对。在这个阶段,处理的是原始数据,这些数据是杂乱无章的,每条数据之间互相没有关系。Map函数负责解析每个数据,从中提取出key和value,也就是提取了数据的特征。
    • Reduce函数:并发执行,用于对所有映射的键值对中的每一个共享相同的键组进行处理。在经过MapReduce的Shuffle阶段之后,到了Reduce阶段,数据是以“key后面跟着若干个value”的形式来组织的,这些value有相关性(至少它们都在一个key下面),符合函数式语言里map和reduce的基本思想。在此基础上可以做进一步的处理以便得到结果。

三、MapReduce的核心功能与特性

  • 数据划分和计算任务调度:MapReduce能自动将一个作业待处理的大数据划分为很多个数据块,每个数据块对应于一个计算任务,并自动调度计算节点来处理相应的数据块。
  • 易于编程:开发人员只需通过编写Map和Reduce函数,不需要考虑分布式计算框架内部的运行机制,即可在Hadoop集群上实现分布式运算。
  • 良好的扩展性:当计算资源不能满足需求时,可以通过简单地增加机器来扩展计算能力。
  • 高容错性:MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。如果某个节点出现问题,它可以把上面的计算任务转移到另外一个节点上运行,这个过程不需要人工参与,完全由Hadoop内部完成。
  • 适合PB级以上海量数据的离线处理:MapReduce可以实现上千台服务器集群并发工作,提供强大的数据处理能力。

然而,MapReduce也有一些局限性,例如它不擅长实时计算、流式计算和DAG(有向图)计算。

四、MapReduce的应用与影响

  • MapReduce在Google被用在非常广泛的应用程序中,包括分布grep、分布排序、web连接图反转、每台机器的词矢量、web访问日志分析、反向索引构建、文档聚类、机器学习、基于统计的机器翻译等。
  • 2004年,开源项目Lucene(搜索索引程序库)和Nutch(搜索引擎)的创始人Doug Cutting基于Java设计开发了一个称为Hadoop的开源MapReduce并行计算框架和系统。自此,Hadoop成为Apache开源组织下最重要的项目之一,并得到了全球学术界和工业界的普遍关注与广泛应用。
  • MapReduce的推出给大数据并行处理带来了巨大的革命性影响,使其已经成为事实上的大数据处理的工业标准。

综上所述,MapReduce是一种强大的编程模型,为大规模数据集的并行运算提供了有效的解决方案。