大数据课程:零基础预备知识(1)- 各路引擎框架的来龙去脉 | 青训营笔记

180 阅读8分钟

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

大数据领域由于其要处理的问题的复杂性,导致在技术应用过程中会出现大量的相关软件产品相互配合使用的情况,这让刚入门的我看着这么多名词是一头雾水。

这里我尝试从大数据技术的发展历史,简单给同样零基础的小伙伴讲一讲这些软件的来龙去脉以及相应的设计用途,以便大家能在接下来的课程中不至于毫无头绪地听课。

如果有疏漏或者错误的地方,还请各位大佬在评论区指出,Thanks♪(・ω・)ノ

“三驾马车”:Google 引爆大数据时代的三篇论文

今天我们常说的大数据技术,起源于 Google 在 2004 年前后发表的三篇论文:

  • 分布式文件系统 GFS

    Ghemawat S, Gobioff H, Leung S T. The Google file system[C]//Proceedings of the nineteenth ACM symposium on Operating systems principles. 2003: 29-43.

  • 大数据分布式计算框架 MapReduce

    Dean J, Ghemawat S. MapReduce: simplified data processing on large clusters[J]. Communications of the ACM, 2008, 51(1): 107-113.

  • NoSQL 数据库系统 BigTable

    Chang F, Dean J, Ghemawat S, et al. Bigtable: A distributed storage system for structured data[J]. ACM Transactions on Computer Systems (TOCS), 2008, 26(2): 1-26.

注:由于版权原因,这里不能分享原文,有需要可以在谷歌学术上搜索。文章的明面出版日期是比较迟的,但实际上当时可以通过电子预印本的方式在出版前就阅读到。

在大多数公司专注于提高单机性能时,Google 用这三篇文章首次提供了分布式计算这一新思路:部署大规模的服务器集群,通过分布式的方式将海量数据存储在这个集群上,然后利用集群上的所有机器进行数据计算,从而解决大量数据的存储和计算问题。

Hadoop 的诞生

作为商业公司,Google 在发布这三篇论文时并没有给出相应的实现代码。而当时的天才程序员,也是 Lucene 开源项目的创始人 Doug Cutting 正在开发开源搜索引擎 Nutch,也借 Google 的思路仿照 Google 论文提供的理论思路初步实现了类似 GFS 和 MapReduce 的功能

随后,在 2006 年,Doug Cutting 将这些大数据相关的功能从 Nutch 中分离了出来,然后启动了一个独立的开源项目专门开发维护大数据技术,这就是后来赫赫有名的 Hadoop,主要包括分布式文件系统 HDFS大数据计算引擎 MapReduce

Hadoop 发布之后,Yahoo 就把 Doug Cutting 挖了过去专职开发 Hadoop。可是 Yahoo 和 Doug Cutting 的蜜月也没有持续多久,Doug Cutting 不堪 Yahoo 的内部斗争,跳槽到专职做 Hadoop 商业化的公司 Cloudera。

到了 2007 年,百度和阿里巴巴也开始使用 Hadoop 进行大数据存储与计算。2008 年,Hadoop 正式成为 Apache 的顶级项目,后来 Doug Cutting 本人也成为了 Apache 基金会的主席。自此,Hadoop 作为软件开发领域的一颗明星冉冉升起。

Hive:分布式计算编程的SQL化

这个时候,Yahoo 的一些人觉得用 MapReduce 进行大数据编程太麻烦了,于是便开发了 Pig。Pig 是一种脚本语言,使用类 SQL 的语法,开发者可以用 Pig 脚本描述要对大数据集上进行的操作,Pig 经过编译后会生成 MapReduce 程序,然后在 Hadoop 上运行。编写 Pig 脚本虽然比直接 MapReduce 编程容易,但是依然需要学习新的脚本语法。于是 Facebook 又发布了 Hive。

Hive 支持使用 SQL 语法来进行大数据计算,比如说你可以写个 Select 语句进行数据查询,然后 Hive 会把 SQL 语句转化成 MapReduce 的计算程序。这样,熟悉数据库的数据分析师和工程师便可以无门槛地使用大数据进行数据分析和处理了。也就是说,我们可以用更低廉的价格获得比以往多得多的数据存储与计算能力。我们可以把运行日志、应用采集数据、数据库数据放到一起进行计算分析,获得以前无法得到的数据结果,企业的数据仓库也随之呈指数级膨胀。

曾经我们在进行数据分析与统计时,仅仅局限于数据库,在数据库的计算环境中对数据库中的数据表进行统计分析。并且受数据量和计算能力的限制,我们只能对最重要的数据进行统计和分析。这里所谓最重要的数据,通常指的都是给老板看的数据和财务相关的数据。随着 Hive 的发布,不仅是老板,公司中每个普通员工比如产品经理、运营人员、工程师,只要有数据访问权限,都可以提出分析需求,从大数据仓库中获得自己想要了解的数据分析结果。

Hive 出现后极大程度地降低了 Hadoop 的使用难度,迅速得到开发者和企业的追捧。据说,2011 年的时候,Facebook 大数据平台上运行的作业 90% 都来源于 Hive。

现代大数据计算生态的建立

随后,众多 Hadoop 周边产品开始出现,大数据生态体系逐渐形成,其中包括:

  • 专门将关系数据库中的数据导入导出到 Hadoop 平台的 Sqoop;
  • 针对大规模日志进行分布式收集、聚合和传输的 Flume;
  • MapReduce 工作流调度引擎 Oozie 等。

Yarn:资源调度

在 Hadoop 早期,MapReduce 既是一个执行引擎,又是一个资源调度框架,服务器集群的资源调度管理由 MapReduce 自己完成。但是这样不利于资源复用,也使得 MapReduce 非常臃肿。于是一个新项目启动了,将 MapReduce 执行引擎和资源调度分离开来,这就是 Yarn。2012 年,Yarn 成为一个独立的项目开始运营,随后被各类大数据产品支持,成为大数据平台上最主流的资源调度系统

Spark:适配于现代机器学习的批处理计算框架

在 Hadoop发布后不久,UC 伯克利 AMP 实验室的马铁博士发现使用 MapReduce 进行机器学习计算的时候性能非常差,因为:

  • 机器学习算法通常需要进行很多次的迭代计算,而 MapReduce 每执行一次 Map 和 Reduce 计算都需要重新启动一次作业,带来大量的无谓消耗。
  • MapReduce 主要使用磁盘作为存储介质,而 2012 年的时候,内存已经突破容量和成本限制,成为数据运行过程中主要的存储介质。

为此,AMP 实验室于 Yarn 诞生的同年(2012 年)开发的 Spark 开始逐渐替代了 MapReduce 的地位,一经推出,立即受到业界的追捧,并逐步替代 MapReduce 在企业应用中的地位。

离线/批处理计算 v.s. 实时/流式计算

一般说来,像 MapReduce、Spark 这类计算框架处理的业务场景都被称作批处理计算,因为它们通常针对以“天”为单位产生的数据进行一次计算,然后得到需要的结果,这中间计算需要花费的时间大概是几十分钟甚至更长的时间。因为计算的数据是非在线得到的实时数据,而是历史数据,所以这类计算也被称为大数据离线计算

而在大数据领域,还有另外一类应用场景,它们需要对实时产生的大量数据进行即时计算,比如对于遍布城市的监控摄像头进行人脸识别和嫌犯追踪。这类计算称为大数据流计算,相应地,有 Storm、Flink、Spark Streaming 等流计算框架来满足此类大数据应用的场景。 流式计算要处理的数据是实时在线产生的数据,所以这类计算也被称为大数据实时计算

小结:

  • 离线/批处理计算:MapReduce、Spark
  • 实时/流式计算:Storm、Flink、Spark Streaming

其中一些引擎在尝试同时支持二者,如Spark、Flink。

在典型的大数据的业务场景下,数据业务最通用的做法是:

  • 采用批处理的技术处理历史全量数据
  • 采用流式计算处理实时新增数据

大数据存储系统

除了大数据批处理和流处理,NoSQL 系统处理的主要也是大规模海量数据的存储与访问,所以也被归为大数据技术。

NoSQL 曾经在 2011 年左右非常火爆,涌现出 HBaseCassandra 等许多优秀的产品,其中 HBase 是从 Hadoop 中分离出来的、基于 HDFS 的 NoSQL 系统。

大数据计算的总体架构

大数据处理的主要应用场景包括:

  • 数据分析:主要使用 Hive、Spark SQL 等 SQL 引擎
  • 数据挖掘与机器学习:主要使用 TensorFlow、Pytorch、Mahout 以及 MLlib 等

此外,大数据要存入分布式文件系统(HDFS),要有序调度 MapReduce 和 Spark 作业执行,并能把执行结果写入到各个应用系统的数据库中,还需要有一个大数据平台整合所有这些大数据组件和企业应用系统。

大数据计算的总体架构

参考:李智慧老师的《从0开始学大数据》