• MapReduce阅读笔记+实现心得


    贡献

    parallelization,
    fault-tolerance,
    locality optimization,
    load balancing

    心得

    restricting the programming model makes it easy to parallelize and distribute computations and to make such computations fault-tolerant.

    瓶颈

    网络带宽

    Map

    {
    拆分数量: M 远大于worker机器数 一个worker处理多个任务增强了动态负载均衡且加快了宕机恢复速度:the many map tasks it has completed can be spread out across all the other worker machines

    Output: R个临时文件 原子性

    完成后:message master,包括R个临时文件的名字(若master已经收到过这个task的信息,则忽略此信息),master将这R个临时文件的名字记录到master data structure

    Combiner Function:map完成后可以使用自定义Combiner Function将结果合一下,生成中间文件

    输入文件备份:GFS将输入文件分成64MB的块,并存储3个备份,当一个map task 失败时,会启用一个靠近存储输入备份的worker(如在同一个交换机下)
    }

    Reduce

    {
    拆分数量: R 远大于worker机器数

    Output: 1个文件 原子性

    完成后:原子性重命名临时输出文件为最终输出文件(当多个备份任务也完成时,GFS保证一个任务只有一个输出文件,没有重复的)

    }

    partition: hash(key) mod R

    Master Data Structures

    {
    state: idle, in-progress, completed

    identity of the worker machine

    locations and sizes: of the R 个map任务的中间文件
    }

    Fault Tolerance

    Worker Failure

    Map:
    已完成的任务:中间文件已保存至GFS,无需重新运行
    未完成的任务:中间文件保存在本地,需重新运行

    所有运行Reduce任务的worker会收到map worker重新运行通知,还没有从失败worker A读数据的reduce worker会从另一个重新运行任务的worker B读数据

    Master Failure

    master周期性写checkpoint
    从上一个checkpoint重新运行

    Backup Tasks

    无论是主任务还是备份任务完成,任务都将被标记为完成

    Skipping Bad Records

    每个worker都安装了一个signal handler

    运行map或reduce之前,会将argument的序列号记录在一个全局变量中

    遇到错误时,会将此序列号发给master

    如果某个record有多个失败,它会被跳过

    其他

    Debug

    由于分布式不好debug,google开发了一个本地MapReduce用于调试,所有操作串行执行

    Status Information

    master有一个http服务器用于显示info,如哪些worker失败了,它们导致哪些map和reduce任务失败了

    分析bug有用

    Counters

    worker的count value附在ping的response中回给master

    使用GO实现MapReduce的心得

    1. worker id 不能复用,crashedWorker的answer要直接抛弃。存在crashedWorker复活情景:crashedWorker由于运行时间过长被master认为crash,但中途没有worker对这个task answer,然后crashedWorker正常answer
    2. hash出来的值不一定能覆盖到所有范围,如[0,nReduce),可能只有4个值能取到
    3. 函数参数赋值和普通赋值均是复制成一个新变量,修改新变量不会影响老变量,注意指针问题
  • 相关阅读:
    hexo部署失败如何解决
    github设置添加SSH
    鼠标相对于屏幕的位置、鼠标相对于窗口的位置和获取鼠标相对于文档的位置
    git push origin master 错误解决办法
    js设计模式:工厂模式、构造函数模式、原型模式、混合模式
    d3.js实现自定义多y轴折线图
    计算机网络之HTTP(上)基础知识点
    Node.js学习笔记(一)基础介绍
    计算机组成
    Ajax及跨域
  • 原文地址:https://www.cnblogs.com/GY8023/p/15219553.html
Copyright © 2020-2023  润新知