预习 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作业执行,并能把执行结果写入到各个应用系统的数据库中,还需要有一个大数据平台整合所有这些大数据组件和企业应用系统。
图中的所有这些框架、平台以及相关的算法共同构成了大数据的技术体系,我将会在专栏后面逐个分析,帮你能够对大数据技术原理和应用算法构建起完整的知识体系,进可以专职从事大数据开发,退可以在自己的应用开发中更好地和大数据集成,掌控自己的项目。
思考题
你从大数据生态的发展史中,能得出什么样的结论?又有怎样的思考?
欢迎你写下自己的思考或疑问,与我和其他同学一起讨论。
- 江 👍(369) 💬(4)
1.论文奠定技术发展基石; 2.业务催生技术不断突破; 3.效率倒逼技术迭代更新;
2018-10-31 - Geek_vqdpe4 👍(49) 💬(1)
看了两篇专栏,感觉作者用文字描述的效果,胜过大多数视频教程
2018-11-03 - hua168 👍(42) 💬(1)
大神,从0学习大数据需要哪些基础呀?后面能分享一下大数据入门的顺序和相关书籍吗,好让我们这些菜鸟能有个系统的学习
2018-10-30 - 杰之7 👍(15) 💬(1)
在回过头来学习,重新梳理大数据平台技术体系。 通过从数据库,日志等获取的数据,sqoop,flume导入到大数据产品HDFS储存。Mapreduce,spark对储存的数据进行批计算处理,flink,storm等进行实时处理。Yarn负责对数据的资源调度。 计算框架将处理好的数据储存在数据库中,用Hive和Tensorflow等对数据进行分析和机器学习,最后将得到的结果展示在应用产品中或供他人参考。在整个平台过程中,资源调度管理系统对过程的执行先后进行管理。 回到老师的问题,我通过阅读认为,知识技术的发展离不开数据本身的飞速扩大,正是因为有了海量的数据需要google进行储存和索引排名,还会有分布式文件存储系统和计算框架,进一步在此基础上完善了大数据产品,形成大数据技术体系。对我的思考是既然大数据平台已经完成,接下来机器学习会飞速发展,因为数据量的巨大,里面的价值会是巨大的。我们要做的也许是跟上这个时代的节奏,有一点点嗅觉的发现,然后不放弃的做自身认为是对的事吧。
2019-01-14 - 暮光之城 👍(12) 💬(1)
老师你好,能不能系统的讲解一下数据仓库和大数据有什么区别和联系呢?以及应用场景有什么不同。
2019-04-19 - MARK 👍(10) 💬(2)
从大数据的发展史想到 一是思维方式的重要性,在多数企业在提高单机性能与更高更大更全的大型服务器死磕时,谷歌的思路是部署分布式服务器集群,少花钱还多办事。有人固步自封满足与现有知识,有人则紧跟时代脉搏不断学习前进,比如来定智慧老师的大数据专栏😁 二是hadoop用纯java语言编写,没什么技术难点,但是它价值巨大。我们许多码农总是抱怨,公司技术落后还天天在CRUD没有成长空间,也许应该思考下,即使是落后的技术你真明白是怎么回事么?如果自己实现该怎么实现呢
2018-11-08 - 有点意思 👍(6) 💬(1)
看了两篇 但是对大数据的用处还是没什么概念 身边的同事一直都说大数据一般公司用不到 只有像BAT这样的大公司才用 那普通的程序员学了也没有用武之地 有些迷茫
2019-06-03 - 刘刘 👍(3) 💬(1)
我是统计学出身,做“传统的”数据分析和建模,虽然一直想要往大数据的方向发展,但是总有不知从何下手的感觉。开头的这一部分让我对这些基本概念和它们的来龙去脉都有了了解。谢谢老师。
2019-06-30 - 钱 👍(2) 💬(1)
历史潮流浩浩荡荡,顺之昌,逆之亡。 一个人若能识势,乘势而为,做什么应该都比较轻松。 通信问题如果解决了,感觉一切技术的原理都是管理学,都是在想方设法的提高资源的利用率,想要的更多要的更快。数据是计算机处理的主体,世间的一切又都可以以数据的形式呈现,所以又加速了计算机对世界的影响。
2019-08-15 - y y 👍(2) 💬(1)
怎么没看见zookeeper啊
2018-11-15 - 小千 👍(2) 💬(1)
多大的数据才叫大数据呢? 数据量多大的情况下,大数据这套东西比传统方法优越?
2018-11-02 - 李印 👍(2) 💬(1)
大数据技术解决了海量数据的存储加工应用问题,同样解决了众多计算机协调工作的问题,现实中,一个人的力量是微小的,计算机世界里,一台计算机的能量也是相对微小的,众人拾柴火焰高,分布式技术体系中众多计算机构成大数据计算。今天就理解思考这些。。。哈哈
2018-10-31 - Eazow 👍(1) 💬(1)
请问大数据技术都是以hdfs为存储基础的吗?
2019-05-25 - 小太白 👍(1) 💬(1)
大数据很早就有行业和学科一直在研究和处理,比如金融和天文学。只是这一波浪潮涌来,被推到了浪尖。应用层面,人工智能和大数据交叉甚多不分彼此,很多机构和媒体把二者完全分离,叫人唏嘘。初学者云雾缭绕,幸有极客邦专栏,拨乱反正,指明方向。谢谢!
2018-11-06 - Jay 👍(0) 💬(1)
才来学习这个专栏,想问老师,大数据技术现在演进到什么阶段了?大数据和云原生有什么关系吗?
2022-04-10