MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",和它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组.
请看下面示例:
输入内容有两行:
Hello World Bye World
Hello Hadoop Goodbye Hadoop
map的输入为每个数据行 即:
Hello World Bye World
Hello Hadoop Goodbye Hadoop
整个map的对上面二行的存储格式:
< Hello,1>,< World, 1> ,< Bye, 1> ,< World, 1>,< Hello, 1> , < Hadoop, 1> , < Goodbye, 1>,<Hadoop,1>
对于Reduce的输入为下面格式的数据:
<Bye,1>,<Goodbye,1> ,<Hadoop,1> ,<Hadoop,1> ,<Hello,1> ,<Hello,1> ,<World,1>,<word,1>
Reduce的存储方式则如下:
< Bye, 1> < Goodbye, 1> < Hadoop, 2>< Hello, 2> < World, 2>
和map存储格式相比较,reduce的方式是不是好很多,节约了大量空间。
Hadoop Map/Reduce的过程