MapReduce & GFS初探|青训营笔记

123 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第5天

MapReduce

MapReduce就是利用了分而治之的思想对任务进行处理,将大任务分开到不同的机器进行计算处理(map),然后将结果再整合到一起(reduce), 这就是mapreduce

不太恰当的🌰

老师需要做一些任务,将这些任务分成几份给到学生去做,等学生工作完之后老师再讲工作成果整合到一起🤪

下面图片的来源

Screen Shot 2022-08-02 at 8.01.45 PM.png

Map过程

  • 根据 数据量的大小将任务分成不同的小任务,每个子任务会对原文件进行处理,生成KV键值对
  • 对每个KV键值对key进行分类,加上标签,决定去往哪个reduce

Shuffle

  • map端的shuffle 会将数据进行排序,当然是对每个子任务内部的数据分别进行排序
  • 每个分区的文件按照Key的值进行排序
  • reduce 端的shuffle拉取属于自己的键值对进行合并排序

WordCount的🌰

Screen Shot 2022-08-02 at 8.13.28 PM.png

从一个文件中统计单词出现的数目

  • Map:将文件计数的任务分给不同的机器去做, 内部分别进行排序,形成<k,v>对,根据key进行排序
  • Shuffle: 将对应的结果拉到Reduce中去,这里只有一个Reduce
  • Reduce:将拿到的结果进行统计分析,得到最终的单词的计数

GFS

下面的图片以及思路参考了这里

Screen Shot 2022-08-02 at 8.47.55 PM.png

存储设计

文件按照chunk = 64MB的大小为单位,这个chunk是偏大的

  • 使用GFS系统需要存储的文件偏大,较大的chunk能够减小内部的寻址和交互的次数
  • Client可能在一个chunk上执行多次的操作,复用TCP
  • 减少chunk数量,节省元数据的存储开销

master设计

GFS设计了单个master节点,用于存储文件系统的三类 元数据

  • 所有文件和chunk的namespace: chunk的文件名和编号
  • 文件到chunk的映射
  • 每个chunk的位置: chunk编号到chunkserver的位置

文件读取的过程:

文件名 -> 获取文件对应的chunk名->chunk的位置->对应到chunkserver中读取chunk