zoukankan      html  css  js  c++  java
  • Hadoop基本原理之一:MapReduce


    1、为什么需要Hadoop

        目前,一块硬盘容量约为1TB,读取速度约为100M/S,因此完成一块硬盘的读取需时约2.5小时(写入时间更长)。若把数据放在同一硬盘上,且全部数据均需要同一个程序进行处理,此程序的处理时间将主要浪费在I/O时间上。

        在过去几十年,硬盘的读取速度并未明显增长,而网络传输速度此飞速上升。

        因此,若把数据分散到多个硬盘上进行存储(如分成100份存储在100个硬盘上),则读取数据所需时间大大减少,并将各节点处理好的结果通过网络进行传输。

       但这将导致2个问题

       (1)数据被分散到多个硬盘中,某个盘发生故障导致部分数据出错的可能性大大增加,因此需要对数据进行复制备份======>> HDFS!!

       (2)数据分散在多个盘,一般会在本地进行初步处理,,如何将处理结果进行合并============>>MapReduce!!!


    2、基本节点

    在Hadoop中,主要有以下5类节点:

    (1) JobTracker 

    (2) TaskTracker 

    (3) NameNode 

    (4) DataNode 

    (5) SecondaryNameNode 


    3、零碎理论

    (1)Hadoop将MapReduce的输入分成固定大小的切片,称为input split。大多数情况下,切片的大小与HDFS块的大小相等(默认情况下是64M)。

    (2)


    4、本地数据优先

    Hadoop倾向于在存储数据的节点上进行map处理,这称为data locality optimization。


    (1)首先,hadoop倾向于将数据在本地节点进行数据,如图中的a.

    (2)若存储数据的节点有其它task正在进行处理,则在本机架内寻找另一个节点进行数据处理,如图中b。

    (3)若本机架内所有节点均有task正在进行处理,则在其它机架内寻找节点进行数据处理。


    5、MapReduce的数据流向

    (1)单reducer情况


    (2)多reducer情况



    6、Combiner 

    在map与reduce之间,可以增加combiner函数,对map产生的结果进行预处理。




  • 相关阅读:
    Centos7安装Docker
    [LeetCode] 651. 四键键盘 ☆☆☆(动态规划)
    一行代码就能解决的算法题
    博弈问题--石头游戏(动态规划)
    [LeetCode] 322. 零钱兑换 ☆☆☆(动态规划)
    java趣题
    [LeetCode] 516. 最长回文子序列 ☆☆☆(动态规划)
    [LeetCode] 337. 打家劫舍III ☆☆☆(动态规划)
    算法基础--贪心算法
    [LeetCode] 42. 接雨水 ☆☆☆☆☆(按列、动态规划、双指针)
  • 原文地址:https://www.cnblogs.com/eaglegeek/p/4557859.html
Copyright © 2011-2022 走看看