MapReduce总结

  • mapreduce是什么

mapreduce是一个计算框架,所以有输入和输出。输入输出都是key/value形式的。map的key和value一对一,reduce的key是一对多的,所以value是一个迭代器。
是一个软件框架,可以并行处理,可靠且容错性高。能处理海量数据。
思想“分而治之
map:分,复杂的任务分解为简单的任务。
reduce:汇总。对map结果汇总,同一个key对应的value汇总到一起。”

  • 函数实现流程

    分别实现map函数和reduce函数,以及main‘函数。
    map函数中,定义输入key,value,以及context记录map的计算状态
    ![][1]’
    reduce函数中,定义输入key和value,以及context
    ![enter description here][2]
    main函数作用:
    首先,初始化配置信息,内容写明mapreduce系统的配置信息。
    ![
    ][3]
    接下来构建一个作业job,写明job的名称,job装载的map,reduce类,以及输出的key、value类型的类。
    ![
    ][4]
    ![enter description here][5]
    最后构建输入的数据文件,和输出的数据文件
    ![enter description here][6]
    最后加一个,job开始运行
    		JobClient.runJob(conf);
    
  • mapreduce框架,原理

![enter description here][7]

  • mapreduce的实体有四个:
    1)客户端,程序员编写代码,配置作业,提交作业。
    2)JobTracker:初始化作业,分配作业,与TaskTracker通信
    3)TaskTracker:保持与job的通信,在分配的数据片段上执行map和reduce任务
    4)HDFS:保存作业的数据,配置信息,以及最后输出数据
  • mapreduce的运行机制
    1)输入分片:将输入文件计算分片,每个分片对应一个map任务
    2)map阶段:map就是映射的意思。将一组键值对映射成新的键值对。
    3)reduce函数:归总函数,同样的key对应的value被归总到一起
  • mapreduce和hadoop的关系,和hive关系
  • 4)shuffle
  • ![enter description here][8]
  • 处理逻辑大致如下
    ![enter description here][9]
    1)首先将HDFS中数据用split方式分为数据片,这个个数可以自己定义。
    2) 分片的数据交给mapper函数。
    3) map函数解析输入的数据变成一个个key,value
    4)reduce先做shuffle读取对应的数据,读完后sort排序。跑徐后交给reducer做统计。得到一个key累计出现的次数为value
    5)reducer的吹结果,写到HDFS的文件路径下
  • mapreduce不能解决的问题
    1)实时计算:需要实时结果的不能用mr
    2) 流式计算:当输入数据是动态的,不能用mr。mr能解决静态数据
  1. 有向图的计算。后一个程序输入是前一个程序输出的,不能依赖mr。
  • 分布式系统理解

    1)Hadoop是一个开源系统。包括计算模型map/reduce,分布式文件系统HDFS。hadoop要分布需要两部分:hdfs(分布式文件系统),以及mapreduce(分布式计算框架)))
    2)Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
    3)分布式系统是支持分布式处理的软件系统。多个组件组成,组件之间用消息传递通信并协调调度。能解决单机性能上的瓶颈,以及稳定性,其中一台机子坏了不会中断应用。
    4)spark介绍以及和hadoop的区别
    hadoop是一个分布式基础设施,包含分布式数据处理和,数据存储。spark,则是专门用来对大数据做处理的,需要依托在数据存储平台才能使用。
    spark处理速度比mapreduce快很多。mr处理的是静态数据。spark可以实时的时间完成数据分析。job的中间输出结果可以保存在内存中,从而不需要读写HDFS,更好的适用于数据挖掘与机器学习这些需要迭代的算法。并且能提供交互式查询。
    [1]: ./images/1490946162747.jpg "1490946162747"
    [2]: ./images/1490946191121.jpg "1490946191121"
    [3]: ./images/1490946362955.jpg "1490946362955"
    [4]: ./images/1490946433399.jpg "1490946433399"
    [5]: ./images/1490946442966.jpg "1490946442966"
    [6]: ./images/1490946476229.jpg "1490946476229"
    [7]: ./images/1490947449715.jpg "1490947449715"
    [8]: ./images/1490948224202.jpg "1490948224202"
    [9]: ./images/1490953717007.jpg "1490953717007"
posted @ 2017-04-06 15:46  luoyinqq  阅读(385)  评论(0编辑  收藏  举报