• MapReduce简介


    Hadoop简介:

    Hadoop是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase

    Map/Reduce:

    MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框,就是mapreduce,缺一不可,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程。
    Mapreduce是一种编程模型,是一种编程方法,抽象理论。

    1.user program链接了map reduce库,实现了最基本的map函数和reduce函数。

    2.MapReduce库先把user program的输入文件划分为M份(划分到多少份是用户定义的),如上图所示,我们将用户输入文件划分为5份,分别是split0~split4.

    3.user program用fork得到一个自己的副本进程,记为master,然后再fork几个进程记为worker,这个master是负责调度作业的,为空闲的worker分配任务。(Map作业,即是处理一个输入数据的分片;Reduce作业处理一个分区的中间键值对),woker的数量也是由用户指定的,用户想要fork几个就fork几个。

    4.map得到的中间结果会被定期写入本地磁盘,且被分为R个区,R也是用户定义的,将来的每个区会对应一个reduce作业。这些中间结果的位置会被告知给master,master将这些信息告诉reduce worker。

    5.reduce worker从master那里得到了自己负责的中间结果的位置,reduce worker得到所有的中间键值对,现对他们进行排序,使得相同键的键值对聚集在一起。

    6.然后reduce worker将得到键值及其相关联的值集合一起给reduce函数,reduce函数会将这些输出到这个分区的输出文件(HDFS)中。

    7.所有的map和reduce作业完成了,master唤醒user program,map reduce函数调用返回user program的代码。


    用一个例子来说明map reduce的逻辑过程吧:(http://www.cnblogs.com/forfuture1978/archive/2010/11/14/1877086.html

    1、Map-Reduce的逻辑过程

    假设我们需要处理一批有关天气的数据,其格式如下:

    • 按照ASCII码存储,每行一条记录
    • 每一行字符从0开始计数,第15个到第18个字符为年
    • 第25个到第29个字符为温度,其中第25位是符号+/-

    0067011990999991950051507+0000+

    0043011990999991950051512+0022+

    0043011990999991950051518-0011+

    0043012650999991949032412+0111+

    0043012650999991949032418+0078+

    0067011990999991937051507+0001+

    0043011990999991937051512-0002+

    0043011990999991945051518+0001+

    0043012650999991945032412+0002+

    0043012650999991945032418+0078+

    现在需要统计出每年的最高温度。

    Map-Reduce主要包括两个步骤:Map和Reduce

    每一步都有key-value对作为输入和输出:

    • map阶段的key-value对的格式是由输入的格式所决定的,如果是默认的TextInputFormat,则每行作为一个记录进程处理,其中key为此行的开头相对于文件的起始位置,value就是此行的字符文本
    • map阶段的输出的key-value对的格式必须同reduce阶段的输入key-value对的格式相对应

    对于上面的例子,在map过程,输入的key-value对如下:

    (0, 0067011990999991950051507+0000+)

    (33, 0043011990999991950051512+0022+)

    (66, 0043011990999991950051518-0011+)

    (99, 0043012650999991949032412+0111+)

    (132, 0043012650999991949032418+0078+)

    (165, 0067011990999991937051507+0001+)

    (198, 0043011990999991937051512-0002+)

    (231, 0043011990999991945051518+0001+)

    (264, 0043012650999991945032412+0002+)

    (297, 0043012650999991945032418+0078+)

    在map过程中,通过对每一行字符串的解析,得到年-温度的key-value对作为输出:

    (1950, 0)

    (1950, 22)

    (1950, -11)

    (1949, 111)

    (1949, 78)

    (1937, 1)

    (1937, -2)

    (1945, 1)

    (1945, 2)

    (1945, 78)

    在reduce过程,将map过程中的输出,按照相同的key将value放到同一个列表中作为reduce的输入

    (1950, [0, 22, –11])

    (1949, [111, 78])

    (1937, [1, -2])

    (1945, [1, 2, 78])

    在reduce过程中,在列表中选择出最大的温度,将年-最大温度的key-value作为输出:

    (1950, 22)

    (1949, 111)

    (1937, 1)

    (1945, 78)

    其逻辑过程可用如下图表示:

    image

  • 相关阅读:
    c# 改变FileUpload 上传文件大小
    使用ActiveX读取客户端mac地址
    javascript小技巧
    【2012百度之星/资格赛】H:用户请求中的品牌 [后缀数组]
    POJ1012 约瑟夫环问题[双向循环链表+打表技巧]
    北大ACM题分类
    ACM大量习题题库
    POJ1423 计算出n的阶乘的位数大数问题[Stirling公式]
    ACM训练计划(下)
    POJ2080 角度问题[cmath函数]
  • 原文地址:https://www.cnblogs.com/LUO77/p/5789346.html
Copyright © 2020-2023  润新知