MapReduce架构

MapReduce特色
 易于编程(熟悉以后确实很简单,大多数是map和reduce两个部分。hive和pig让mapreduce更加简单)
 良好的扩展性(简单的添加机器就能够实现)
 高容错性(job中任务部分失败,能够从新执行)
 适合PB级以上海量数据的离线处理
MapReduce不擅长
 实时计算
 像MySQL同样,在毫秒级或者秒级内返回结果(能够参考Spark或HBase,HBase随机读写性能好,统计不太好)
 流式计算
 MapReduce的输入数据集是静态的,不能动态变化
 MapReduce自身的设计特色决定了数据源必须是静态的(能够考虑Storm)
 DAG计算
 多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出(Tez)
   
MapReduce将做业的整个运行过程分为两个阶段
     Map阶段和Reduce阶段
 Map阶段由必定数量的Map Task组成
 输入数据格式解析:InputFormat
 输入数据处理:Mapper
 数据分组:Partitioner
 Reduce阶段由必定数量的Reduce Task组成
 数据远程拷贝
 数据按照key排序
 数据处理:Reducer
 数据输出格式:OutputFormat编程

 默认TextInputFormat对文件切分,并处理每个Split,提供RecordReader生成key/value
    TextInputFormat:Key是行在文件中的偏移量,value是行内容若行被截断,则读取下一个block的前几个字符
    设计到的概念           
           Block
        HDFS中最小的数据存储单位默认是64MB
        Spit
        MapReduce中最小的计算单元默认与Block一一对应
        Block与Split
        Split与Block是对应关系是任意的,可由用户控制网络

Map阶段
 InputFormat(默认TextInputFormat)
 Mapper
 Partitioner
 Sort(可选)
 Combiner(local reducer)(可选)app

Reduce阶段
 Sort
 Reducer
 OutputFormat(默认TextOutputFormat)性能

Combiner
    Combiner可作看local reducer合并相同的key对应的value(wordcount例子)一般与Reducer逻辑同样好处
减小Map Task输出数据量(磁盘IO)
减小Reduce-Map网络传输数据量(网络IO)
结果可叠加
Sum(YES!),Average(NO!)
Partitioner
 Partitioner决定了Map Task输出的每条数据交给哪一个Reduce Task处理默认实现:hash(key) mod R R是Reduce Task数目
 容许用户自定义,不少状况需自定义Partitioner
 好比“hash(hostname(URL)) mod R”确保相同域名的网页交给同一个Reduce Task处理设计

 

相关文章
相关标签/搜索