0%

大数据运算系统

1. MapReduce/Hadoop

1.1. 编程模型

1.1.1. 整体思路

  • 解决思路
    • 程序员写串行程序
    • 由系统完成并行分布式的执行
  • 程序员保证串行程序的正确性
    • 编程序时不需要思考并行的问题
    • 调试时只需要保证串行执行正确
  • 系统负责并行分布执行的正确性和效率
    • Multi-threading, Socket programming, Data distribution, Job distribution, coordination, load balancing, Fault tolerance
  • 缺点:
  • 牺牲了程序的功能!
    • 直接进行并行分布式编程,可以完成各种各样丰富的功能
    • 而一个编程模型实际上是限定了程序的功能类

      1.1.2. 数据模型

  • <key, value>
    • 数据由一条一条的记录组成
    • 记录之间是无序的
    • 每一条记录有一个key,和一个value
    • key: 可以不唯一
    • key与value的具体类型和内部结构由程序员决定,系统基本上把它们看作黑

1.1.3. Map-shuffle-Reduce

Map(ik,iv) -> {<mk,mv>}
Reduce(mk,{mv}) -> {<ok,ov>}

  1. Map 函数
    map_function

  2. shuffle
    为了做Reduce,系统内部做了一个shuffle的操作。
    shuffle

  3. Reduce
    reduce

  4. Map-shuffle-Reduce
    map-shuffle-reduce

1.1.4. Word count举例

word_count

1.1.5. 与SQL Select语句的关系

mapreducevssql

1.2. 系统实现

1.2.1. 系统架构

  1. 系统架构
    mapreduce-archi
    archi2

  2. MapReduce/Hadoop 系统架构
    map-hadoop

1.2.2. 工作过程

  1. 提交作业:
    用户向JobTracker提交JobConf。JobConf包括Map函数、Reduce函数(Jar)、配置信息(例如,几个Mappers,几个Reducers)、输入路径、输出路径等

  2. Map Task 读数据
    JobTracker给mappers分配任务,mapper从HDFS中读取数据块并处理。
    map-task-read

  • Split:一个HDFS数据块

  • Split 的个数可能多于Mappers个数

    • 每个split对应一个Map Task
    • 每个Mapper可能需要处理多个Task
  • 优化:就近处理

    • JobTracker尽量Mapper处理本机data node存储的split,从而减少网络数据传输的开销
  • InputFormat

    • Hadoop提供TextInputFormat,KeyValueInputFormat,SequenceFileInputFormat
    • 如何从提供的输入路径获得数据
    • 如何把输入数据分成split
    • 如何将数据分解成<ik,iv>
  • 程序员可以编写自己的InputFormat

  1. Map Task 执行
  • 对于一个split,Mapper

    • 对每个<ik, iv>调用一次Map函数生成<mk,mv>
    • 对每个mk调用Partitioner计算其对应的Reduce task id
    • 属于同一个Reduce task的<mk,mv>存储于同一个文件,放在本地硬盘上
    • 每个文件按照mk自小到大排序
  • Partitioner:

    • Hadoop默认使用HashPartitionerReduce taskid=hash(mk) % ReduceTaskNumber
    • 程序员可以编写自己的Partitioner
  1. shuffle
  • Reducer从每个Map task传输中间结果文件
    • 每个文件本身已经排好序了
  • 对多个结果文件进行归并,从而实现group by
  1. Reduce
    MR-reduce
  • 对于每个<mk,{mv}>调用一次Reduce函数
  • 产生的<ok, ov>写入输出文件
  • OutputFormat
  • 每个Reduce task 产生一个单独的文件

1.2.3. 容错

  • HeartBeat(心跳)消息定期发送,向JobTracker汇报进度

  • JobTracker可以及时发现不响应的机器或速度非常慢的机器

    • 这些异常机器被称作Stragglers
  • 一旦发现Straggler

    • JobTracker就将它需要做的工作分配给另一个worker
  • Straggler是Mapper,将所对应的splits分配给其它的Mapper

    • 输入数据是分布式文件,所以不需要特殊处理
    • 通知所有的Reducer这些splits的新对应Mapper
    • Shuffle时从新对应的Mapper传输数据
  • Stragger是Reducer,在另一个TaskTracker执行这个Reducer

    • 这个Reducer需要重新从Mappers传输数据
    • 注意:因为Mapper的输出是在本地文件中的,所以可以多次传

      1.3. 典型算法

  • Grep

  • Sorting

  • Join

2. Microsoft Dryad

Dryad

  • Dryad是对MapReduce模型的一种扩展

    • 组成单元不仅是Map和Reduce,可以是多种节点
    • 节点之间形成一个有向无环图DAG(Directed Acyclic Graph) ,以表达所需要的计算
    • 节点之间的数据传输模式更加多样
      • 可以是类似Map/Reduce中的shuffle
      • 也可以是直接1:1、1:多、多:1传输
    • 比MapReduce更加灵活,但也更复杂–需要程序员规定计算的DAG
  • Microsoft内部云计算系统Cosmos基于Dryad

3. 同步图计算系统

3.1. 图算法

3.2. 同步图计算

3.2.1. 图计算模型

graph-model

3.2.1.1. 特点

  1. BSP模型
    BSP
  2. 基于顶点的编程模型
    program

3.2.1.2. 如何结束

compute-end

3.3. 图计算编程

3.4. 系统实现