MIT 6.824 Distributed System Lecture 1阅读笔记
时间:2023-03-21
本文章向大家介绍MIT 6.824 Distributed System Lecture 1阅读笔记,主要内容包括导入/Intro、例子、统计一堆文档内每个单词的出现次数、分布式grep(linux的正则表达式命令)、实现/Impl、场景、Google's MapReduce Impl、Data Structures、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
导入/Intro
MapReduce是一种从函数式编程中取经、用于分布式系统中数据处理的设计范式。简单来说,MapReduce将对于分布式系统中典型的一种(key,value)式结构(例如SQL)的数据处理抽香味Map和Reduce两个过程:
- Map:输入一对(key,value),映射到一个中间键值对的集合,MapReduce本身会将这个集合里key同为某个\(I\)的中间值聚在一起(总之类似于一个\(\text{Map<K,Set<V>>}\))需要注意的是这里似乎输入输出键值对类型好像要是一样的?不过这不重要,毕竟只是个抽象。
- Reduce:对某个特定的key值\(I\)和对应的value的集合进行合并,输出一个小一点的集合。一般来说Reduce的返回值只有零个或一个元素(例如,sum,max等)
例子
统计一堆文档内每个单词的出现次数
map(key=document name, value=document content):
for word in value:
EmitIntermediate(word, 1) //count the word into the intermediate set
reduce(key=word,values= list of count, i.e. lots of 1):
Emit(sum(values))
分布式grep(linux的正则表达式命令)
map(key=string, value=string content):
for line in string:
if match(line):
Emit(..)
reduce=(_,value=list of mathced command) -> value
实现/Impl
场景
本质上看MapReduce只是一个Interface,资瓷:
- \(\text{Map(K key, V value)} \rightarrow\text{ Map<K, Set<V> >}\)
-
\(\text{Reduce(K, Set<V>)}\rightarrow\text{Set<V>}\)
关键在于我们在将模型套用到现实场景落地的用户场景。以当时(Google 2004)的节点情况为例: - dual core x86, 2-4G memory
- 100Mbps~1Gbps互联
- ~数百个运算节点,因此经常会有一些挂掉
- 远程HDD大容量廉价存储
- 用户将任务提交到一个调度系统上,由调度系统进行分配执行
可以看出: - 需要一定容错率
- 传输速率不低
- 存储空间大
- 考虑到04年的水平,各种编程任务实际上占用会很低(?)所以其实内存不小
Google's MapReduce Impl
考虑我们现在有一个巨大的文件作为程序输入:
- 将输入文件分块(文中16M-64M一块),并将程序拷贝到各台电脑上
- 其中有一个Master程序,剩余的是Worker程序,Master程序给Worker分配对应的那一块做Map还是Reduce
- 被分配到Map的Worker Map完后将中间集合放在内存上做缓冲
- 中间集合被写入到远程大容量存储上,写入的位置被分成若干个区(分布式存储),对应的位置被传回master
- 某个被分配到Reduce的Worker使用RPC下载中间集合并按照key做排序(以聚堆),假如中间集合太大(超出内存)将使用external sort
- For each value sets with respect to each keys in intermediate set, 进行Reduce()
- 所有Map和Reduce的活干完之后返回给用户的程序
实际上可以看出,这个MapReduce的Impl在Reduce方面非常直接暴力,也就是说大部分运算在构建Map上,这就很Functional Programming.
Data Structures
没用到什么特别的东西,主要总结一下都存了啥,主要重要的是Master节点,显然需要存:
- 每个map-task和reduce-task的状态(等待、执行中、完成)
- 各Worker的地址
以及文中提到的 - Intermediate Set的存储位置
原文地址:https://www.cnblogs.com/wdmath/p/17238565.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法