代码改变世界

DFS & MapReduce

2012-11-17 13:09  Justany_WhiteSnow  阅读(690)  评论(0编辑  收藏  举报

Google Example

  • 200亿+网页 * 20kb = 400+ TB
  • 1台计算机硬盘读取速度为30 ~ 35 mb/s
  • 要读取4个月

截止至2006年8月,谷歌已经有450000台机器了。

 

Challenges for Large-scale Computing

  • 怎么分配计算?
  • 如何设计简易的分布式编程模型?
  • 如何机器故障处理?

 

Idea and Solution

  Idea:

    接近数据的计算

    对数据进行多个备份

  MapReduce被用来解决这些问题

 

Storage Infrastructure

  Problem:

    如果节点宕机,如何保持存储数据

  Answer:

    分布式文件系统:GFS(Google File System)、HDFS(Hadoop Distributed File System)

  Typical usage pattern:

    巨大的文件(几百GB到TB)

    数据很少更新,或者说只是单纯将新数据追加到尾部

    常用于读取和附加的数据

 

Distributed File System

  • 块状服务群:

    文件备份成连续的块

    一般每块16 ~ 64 mb

    每块进行复制(2、3次)

    保持在不同机架上存在副本

  • 主节点(Master Node)
  • 服务器端的文件访问接口:

    向主节点请求查看服务块

    与服务块直接连接来访问数据

  • 可靠的分布式系统:

    数据以“块”分布在机器中

 

Programming Model: MapReduce

顺序读取大量的数据。

  Map:

    提取你敢兴趣的数据(Group by key, Sort an Shuffle)

  Reduce:

    总结、归纳、过滤或转换

 

The Map Step

Map任务将输入变成“键—值”对应的序列。 

 

The Reduce Step

Reduce将“键—值”进行合并优化。