预习 01 | 大数据技术发展史:大数据的前世今生

在正式落地谈技术之前,我先花一些篇幅给你讲讲大数据技术的发展史,因为这对于你理解技术来说至关重要。

从我的角度而言,不管是学习某门技术,还是讨论某个事情,最好的方式一定不是一头扎到具体细节里,而是应该从时空的角度先了解它的来龙去脉,以及它为什么会演进成为现在的状态。当你深刻理解了这些前因后果之后,再去看现状,就会明朗很多,也能更直接地看到现状背后的本质。说实话,这对于我们理解技术、学习技术而言,同等重要。

今天我们常说的大数据技术,其实起源于Google在2004年前后发表的三篇论文,也就是我们经常听到的“三驾马车”,分别是分布式文件系统GFS、大数据分布式计算框架MapReduce和NoSQL数据库系统BigTable。

你知道,搜索引擎主要就做两件事情,一个是网页抓取,一个是索引构建,而在这个过程中,有大量的数据需要存储和计算。这“三驾马车”其实就是用来解决这个问题的,你从介绍中也能看出来,一个文件系统、一个计算框架、一个数据库系统。

现在你听到分布式、大数据之类的词,肯定一点儿也不陌生。但你要知道,在2004年那会儿,整个互联网还处于懵懂时代,Google发布的论文实在是让业界为之一振,大家恍然大悟,原来还可以这么玩。

因为那个时间段,大多数公司的关注点其实还是聚焦在单机上,在思考如何提升单机的性能,寻找更贵更好的服务器。而Google的思路是部署一个大规模的服务器集群,通过分布式的方式将海量数据存储在这个集群上,然后利用集群上的所有机器进行数据计算。 这样,Google其实不需要买很多很贵的服务器,它只要把这些普通的机器组织到一起,就非常厉害了。

当时的天才程序员,也是Lucene开源项目的创始人Doug Cutting正在开发开源搜索引擎Nutch,阅读了Google的论文后,他非常兴奋,紧接着就根据论文原理初步实现了类似GFS和MapReduce的功能。

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

当我们回顾软件开发的历史,包括我们自己开发的软件,你会发现,有的软件在开发出来以后无人问津或者寥寥数人使用,这样的软件其实在所有开发出来的软件中占大多数。而有的软件则可能会开创一个行业,每年创造数百亿美元的价值,创造百万计的就业岗位,这些软件曾经是Windows、Linux、Java,而现在这个名单要加上Hadoop的名字。

如果有时间,你可以简单浏览下Hadoop的代码,这个纯用Java编写的软件其实并没有什么高深的技术难点,使用的也都是一些最基础的编程技巧,也没有什么出奇之处,但是它却给社会带来巨大的影响,甚至带动一场深刻的科技革命,推动了人工智能的发展与进步。

我觉得,我们在做软件开发的时候,也可以多思考一下,我们所开发软件的价值点在哪里?真正需要使用软件实现价值的地方在哪里?你应该关注业务、理解业务,有价值导向,用自己的技术为公司创造真正的价值,进而实现自己的人生价值。而不是整天埋头在需求说明文档里,做一个没有思考的代码机器人

Hadoop发布之后,Yahoo很快就用了起来。大概又过了一年到了2007年,百度和阿里巴巴也开始使用Hadoop进行大数据存储与计算。

2008年,Hadoop正式成为Apache的顶级项目,后来Doug Cutting本人也成为了Apache基金会的主席。自此,Hadoop作为软件开发领域的一颗明星冉冉升起。

同年,专门运营Hadoop的商业公司Cloudera成立,Hadoop得到进一步的商业支持。

这个时候,Yahoo的一些人觉得用MapReduce进行大数据编程太麻烦了,于是便开发了Pig。Pig是一种脚本语言,使用类SQL的语法,开发者可以用Pig脚本描述要对大数据集上进行的操作,Pig经过编译后会生成MapReduce程序,然后在Hadoop上运行。

编写Pig脚本虽然比直接MapReduce编程容易,但是依然需要学习新的脚本语法。于是Facebook又发布了Hive。Hive支持使用SQL语法来进行大数据计算,比如说你可以写个Select语句进行数据查询,然后Hive会把SQL语句转化成MapReduce的计算程序。

这样,熟悉数据库的数据分析师和工程师便可以无门槛地使用大数据进行数据分析和处理了。Hive出现后极大程度地降低了Hadoop的使用难度,迅速得到开发者和企业的追捧。据说,2011年的时候,Facebook大数据平台上运行的作业90%都来源于Hive。

随后,众多Hadoop周边产品开始出现,大数据生态体系逐渐形成,其中包括:专门将关系数据库中的数据导入导出到Hadoop平台的Sqoop;针对大规模日志进行分布式收集、聚合和传输的Flume;MapReduce工作流调度引擎Oozie等。

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

同样是在2012年,UC伯克利AMP实验室(Algorithms、Machine和People的缩写)开发的Spark开始崭露头角。当时AMP实验室的马铁博士发现使用MapReduce进行机器学习计算的时候性能非常差,因为机器学习算法通常需要进行很多次的迭代计算,而MapReduce每执行一次Map和Reduce计算都需要重新启动一次作业,带来大量的无谓消耗。还有一点就是MapReduce主要使用磁盘作为存储介质,而2012年的时候,内存已经突破容量和成本限制,成为数据运行过程中主要的存储介质。Spark一经推出,立即受到业界的追捧,并逐步替代MapReduce在企业应用中的地位。

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

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

在典型的大数据的业务场景下,数据业务最通用的做法是,采用批处理的技术处理历史全量数据,采用流式计算处理实时新增数据。而像Flink这样的计算引擎,可以同时支持流式计算和批处理计算。

除了大数据批处理和流处理,NoSQL系统处理的主要也是大规模海量数据的存储与访问,所以也被归为大数据技术。 NoSQL曾经在2011年左右非常火爆,涌现出HBase、Cassandra等许多优秀的产品,其中HBase是从Hadoop中分离出来的、基于HDFS的NoSQL系统。

我们回顾软件发展的历史会发现,差不多类似功能的软件,它们出现的时间都非常接近,比如Linux和Windows都是在90年代初出现,Java开发中的各类MVC框架也基本都是同期出现,Android和iOS也是前脚后脚问世。2011年前后,各种NoSQL数据库也是层出不穷,我也是在那个时候参与开发了阿里巴巴自己的NoSQL系统。

事物发展有自己的潮流和规律,当你身处潮流之中的时候,要紧紧抓住潮流的机会,想办法脱颖而出,即使没有成功,也会更加洞悉时代的脉搏,收获珍贵的知识和经验。而如果潮流已经退去,这个时候再去往这个方向上努力,只会收获迷茫与压抑,对时代、对自己都没有什么帮助。

但是时代的浪潮犹如海滩上的浪花,总是一浪接着一浪,只要你站在海边,身处这个行业之中,下一个浪潮很快又会到来。你需要敏感而又深刻地去观察,略去那些浮躁的泡沫,抓住真正潮流的机会,奋力一搏,不管成败,都不会遗憾。

正所谓在历史前进的逻辑中前进,在时代发展的潮流中发展。通俗地说,就是要在风口中飞翔。

上面我讲的这些基本上都可以归类为大数据引擎或者大数据框架。而大数据处理的主要应用场景包括数据分析、数据挖掘与机器学习。数据分析主要使用Hive、Spark SQL等SQL引擎完成;数据挖掘与机器学习则有专门的机器学习框架TensorFlow、Mahout以及MLlib等,内置了主要的机器学习和数据挖掘算法。

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

图中的所有这些框架、平台以及相关的算法共同构成了大数据的技术体系,我将会在专栏后面逐个分析,帮你能够对大数据技术原理和应用算法构建起完整的知识体系,进可以专职从事大数据开发,退可以在自己的应用开发中更好地和大数据集成,掌控自己的项目。

思考题

你从大数据生态的发展史中,能得出什么样的结论?又有怎样的思考?

欢迎你写下自己的思考或疑问,与我和其他同学一起讨论。

精选留言

  • 2018-10-31 21:13:02

    1.论文奠定技术发展基石;
    2.业务催生技术不断突破;
    3.效率倒逼技术迭代更新;
    作者回复

    总结精炼,赞

    2018-11-01 22:01:05

  • @阿锦啊

    2018-10-30 01:08:28

    只要你站在海边,身处这个行业之中,下一个浪潮很快又会到来。你需要敏感而又深刻地去观察,略去那些浮躁的泡沫,抓住真正潮流的机会,奋力一搏,不管成败,都不会遗憾。

    这句话真好
  • Geek_vqdpe4

    2018-11-03 10:25:35

    看了两篇专栏,感觉作者用文字描述的效果,胜过大多数视频教程
    作者回复

    谢谢

    2018-11-05 21:25:34

  • hua168

    2018-10-30 09:43:31

    大神,从0学习大数据需要哪些基础呀?后面能分享一下大数据入门的顺序和相关书籍吗,好让我们这些菜鸟能有个系统的学习
    作者回复

    这个专栏就是从零学习大数据,而且很系统,希望你坚持下来。

    2018-10-31 21:23:19

  • 猫头鹰爱拿铁

    2018-10-30 10:12:59

    昨天刚订阅专栏 今天就得知消息 公司要上大数据项目了 我是项目组成员 好开心 真的好巧啊 感谢下订阅专栏带来的运气 同时也要好好学习 哈哈
  • 杰之7

    2019-01-14 13:17:58

    在回过头来学习,重新梳理大数据平台技术体系。

    通过从数据库,日志等获取的数据,sqoop,flume导入到大数据产品HDFS储存。Mapreduce,spark对储存的数据进行批计算处理,flink,storm等进行实时处理。Yarn负责对数据的资源调度。

    计算框架将处理好的数据储存在数据库中,用Hive和Tensorflow等对数据进行分析和机器学习,最后将得到的结果展示在应用产品中或供他人参考。在整个平台过程中,资源调度管理系统对过程的执行先后进行管理。

    回到老师的问题,我通过阅读认为,知识技术的发展离不开数据本身的飞速扩大,正是因为有了海量的数据需要google进行储存和索引排名,还会有分布式文件存储系统和计算框架,进一步在此基础上完善了大数据产品,形成大数据技术体系。对我的思考是既然大数据平台已经完成,接下来机器学习会飞速发展,因为数据量的巨大,里面的价值会是巨大的。我们要做的也许是跟上这个时代的节奏,有一点点嗅觉的发现,然后不放弃的做自身认为是对的事吧。
    作者回复

    是的

    2019-01-15 11:44:43

  • 暮光之城

    2019-04-19 23:42:16

    老师你好,能不能系统的讲解一下数据仓库和大数据有什么区别和联系呢?以及应用场景有什么不同。
    作者回复

    数据仓库是解决数据问题的方案和方法,大数据是具体实现技术。大数据和关系数据库都能实现数据仓库。

    2019-05-05 09:57:27

  • 公号-技术夜未眠

    2018-10-30 10:08:10

    大数据生态的发展还是遵循着不断演进的过程,出现新问题、解决新问题、更加容易的解决新问题、然后再次出现新问题,以此不断螺旋上升。
    大数据技术本身就是为业务而生,而不是脱离业务而产生的新技术;正是由于将业务刻在大数据本身的基因里面,所以很多大厂商都对大数据的发展、应用、推广、普及起到了很重要的促进作用。
    现在我们正处于大数据时代,除了要了解,甚至掌握大数据技术,更加需要培养、具备大数据思维,让数据成为信息、形成知识、支撑决策,让数据说话。
  • 白牙

    2020-10-16 11:25:48

    名词解释:
    1.Hadoop生态
    HDFS 分布式文件系统
    MapReduce 大数据计算引擎
    Hive 使用SQL进行大数据计算 - 将SQL转换为MapReduce的计算过程
    Sqoop 将关系型数据库导入到Hadoop平台
    Flume 大规模日志分布式收集聚合传输
    Oozie MapReduce工作流调度
    Yarn 资源调度,从MapReduce分离
    Spark :MapReduce的升级,使用内存作为存储介质

    离线计算框架: MapReuce、Spark 离
    流式计算框架: Strom、Flink、Spark Streaming


    2.大数据应用:
    数据分析 Hive 、Spark SQL
    数据挖掘与机器学习: TensorFlow、Mahout、MLlib
  • 抱小星

    2020-08-25 15:55:06

    这文字感动得我要流泪了,2014年进入机械专业,大学挣扎迷茫了4年,2020年加入互联网公司做算法岗,大数据开发和广告推荐算法,赶上时代的潮流,中间的滋味,经历了什么,只有自己懂。一定要抓住时代的浪潮,关注时代!
  • MARK

    2018-11-08 09:33:10

    从大数据的发展史想到
    一是思维方式的重要性,在多数企业在提高单机性能与更高更大更全的大型服务器死磕时,谷歌的思路是部署分布式服务器集群,少花钱还多办事。有人固步自封满足与现有知识,有人则紧跟时代脉搏不断学习前进,比如来定智慧老师的大数据专栏😁
    二是hadoop用纯java语言编写,没什么技术难点,但是它价值巨大。我们许多码农总是抱怨,公司技术落后还天天在CRUD没有成长空间,也许应该思考下,即使是落后的技术你真明白是怎么回事么?如果自己实现该怎么实现呢
    作者回复

    👍🏻

    2018-11-08 20:02:38

  • hashmap

    2018-11-09 20:22:12

    如果潮流已经退去,这个时候再去往这个方向上努力,只会收获迷忙于压抑
    真的是这样,有感触,
    要站在时代的前列腺,顺势而为
  • 有点意思

    2019-06-03 16:56:12

    看了两篇 但是对大数据的用处还是没什么概念
    身边的同事一直都说大数据一般公司用不到
    只有像BAT这样的大公司才用
    那普通的程序员学了也没有用武之地
    有些迷茫
    作者回复

    技术上,大数据是一系列工具和解决问题的方法,和数据量是否大、公司是否大并无直接关系。小公司也一样可以用大数据技术创造价值。

    2019-06-05 16:39:47

  • Monday

    2020-08-06 16:30:07

    再次拜读本篇文章,竟然心潮澎湃起来。本文对大数据各种技术的出现做了总结。深度好文,感谢老师。
  • 买了就等于学了

    2020-05-09 18:07:08

    很喜欢李老师的《大型网站技术架构》,惊艳到我了。所以,极客有老师的课我就赶紧来学一波。
    回顾大数据的发展或者是任何的技术发展我觉得都是业务和用户需求驱动的。任何系统都围绕存储和计算这两个主题。存储的目标就是存储的更多,读取更快;计算的目标就是运算和处理更快。而大数据技术就是为了更好的实现这两个目标而衍生。存储大量数据,从大量数据挖掘价值。
  • 刘刘

    2019-06-30 22:52:53

    我是统计学出身,做“传统的”数据分析和建模,虽然一直想要往大数据的方向发展,但是总有不知从何下手的感觉。开头的这一部分让我对这些基本概念和它们的来龙去脉都有了了解。谢谢老师。
    作者回复

    加油~

    2019-07-03 15:04:20

  • 何超

    2021-02-19 14:22:43

    供个人记录:
    批处理: 离线处理,主要针对历史数据;
    流处理:实时处理,针对实时数据;

  • InsomniaTony

    2020-04-02 14:10:42

    感谢作者的整理,在分布式计算领域亚马逊的云似乎也做的不错。他们的S3,DynamoDB和EMR对应到这里讨论的HDFS, NoSql和MapReduce,他们相对于Google有什么独树一帜的地方能让他们的产品领先其他对手。是否能贴出这些奠基性论文的链接,有兴趣的朋友可以自己去阅读
  • 2019-08-15 22:33:03

    历史潮流浩浩荡荡,顺之昌,逆之亡。
    一个人若能识势,乘势而为,做什么应该都比较轻松。
    通信问题如果解决了,感觉一切技术的原理都是管理学,都是在想方设法的提高资源的利用率,想要的更多要的更快。数据是计算机处理的主体,世间的一切又都可以以数据的形式呈现,所以又加速了计算机对世界的影响。
    作者回复

    2019-08-16 14:37:02

  • y y 

    2018-11-15 23:54:37

    怎么没看见zookeeper啊
    作者回复

    下个模块,敬请期待

    2018-11-16 09:34:11