MapReduce.How有用吗?

时间:2015-04-11 01:17:17

标签: mapreduce

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

我试过阅读一些链接,但无法清楚地理解这个概念。

任何人都可以用简单的方式解释一下吗?任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

mapreduce有一个Mapper和一个Reducer。

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

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

并调用

map(arr,*2)

它将乘以数组的每个元素,结果将是:

[2,4,6,8,10]

在我看来,减少有点违反直觉,但并不像人们期望的那么复杂。 假设您已经获得了上面的映射数组,并且希望在其上使用reducer。 reducer获取数组,二元运算符和初始元素。 它的行动很简单。假设我们有上面的映射数组,二元运算符'+'和初始元素'0',则reducer按以下顺序反复应用运算符:

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

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

答案 1 :(得分:0)

我将以示例解释。

考虑您是否有过去100年的温度数据,并且您想知道年度最高温度。假设数据的总大小为100PT。你将如何迎合这个问题?我们无法在Oracle中处理数据,如oracle,My SQL或任何sql数据库。

在hadoop中,主要有两个术语:

  1. Hadoop分布式文件系统(HDFS)
  2. 地图,减少
  3. 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在mapper下面启动3:

    64 MB块数据 - >映射器1 - > (年,温度)(1901,45),(1902,34),(1903,44)

    64 MB块数据 - >映射器2 - > (年,温度)(1901,55),(1902,24),(1904,44)

    64 MB块数据 - >映射器3 - > (年,温度)(1901,65),(1902,24),(1903,46)

    所有mapper的输出传递给reducer。

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