我们常说的大数据技术,大致主要起源于 Google 在 2004 年前后发表的三篇论文,其实数据处理早就存在,每个公司或者个人都有自己的大数据处理系统,并没有形成编程框架和理念,而这三篇论文也就是我们熟知的大数据三驾马车,分别是分布式文件系统 GFS、大数据分布式计算框架 MapReduce 和 NoSQL 数据库 BigTable,这三篇论文影响了当今大数据生态,可以称得上大数据的基石,Doug cutting 大佬在基于谷歌的三篇论文开发出了 hadoop hdfs 分布式文件存储、MapReduce 计算框架,实际上从 hadoop 开源代码中窥见大数据并没有多么高深的技术难点,大部分实现都是基础的 java 编程,但是对业界的影响是非常深远的。那个时候大多数公司还是聚焦在单机上,如何尽可能提升单机的性能,需求更贵的服务器,谷歌通过把许多廉价的服务器通过分布式技术组成一个大的存储、计算集群给业界应对存储计算问题提供了新的发展思路。
2006 年 hadoop 发布后,Yahoo 首先运用起来,随后越来越多大公司开始采用 hadoop 进行大数据存储和计算,2008 年 hadoop 正式成为 Apache 顶级项目,许多大数据商业公司也开始出现,与此同时 MapReduce 编程模型编写较为复杂,Yahoo 内部开发出了 Pig 一门脚本语言,提供类 SQL 的语法,开发者可以用 pig 脚本描述要对数据集进行的操作,Pig 经过编译后会生成 MapReduce 程序,然后运行到 Hadoop 集群中。
Pig 有个问题虽然比直接编写 MR 成需要容器但是仍然需要去学习新的脚本语法,于是 Facebook 又发明了 HIve 支持使用 SQL 语言进行大数据计算,然后转化成 MR 计算程序运行,极大的简化了 MapReduce 分布式程序的门槛,让数据开发人员、数据分析师也能够快速入手,因此 hive 迅速得到了开发者和企业的追捧。随后众多 Hadoop 周边产品开始出现,其中包括:
- 专门将关系数据库中的数据导入导出到 hadoop 平台的 Sqoop
- 数据收集诸如大规模日志进行分布式收集、聚合和传输的 Flume
- MapReduce 工作流调度引擎 Oozie、Airflow、Azkaban
在 Hadoop 早起 MapReduce 即是一个执行引擎又是一个资源调度框架,其中包含许多组件使得 MapReduce 非常臃肿也不利于资源复用,于是出现了 Yarn 可以将 MapReduce 的资源调度与执行引擎分离开来,随后被各类大数据产品支持,成为大数据平台上最主流的资源调度系统。
经历了多年的发展从 2016 年前后 MapReduce 慢慢的被其他产品取代了,为什么会被取代了?
主要有以下原因,高昂的维护成本,使用 MapReduce 需要严格的遵循 Map 和 Reduce 编程规范,当要处理更为复杂的业务流程,往往需要协调多个 Map 和多个 Reduce 任务。然而每一步的 MapReduce 都可能出错,另外在机器学习业务场景非常复杂的,往往需要经历数据 ETL 处理完成数据导入、特征处理、数据压缩、数据备份、数据验证、数据训练等等,一个完整的业务流程需要多个任务,每一个 Mr 任务都可能出错,都需要重试和异常处理机制,所以维护和开发这些系统比较难受。另外主要就是性能问题,机器学习迭代计算一个 MapReduce 程序就是进城运行,运行就需要启动一次,带来了大量时间性能损失,另外就是 MR 主要采取磁盘作为存储介质,中间数据都经过磁盘进行数据的读取和结果的写入。另外就是 MapReduce 程序配置麻烦,比如缓冲大小、分片多少、都需要经过时间去调试。
在 2012 年左右,UC 伯克利 AMP 实验室开发的 Spark 逐渐展露头角,spark 以 Rdd 的数据使方式、采用内存计算模型,再加上慢慢的 Spark Sql 、Spark MLlib、Spark Graph 等生态的完善,逐步取代了 MapReduce 在企业应用中的地位。
一般来说像 MapReduce、Spark 这类框架主要处理的业务场景都被称为批处理系统,其中的计算时间较长及面对的数据也是历史数据,而不是在线实时数据,所以这类计算称之为大数据离线计算,而在大数据领域还有一类需要对实时产生的数据进行即使计算,相应的有 Storm、Flink、SparkStreaming、等流计算框架来处理实时在线产生的数据去满足实时大数据的应用场景,这类计算也称为大数据实时计算。当然大数据业务场景需要同时采用批处理技术对历史数据进行计算,同时采用实时计算处理实时新增的数据,而像 Flink 这样的计算引擎,就可以同时支持流批一体计算了。
另外除了大数据计算外,还会有解决大规模数据存储与访问的 NoSql 系统也被称之为大数据技术,比如 Hbase、Cassandra、ClickHouse 等。
大数据处理的主要应用场景包括数据分析、数据挖掘、数据可视化与机器学习。数据分析主要使用 Hive、Spark SQL 等 SQL 引擎完成;数据挖掘与机器学习则有专门的机器学习框架 Spark 、TensorFlow、Mahout 、PyTorch、Alink 等,内置了主要的机器学习和数据挖掘算法。 大数据要存入分布式文件系统(HDFS),要有序调度 MapReduce 和 Spark 作业 执行,并能把执行结果写入到各个应用系统的数据库中,需要大数据调度平台,如何去管理整个大数据生态为业务赋能,还需要有一个大数据平台整合所有 这些大数据组件和企业应用系统。