Storage.(存储)Communication.(通信)Computation.(计算)·多台电脑合作完成
·大规模数据集运算,如:MapReduce,点对点共享
·许多设施是分布式的
·通过多线程并行操作,提高性能
·通过生成副本,避免文件丢失
·可以将计算放在离外部实体更近的地方
·通过隔离增加系统的安全
implementation(实现):RPC、线程、并发控制performance(性能):我们想要提供一个性能可以扩展的系统,通常需要更好的设计而不仅仅是更多的计算机,数量的增多也会带来负载不均衡等问题。fault tolerance(容错):对应用程序隐藏这些故障,我们希望系统拥有可用性、可恢复性,如果一台服务器宕机,可以继续使用其他服务器。consistency(一致):想要达成正确工作的系统十分困难,一致性与性能存在矛盾,服务器节点能难保证相同,KV服务。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”,是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
函数式编程思想构建成抽象模型 — Map 和 Reduce,隐藏系统底层细节,编程方便,不够灵活。即 MapReduce的思想是,应用程序设计人员和分布式运算的使用者,只需要写简单的Map函数和Reduce函数,而不需要知道任何有关分布式的事情,MapReduce框架会处理剩下的事情。
对于一个完整的MapReduce Job,它由一些Map Task和一些Reduce Task组成。所以这是一个单词计数器的例子,它解释了MapReduce的基本工作方式。
Map函数使用一个key和一个value作为参数。key是输入文件的名字,通常会被忽略,因为我们不太关心文件名是什么,value是输入文件的内容。
Reduce函数的入参是某个特定key的所有实例(Map输出中的key-value对中,出现了一次特定的key就可以算作一个实例)。所以Reduce函数也是使用一个key和一个value作为参数,其中value是一个数组,里面每一个元素是Map函数输出的key的一个实例的value。
Example: word count
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))