Hebut-Amadeus

刚看完MIT 6.824分布式系统这门课,打算再回顾一遍

 

什么是分布式系统:①多台计算机协同合作 ②为大型网站提供可靠存储 ③大量的关键架构部件是分布式的

为什么要搭建分布式系统:①通过并行来增加容量 ②通过复制来实现容错 ③使物理计算接近实体 ④通过独立性来实现安全

 

MapReduce

产生原因:耗费数小时的大量计算,以TB计的大量数据,我们要快速建立Google中大量网页的搜索索引和排序,使得普通程序员在不了解分布式系统细节的情况下,能够仅凭提供的map跟reduce函数来进行大量计算机的调度与计算

将文件分为若干份,存储在若干台计算机上

Map(k, v) 遍历整个文件,将统计到的键值对(k, v)放到自己的存储平台上。

Reduce(k, v) 遍历若干台计算机,将其中存储平台上的键值对统计求和。

单master结构,master给出所有map需要的工作,当map处理完以后,会在本地磁盘上进行数据切片供reduce使用

之后,master会通知所有的reduce来进行统计工作

应用举例:统计文件中每个字母的出现频率

input is thousands of text files
  Map(k, v)
    split v into words
    for each word w
      emit(w, "1")
  Reduce(k, v)
    emit(len(v))

 

Map函数可以并行计算,所以更多的计算机意味着更强的算力

Google利用自己的文件系统GFS进行MapReduce,将文件系统分为一个个大小为64MB的chuck,每个chuck在2-3个计算机中存在副本复制

map函数进行读并行,reduce函数进行写并行

2003年时,性能限制在网络上,大量的数据要通过switch,router

现在,性能限制在CPU/IO上

 

一些改进性能的小trick

所有处理过的数据跟input都放到本地磁盘上,所以每次读取输入是从磁盘读取,而不是通过网络

Reduce比所有的key要少的多,一个reduce会拥有很多key,从而减少网络传输

将任务分为更小的块,从而减少map的等待时间,尽量实现负载均衡

 

容错性

如果map或者reduce失败,master会通过网络通信知道他们崩溃了,然后找到下一个副本来代替它,并且通知与它有关的所有机器

没有恢复,只能从头开始在次运行之前的程序(改进:Spark)

由于这种恢复制度,map跟reduce函数在运行出结果前,状态是不允许可见的

 

分类:

技术点:

相关文章:

  • 2021-10-06
  • 2021-12-20
  • 2021-08-13
  • 2021-05-01
  • 2021-12-20
  • 2021-10-16
  • 2021-09-13
猜你喜欢
  • 2021-11-19
  • 2021-05-30
  • 2021-11-05
  • 2021-09-28
相关资源
相似解决方案