一、谷歌
搜索引擎主要的作用有:1. 网页抓取 2. 索引构建。
在这个过程中,涉及到大量的数据存储运算。为了优化这个问题,谷歌在2004年左右先后发表了三篇论文,分别是分布式文件系统GFS、 大数据分布式计算框架MapReduce和NoSQL数据库系统BigTable。通过这种方案,可以使用多个性能普通的计算机联合计算,来代替一台性能优秀但是造价昂贵的计算机,一方面提高效率,另一方面也可以降低成本。
二、天才
世界的发展方向是天才们的灵光乍现。
在谷歌发表上节所述论文后,当时的天才程序员Doug Cutting等人,利用两年的业余时间,开发出一套大数据技术框架,这就是如今赫赫有名的Hadoop,Doug Cutting也因此成为apache基金会的主席。Hadoop的icon大象,设计灵感正来源于Doug Cutting儿子的一个塑料玩具。
Hadoop的主要组成包括:
- 分布式文件存储系统HDFS
- 大数据计算引擎MapReduce
- 资源调度系统Yarn
此时此刻这个世界上有无数行代码被敲下,一个又一个软件被实现,这些软件中只有极小部分能成为各自领域的主流,大多数则沦为历史车轮下的细小尘埃。我觉得,我们在做软件开发的时候,也可以多思考一下,我们所开发软件的价值点在哪里?真正需要使用软件实现价值的地方在哪里?你应该关注业务、理解业务,有价值导向,用自己的技术为公司创造真正的价值,进而实现自己的人生价值。而不是整天埋头在需求说明文档里,做一个没有思考的代码机器人。
三、生态
Hadoop的突然问世,吸引了大量的目光。
雅虎认为使用MapReduce框架编写程序太过于麻烦,提出一种脚本语言Pig。Pig可以使用类SQL的方式,对数据进行计算处理,经过编译后就可以生成对应的MapReduce程序,在Hadoop上运行。
Facebook认为使用Pig会增加工程师的学习负担,提出Hive。Hive可以使用SQL脚本直接处理分布式数据,即Hive可以将SQL语句转换为MapReduce计算程序。
随后,众多 Hadoop 周边产品开始出现,大数据生态体系逐渐形成,其中包括:专门将关系数据库中的数据导入导出到 Hadoop 平台的 Sqoop;针对大规模日志进行分布式收集、聚合和传输的 Flume;MapReduce 工作流调度引擎 Oozie 等。
随着Hadoop的应用渐广,一些弊端也随之显现。例如,MapReduce在机器学习计算时性能较差,一方面因为机器学习期间要进行大量的迭代计算,每一次计算都要重新执行一轮Map和Reduce任务,带来大量的无谓消耗;另一方面,MapReduce完全使用磁盘作为存储介质,限定了计算速度。针对此种缺陷,UC伯克利提出Spark。
一般说来,像 MapReduce、Spark 这类计算框架处理的业务场景都被称作批处理计算,因为它们通常针对以“天”为单位产生的数据进行一次计算,然后得到需要的结果,这中间计算需要花费的时间大概是几十分钟甚至更长的时间。因为计算的数据是非在线得到的实时数据,而是历史数据,所以这类计算也被称为大数据离线计算。
而在大数据领域,还有另外一类应用场景,它们需要对实时产生的大量数据进行即时计算,比如对于遍布城市的监控摄像头进行人脸识别和嫌犯追踪。这类计算称为大数据流计算,相应地,有 Storm、Flink、Spark Streaming 等流计算框架来满足此类大数据应用的场景。 流式计算要处理的数据是实时在线产生的数据,所以这类计算也被称为大数据实时计算。
在典型的大数据的业务场景下,数据业务最通用的做法是,采用批处理的技术处理历史全量数据,采用流式计算处理实时新增数据。而像 Flink 这样的计算引擎,可以同时支持流式计算和批处理计算。
除了大数据批处理和流处理,NoSQL 系统处理的主要也是大规模海量数据的存储与访问,所以也被归为大数据技术。 NoSQL 曾经在 2011 年左右非常火爆,涌现出 HBase、Cassandra 等许多优秀的产品,其中 HBase 是从 Hadoop 中分离出来的、基于 HDFS 的 NoSQL 系统。