本文介绍大数据分析的鼻祖型论文“谷歌三驾马车”。这包括处理分布式数据的mapreduce、存储大量数据的gfs以及列式存储bigtable,当前流行的大数据技术都是在谷歌发表了这三大论文以后,不断的发展起来的,典型的就是Apache开源的hadoop和hbase,其中hadoop的mapreduce和hdfs的思想来源于谷歌mapreduce和gfs论文,而hbase来源于谷歌的bigtable论文。
mapreduce
介绍:MapReduce是一个处理大数据集的编程模型。它通过map函数把基于行的输入转化成不同的键值对,再通过reduce函数把这些键值对针对相同的键进行聚合,并在聚合的过程中进行相应的计算。
其中的重点是:
- 如何分割基于行的源文件。
- 在map阶段如何把行数据映射成键值对。
- 对大数据集如何进行partition。
- 在reduce阶段如何进行响应的逻辑计算并输出结果。
其中,一个最典型的用例是给出一篇文章,计算每个单词出现的个数,起逻辑流程为:
1、把文章按照行来切分。
2、在map阶段,对每一行的每个单词构建一个键值对,键是单词本身,值是固定值"1"。
3、对map的结果进行分区,使用默认策略,通过哈希进行分区。
4、在reduce阶段,统计聚合在同一个key的值的数量,得出每个单词出现的次数。
gfs-sosp2003
介绍:GFS是一个分布式文件系统,用来存储大量的较大文件,它可以在廉价的硬件上实现存储文件,并做到容错性,并且针对多个客户同时访问提供比较有竞争力的性能。
其中的重点是:
- 把一个较大的文件切分成不同的单元块。
- 把每一个单元块存储在ChunkServer上,并且每一块都会复制在多个ChunkServer服务器上。
- 每一个文件包含多少块和哪些块这些元数据存储在GFS Master服务器上。
- 这是一个低成本的分布式存储系统,用来数据量非常大的存储场景,通常为mapreduce的大数据处理模型提供输入和输出的存储系统。
bigtable-osdi06
介绍:Bigtable是一个可以管理结构化数据的分布式存储系统,它本身支持水平的横向扩展,通过使用成千上万的连接服务器,来支持PB量级的数据处理。
其中的重点是:
- Chubby服务器存储SSTable根的数据信息。
- Tablet server的水平扩展以及分裂。
- SSTable的存储结构。
- 列式存储结构,RowKey以及列簇的设计。
- LSM Tree的数据结构以及特点。
- 在谷歌,网页索引,谷歌帝企鹅,谷歌财经等的数据都存储在Bigtable集群里。
MapReduce_NextGen_Architecture
介绍:在第一代mapdure的实现中,资源分配和任务监控都耦合在Master节点上,在Worker节点数增加到一定的数量级,Master节点出现了性能瓶颈,下一代MapReduce框架Yarn把资源管理器和任务管理器分离,解决了这个性能瓶颈。