大数据的本质是单机容不下的数据
本文不会对涉及到的具体技术加以深入探讨,仅仅简述下个人理解的大数据背景知识。
单机时代 VS 大数据时代
从单机时代讲起,人们日常需要的数据存放在一台电脑里绰绰有余,但文件并非整体的存放在一整块地方,而是分散到硬盘的各个磁道上,由文件系统统一管理,所以不需要关注文件究竟在哪个扇区。
切换到大数据时代,数据无法存放在一台单机上,而是分散到成千上万的机器上,在使用数据时,人们只希望像单机时代一样方便,而不是去关注文件究竟在哪些机器上、该怎么去取等,由此便衍生出了分布式文件系统,在文件系统之上,基于各种各样大数据背景下的需求,慢慢便出现了各式各样的大数据工具,如下图。

存储
解决大数据问题的第一步,便是如何把数据存储下来,只有先存在来,才能再谈如何应用。目前这方面最火的该是Hadoop
项目,由Hadoop
构建的HDFS
支持了大数据的存储,使得用户不用在关心具体的存储细节,只需像单机时代一样来使用即可。有了存储之后,人们便开始考虑如何利用大数据来计算,由此便衍生出了一代计算引擎。
搭建单机版Hadoop
,请参考https://www.jianshu.com/p/d09f9d630675
一代计算引擎
在大数据背景下,计算任务不可能把所有的待计算数据全load
到一台机器的内存中来计算,所以需要新的计算模型来完成大数据的计算任务,由此便衍生出了MapReduce
引擎。MapReduce
把大数据的计算抽象成了两个基本步骤:Map
和Reduce
,整个过程可以基本理解为由Map
任务在每个节点上分别进行计算任务,再由Reduce
任务汇总结果,简单的说即为:分散计算,统一汇总。
举例说明,要统计某文档内所有单词的词频,Map
任务会先在各个节点上计算出部分结果:host1: [hello, 100], [world, 200]
, host2: [hello, 11], [world, 22]
等,Map
任务结束后,Reduce
任务会汇总所有的部分结果并聚合成最终结果:[hello, 111], [world, 222]
等。
MapReduce
模型帮助程序员们原理了具体的分布式任务实现,只需要实现MapReduce
任务的抽象就可以完成分布式下的大数据计算任务,因此收到程序员的一致欢迎。
二代计算引擎
MapReduce
模型本身虽然笨重,但已经很强大,足以解决大数据下大部分计算问题,但有人问了:“能不能更快”,于是便出现了第二代计算引擎Tez
和Spark
,简单的理解是,它们把计算数据放在了内存中,从而获取到了更快的速度。
更高的抽象
有了计算引擎后,程序员们开始想了:“能不能不用写代码也可以执行大数据计算”,于是变出现了更高层次的工具Hive
、Pig
,其中Hive
通过使用SQL
的方式实现了大数据计算任务,可能原来写百行代码的任务如今一句SQL
就可以搞定,Pig
采用脚本的方式来实现大数据计算任务。这一举动受到了广泛产品和运营人员的热爱,“我不会编程,但是我会SQL呀”,于是产品和运营再也不用去求着程序员小哥哥写代码了,程序员小哥哥内心窃喜。
“我还想更快怎么办”,于是在二代计算引擎上也衍生出了类似的工具Hive on Tez/ Spark
、SparkSQL
等。
还能不能更快
“还能不能更快”,能的,原有的计算绕不开的是先把数据存储下来,再执行计算任务,那么能不能在数据存储时就执行计算呢,由此便出现了流计算引擎Storm
,流计算在数据流入时便执行了计算任务,因此能更快的获得计算结果,但本身的设计也代表它的局限性,如必须提前预知计算逻辑,数据流过后变不可回流等,使用时应根据具体的需求情况按需设计方案。
其他
除此之外,
还有KV Store
,如Cassandra
、HBase
、MongoDB
等,它们的特点是基本无法处理复杂运算、基本不能Join, Aggregation
,基本没有一致性,但是非常非常非常的快
,如果根据userId找到userInfo
,使用Hadoop
可能要遍历所有文件,但KV Store
针对该类操作做了相当大的优化,足够达到很快的速度;
分布式一致性服务软件,如zookeeper
等;
Hadoop
的通用资源管理器,如yarn
;
构成了大数据下的基本背景。
网友评论