Apache MapReduce

一种编程范式,它允许在 Apache Hadoop 聚类中的数百或数千台商品服务器之间进行非结构化数据的大规模扩展

Orange and blue technology background circuit board and code. 3d Illustration

什么是 MapReduce?

MapReduce 是一种编程范式,它允许在 Hadoop 聚类中的数百或数千台服务器之间进行大规模扩展。 作为处理组件,MapReduce 是 Apache Hadoop 的核心。 术语“MapReduce”指的是 Hadoop 程序执行的两个不同的独立任务。 第一个是映射作业,它接受一组数据,并将其转换为另一组数据,其中各个元素分解为元组(键/值对)。

缩减作业以映射的输出作为输入,并将这些数据元组组合为更小的一组元组。 正如名称 MapReduce 的顺序所暗示的那样,缩减作业总是在映射作业之后执行。

MapReduce 编程提供了一些优势,有助于从您的大数据获得宝贵的洞察:

  • 可扩展性。 企业可以处理 Hadoop Distributed File System (HDFS) 中存储的 PB 级数据。
  • 灵活性。 利用 Hadoop,可以更轻松地访问多个数据源和多个类型的数据。
  • 速度。 利用并行处理和最小数据迁移,Hadoop 提供了大量数据的快速处理。
  • 简便易用。 开发者可以使用一系列语言(包括 Java、C++ 和 Python)编写代码。

MapReduce 示例

这是一个非常简单的 MapReduce 示例。 无论您需要分析的数据量如何,关键原则保持不变。

假设你有五个文件,每个文件包含两列(按照 Hadoop 的术语来说,一个键和一个值),表示一个城市和该城市在各种测量日记录的相应温度。 城市是键,温度是值。 例如:(Toronto, 20)。 在我们已收集的所有数据中,您想要在各个数据文件中找出每个城市的最高温度(注意,每个文件可能将相同的城市表示多次)。

使用 MapReduce 框架,可以将这种情况细分为五个映射任务,其中每个映射器处理五个文件之一。 映射器任务遍历数据,并返回每个城市的最高温度。

例如,针对上述数据从一个映射器任务生成的结果将类似于以下内容:(Toronto, 20) (Whitby, 25) (New York, 22) (Rome, 33)

假设其他四个映射器任务(处理此处未显示的其他四个文件)产生以下中间结果:

(Toronto, 18) (Whitby, 27) (New York, 32) (Rome, 37) (Toronto, 32) (Whitby, 20) (New York, 33) (Rome, 38) (Toronto, 22) (Whitby, 19) (New York, 20) (Rome, 31) (Toronto, 31) (Whitby, 22) (New York, 19) (Rome, 30)

所有这五个输出流都将馈送到缩减任务中,以组合输入结果并为每个城市输出单个值,产生如下所示的结果集:(Toronto, 32) (Whitby, 27) (New York, 33) (Rome, 38)。

打个比方,可以将映射和缩减任务想象成在罗马时代开展的人口普查,人口普查局将办事人员派遣到帝国的各个城市。 每个城市的每个人口普查办事人员都负责统计该城市中的人口数量,然后将其结果汇集到首都。 在首都,来自各个城市的结果将缩减为单个计数(所有城市的总和),以确定帝国的总人口。 这种将人口并行映射到城市,然后组合结果(缩减)的方法,相较于派遣一个人以串行方式统计帝国总人口的方法,要高效得多。


相关解决方案

使用 IBM 和 Cloudera 的大数据解决方案推动更好、更快的分析

IBM 和 Cloudera 合作提供了一个行业领先的企业级 Hadoop 分发版,包括产品和服务的集成生态系统,以支持更快的大规模分析。


Apache Hadoop

使用开源、高度可伸缩的存储和编程平台,利用大数据的威力。 IBM 提供兼容 Hadoop 的解决方案和服务,以帮助您利用所有类型的数据,得出洞察并更好地做出数据驱动的业务决策。


数据湖

构建基于 Hadoop 的数据湖,以优化 Hadoop 数据的潜力。 借助 IBM 和 Cloudera 的解决方案和产品生态系统,更好地管理、管制、访问和探索数据不断增长的数量、速度和种类。



了解最新资讯,保持联系

Hadoop 社区 探索 Hadoop 博客