0bb927c46cc54cc8aaefe727ca30f0bd
分布式计算框架及演化

简介

分布式计算系统是大数据解决方案的重要一环,通常来说,大数据可以用3V的概念来解释:

  • Volumes: 大数据首先需要满足量的要求,数据量大到传统的方式已经不能够给出解决方案
  • Velocity: 数据的产生速度非常快
  • Variety: 数据具有多样性,包含音频、视频、文本等不同格式的数据

在大数据时代,典型的解决方案如下:

intro

intro

  • 数据需要以爬取、收集等方式,在预处理完成后存储到分布式存储系统中,比较稳定且著名的系统如HDFS
  • 存储后的数据需要根据需求、文本格式使用不同的分布式计算系统进行处理。如流计算完成实时数据处理、参数服务器完成机器学习训练等
  • 计算的结果将会通过一定的格式传送到GUI展示给用户

大爆炸, Google的"三驾马车": GFS, MapReduce, BigTable

Google在大规模数据处理上俗称"三架马车"三篇论文的发布,犹如投入死水滩中的三颗石块,一下子就让分布式领域焕发了生机:

其中第一块GFS沉入湖底,以其精妙的设计保证了大规模数据存储的容错性,为大规模计算奠定了夯实的基础;第二块MapReduce犹如与水滩发生剧烈反应的化学物质,学术界、工程界对它的口诛笔伐就一直都没有停止过,不过平心而论,MapReduce的编程模型的确适用于网页的倒排索引这类任务的构建,这也是Google为什么以著名的WordCount进行举例的原因。作为与GFS相同影响力的第三块石块BigTable,名义上是个"Table",但实际上是能够分布式存储结构数据的有序Map。

总结一下"三架马车"的主要功能:

  1. GFS: 分布式文件存储系统,高效、可靠,是很多其它种类框架的实现基础
  2. MapReduce: 既是编程模型,也是线性任务大规模数据处理架构
  3. BigTable: 如果说GFS是文件级别的存储系统,那么BigTable是表级别的存储系统。本质上它是建立在GFS基础上的结构化数据存储系统

MapReduce

分布式计算系统发展到现在,大多数人熟悉的MapReduce就是Apache Hadoop开源的MapReduce版本了,关于Hadoop MapReduce的大致执行流程,可以参考我发布在GitHub的这篇源码分析:Hadoop MapReduce Processing Source Code Analysis

mapreduce

mapreduce

大致的MapReduce计算流程:

  1. 加载数据,并使用Mapper进行读取并处理
  2. 产生中间值,进行shuffle后随机将数据传输到Reducer进行处理
  3. Reducer处理完成后,产生的整块数据将被存储到分布式数据库的进行保存

MapReduce的设计之初本意在于设计一个包容万象的编程模型,然而随着这个框架被应用到各种领域,人们慢慢发现它的缺点与局限性,并逐渐创造出各式各样的框架进行替代。接下来这篇文章将以MapReduce的设计缺陷为主线,逐个引出其它著名的分布式计算框架。

中间值内存存储 (HaLoop, Spark RDD)

中间值存储缺陷是指,当MapReduce用于迭代计算,或者需要多个MapReduce任务组成无向图时,例如PageRank算法,每个MapReduce任务产出的中间值如果存储在磁盘中,每次都重复加载数据、随机筛选都会大大降低计算效率的问题

HaLoop

HaLoop: efficient iterative data processing on large clusters 是在2010年就发布的Paper,可以说是最早发现MapReduce的中间值存储缺陷,并采用内存缓存作为替代,以此提升计算效率的方式

hadoop_kmeans

hadoop_kmeans

以Hadoop MapRedcue实现的KMeans算法为例,主要暴露出来的两个问题有:

  1. 每次迭代都需要从HDFS中重新加载数据
  2. 每次迭代都需要重新Shuffle数据到不同的Reducer

为了解决迭代计算中的这两个问题,基于Hadoop MapReduce,新增了Input/Output Caching、Indexing与Loop Control模块,同时在原有的基础上,修改了Task Scheduler、Task Tracker等模块。

应用开发者若要使用新的功能,可以直接通过调用API以触发:

```java
Job job = new Job();

// ingore the same process in Hadoop MapReduce

top Created with Sketch.