大数据(四) - MapReduce

jopen 8年前

MapReduce适合PB级以上海量数据的离线处理</span>

MapReduce不擅长什么
        实时计算
                像MySQL一样,在毫秒级或者秒级内返回结果
        流式计算
                MapReduce的输入数据集是静态的,不能动态变化
                MapReduce自身的设计特点决定了数据源必须是静态的
        DAG计算
                多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出

MapReduce编程模型</span>
        MapReduce将作业job的整个运行过程分为两个阶段:Map阶段和Reduce阶段
        Map阶段由一定数量的 Map Task组成
                输入数据格式解析: InputFormat
                输入数据处理: Mapper
                数据分组: Partitioner
        Reduce阶段由一定数量的 Reduce Task组成
                数据远程拷贝
                数据按照key排序
                数据处理: Reducer
                数据输出格式: OutputFormat

InputFormat
    文件分片(InputSplit)方法
        处理跨行问题
    将分片数据解析成key/value对
        默认实现是TextInputFormat
    TextInputFormat
        Key是行在文件中的偏移量,value是行内容
        若行被截断,则读取下一个block的前几个字符
Split与Block
    Block
        HDFS中最小的数据存储单位
        默认是64MB
    Spit
        MapReduce中最小的计算单元
        默认与Block一一对应
    Block与Split
        Split与Block是对应关系是任意的,可由用户控制
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处理

Map和Reduce两阶段
    Map阶段
        InputFormat(默认TextInputFormat)
        Mapper
        Combiner(local reducer)
        Partitioner
    Reduce阶段
        Reducer
        OutputFormat(默认TextOutputFormat)


</div> MapReduce编程模型—内部逻辑</span>


MapReduce编程模型—外部物理结构</span>



MapReduce 2.0架构</span>


Client
        与MapReduce 1.0的Client类似,用户通过Client与YARN交互,提交MapReduce作业,查询作业运行状态,管理作业等。
MRAppMaster
        功能类似于 1.0中的JobTracker,但不负责资源管理;
        功能包括:任务划分、资源申请并将之二次分配个Map Task和Reduce Task、任务状态监控和容错。

MapReduce 2.0容错性</span>
    MRAppMaster容错性
            一旦运行失败,由YARN的ResourceManager负责重新启动,最多重启次数可由用户设置,默认是2次。一旦超过最高重启次数,则作业运行失败。
    Map Task/Reduce Task
            Task周期性向MRAppMaster汇报心跳;
            一旦Task挂掉,则MRAppMaster将为之重新申请资源,并运行之。最多重新运行次数可由用户设置,默认4次。

数据本地性</span>
    什么是数据本地性(data locality)
            如果任务运行在它将处理的数据所在的节点,则称该任务具有“数据本地性”
            本地性可避免跨节点或机架数据传输,提高运行效率
    数据本地性分类
            同节点(node-local)
            同机架(rack-local)
            其他(off-switch)

推测执行机制</span>
    作业完成时间取决于最慢的任务完成时间
            一个作业由若干个Map任务和Reduce任务构成
            因硬件老化、软件Bug等,某些任务可能运行非常慢
    推测执行机制
            发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度
            为拖后腿任务启动一个备份任务,同时运行
            谁先运行完,则采用谁的结果
    不能启用推测执行机制
            任务间存在严重的负载倾斜
            特殊任务,比如任务向数据库中写数据

常见MapReduce应用场景
        简单的数据统计,比如网站pv、uv统计
         搜索引擎建索引 (mapreduce产生的原因)
        海量数据查找
        复杂数据分析算法实现
            聚类算法
            分类算法
            推荐算法
            图算法

</div>

来自: http://blog.csdn.net//matthewei6/article/details/50526002