MapReduce工作原理
Map-Reduce框架的运作完全基于<key,value>对,即数据的输入是一批<key,value>对,生成的结果也是一批<key,value>对,只是有时候它们的类型不一样而已。Key和value的类由于需要支持被序列化(serialize)操作,所以它们必须要实现Writable接口,而且key的类还必须实现WritableComparable接口,使得可以让框架对数据集的执行排序操作。
一个Map-Reduce任务的执行过程以及数据输入输出的类型如下所示:
(input)<k1,v1> -> map -> <k2,v2> -> combine -> <k2,v2> -> reduce -> <k3,v3>(output)
下面通过一个的例子并结合源代码来详细说明这个过程
这也是Hadoop自带的一个例子,目标是统计文本文件中单词的个数。
假设有如下的两个文本文件来运行WorkCount程序:
Hello Hadoop GoodBye Hadoop
|
Hadoop针对文本文件缺省使用LineRecordReader类来实现读取,一行一个key/value对,key取偏移量,value为行内容。
如下是map1的输入数据:
Key1
|
Value1
|
0
|
Hello World Bye World
|
如下是map2的输入数据:
Key1
|
Value1
|
0
|
Hello Hadoop GoodBye Hadoop
|
3.3 map输出/combine输入
如下是map1的输出结果
Key2
|
Value2
|
Hello
|
1
|
World
|
1
|
Bye
|
1
|
World
|
1
|
如下是map2的输出结果
Key2
|
Value2
|
Hello
|
1
|
Hadoop
|
1
|
GoodBye
|
1
|
Hadoop
|
1
|
Combiner类实现将相同key的值合并起来,它也是一个Reducer的实现。
如下是combine1的输出
Key2
|
Value2
|
Hello
|
1
|
World
|
2
|
Bye
|
1
|
如下是combine2的输出
Key2
|
Value2
|
Hello
|
1
|
Hadoop
|
2
|
GoodBye
|
1
|
Reducer类实现将相同key的值合并起来。
如下是reduce的输出
Key2
|
Value2
|
Hello
|
2
|
World
|
2
|
Bye
|
1
|
Hadoop
|
2
|
GoodBye
|
1
|
即实现了WordCount的处理。
分享到:
相关推荐
The Annotated Turing: A Guided Tour through Alan Turing's Historic Paper on Computability and the Turing Machine Published by Wiley Publishing, Inc. 10475 Crosspoint Boulevard Indianapolis, IN ...
3. **编程语言的基础**:Petzold将图灵机的概念与现代编程语言相联系,解释了高级编程语言如何转化为机器指令,这有助于读者理解编译器和解释器的工作原理。 4. **C#、JavaScript、.NET和C++**:虽然书名没有直接...
在人脸识别领域,数据库的建立是第一步。这些图像通常包含各种人脸的不同角度、表情、光照条件、遮挡情况等,以模拟真实世界中的复杂场景。"Annotated Database"提供的详细标注使开发者能够训练机器学习模型来识别和...
综上,"mysql3-annotated:mysql原始注解"的项目可能是一个对MySQL 3版本的注释解析或文档整理,旨在帮助开发者更好地理解和利用这个开源数据库系统,同时提供对SQL语句的注解示例,以提高代码可读性和维护性。
annotated_nginx Annotated Nginx Source(中文) 简介 Nginx源码分析,注解代码,帮助学习Nginx。 1.10增加了动态模块、http2、reuseport。 1.11.x里的stream模块的变动较大,完善了阶段处理。 1.14增加了mirror...
IMM Annotated Database是一个专为人脸识别研究而设计的数据库,包含240幅精心标注的人脸图像。这个数据库在人脸识别领域具有重要的价值,因为它提供了一组标准化、有标记的图像,可供研究人员进行算法开发、测试和...
python-2.5-annotated 记录阅读代码时的评注. bugfix: 修复svnversion产生的版本信息中包含空格导致无法编译的bug. commit 《Python源码剖析》附书代码: code-reading/pythonympx.rar code-reading/pythonympx.tar....
副标题:他的生平、思想及论文解读原作名: The Annotated Turing作者: Charles Petzold图灵机是英国数学家阿兰·麦席森·图灵提出的一种抽象计算模型,本书深入剖析了图灵这篇描述图灵机和可计算性的原始论文《论可...
理解互斥量的工作原理对于避免死锁和竞态条件至关重要。 #### 2.9 调度 调度是μC++中管理任务执行顺序的核心机制,分为隐式调度和外部调度两种方式,每种方式都有其适用场景和优缺点。 ##### 2.9.1 隐式调度 ...
《Annotated Lucene 中文版 Lucene源码剖析》是一本深入探讨Apache Lucene的书籍,专注于源码解析,帮助读者理解这个强大的全文搜索引擎库的工作原理。Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被...
《Thinking in C++ Annotated Solution Guide》是一本关于C++编程语言的重要参考资料,它提供了对Bruce Eckel的畅销书《Thinking in C++》的详细解答。这本书深入浅出地介绍了C++的基础概念、语法和高级特性,是学习...
通过深入研究"vars.m"中的注释,开发者和研究人员可以更好地理解RCPR算法的工作原理,从而能够更有效地应用它到自己的数据分析项目中。这不仅有助于直接使用RCPR,也对于那些想要进一步改进或扩展算法的人提供了宝贵...
《C# Annotated Standard》是C#编程领域的一本权威参考书籍,由C#语言的设计者之一撰写。这本书深入解析了C#语言的标准,通过详尽的注解和解释,帮助开发者更深入地理解C#的语法、特性以及设计理念。 在C#语言中,...
The Annotated C++ Reference Manual 一共四个压缩包
《Thinking in Java Annotated Solution Guide》是一本针对Bruce Eckel的畅销书《Thinking in Java》的解答指南,主要针对第四版的内容。这本书是Java编程学习者的宝贵资源,它提供了书中练习题的详尽解答,帮助读者...
此压缩包"redis-3.0-annotated-unstable.zip"包含的是 Redis 3.0 版本的一个注释版或不稳定版本的源代码,对于学习和理解 Redis 的内部工作原理非常有帮助。 Redis 的核心特性包括: 1. **键值存储**:Redis 支持...
"Thinking in Java 4th Edition + Annotated Solution Guide (代码)英文文字版 带书签 有答案" 指的是该资源包含了《Thinking in Java》第四版的英文文本,同时附带有注解的解决方案指南,这将有助于读者在遇到...
首先,文件标题《Thinking in Java 4th Edition Annotated Solutions Guide》指出了这是一本关于《Thinking in Java》第四版的附有注解的解决方案指南。《Thinking in Java》是由Bruce Eckel编写的Java编程书籍,...