MapReduce.How 有用吗?

MapReduce.How does it work?

什么是 MapReduce,它是如何工作的?

我尝试阅读了一些链接,但无法清楚地理解其中的概念。

谁能简单解释一下?任何帮助,将不胜感激。

一个 mapreduce 有一个 Mapper 和一个 Reducer。

Map是一种常用的函数式编程工具,对多条数据进行一次操作。例如,如果我们有数组

arr = [1,2,3,4,5]

并调用

map(arr,*2)

它将数组的每个元素相乘,结果为:

[2,4,6,8,10]

在我看来,Reduce 有点违反直觉,但它并不像人们想象的那么复杂。 假设您有上面的映射数组,并且想在其上使用 reducer。 reducer 获取一个数组、一个二元运算符和一个初始元素。 它所做的动作很简单。假设我们有上面的映射数组、二元运算符“+”和初始元素“0”,reducer 按以下顺序一次又一次地应用运算符:

0 + 2 = 2
2 + 4 = 6
6 + 6 = 12
12 + 8 = 20
20 + 10 = 30.

它实际上获取最后一个结果和下一个数组元素,并对它们应用二元运算符。在所表示的情况下,我们得到了数组的总和。

我将举例说明。

假设您有过去 100 年的温度数据,并且您想知道年度最高温度。假设数据的总大小为 100PT。你将如何解决这个问题?我们无法像 oracle、My SQL 或任何 sql 数据库那样处理 SQL 中的数据。

在hadoop中,主要有两个term:

  1. Hadoop 分布式文件系统(HDFS)
  2. Map-Reduce

HDFS 用于在分布式环境中存储数据。所以HDFS会将你的100PT数据存储在集群中。它可能是 2 台机器集群或 100 台机器。默认情况下,您的数据将被分成 64MB 的块,并存储在集群中的不同机器上。

现在,我们开始处理数据。为了在 hadoop 集群中处理数据,我们有 Map-Reduce 框架来编写处理逻辑。我们需要编写 map-reduce 代码来找到最高温度。

Map-Reduce代码结构(仅供理解,语法不对):

      class XYZ{
              static class map{
            void map(){
               //processing logic for mapper
            }
        }
         static class  Reduce{ 
           void reduce(){
             //processing logic for reducer
           }
        }
 }

无论您在 map() 方法中编写什么,都会 运行 所有数据节点并行处理 64MB 数据块并生成输出。

现在,所有映射器实例的输出将随机排序。然后它作为输入传递给 reduce() 方法。

Reducer 将生成最终输出。

在我们的示例中假设,hadoop 在映射器下面启动 3:

64 MB 块数据 ->mapper 1 -> (year,temperature) (1901,45),(1902,34),(1903,44)

64 MB 块数据 ->mapper 2 -> (year,temperature) (1901,55),(1902,24),(1904,44)

64 MB 块数据 ->mapper 3 -> (year,temperature) (1901,65),(1902,24),(1903,46)

所有映射器的输出传递给减速器。

所有映射器的输出 -> 减速器 -> (1901,65),(1902,34),(1903,46),(1904,44)