简单介绍之大数据框架

致初学者算法

一,恶龙出巢缓存

大数据,顾名思义,就是数据变得愈来愈多,变得很大很大。我知道不少人对这个解释嗤之以鼻,但是通过个人一段时间学习,发现这个概念就是这样,没有必要把它上升到一种难以理解的高度。网络

不理解的问题在于:你对数据到底有多大根本没有概念。数据结构

咱们在网络上每一次操做无非都是对数据的增删改查,在将来随着网络应用的愈来愈多,人们对网络需求的愈来愈大,每一个网络使用者至关于一个庞大的数据集,能够说你的经历有多少,你看到的,听到的有多少,你的数据就会有多少。框架

而随着数据愈来愈多,咱们须要采集,传输,计算,存储的资源就有多少。咱们没法要求咱们的数据存储硬件愈来愈大,咱们的计算机硬件愈来愈快,由于全部硬件的资源到了必定程度都受限于物资的资源。因此咱们要解决将来发展中这样一个困难的问题,即产生了一系列关于大数据的学思和产品。分布式

二,勇士拔剑工具

计算机科学就是数据结构+算法。oop

大数据做为计算机科学的分支,解决问题也从这两个角度出发。开启革命第一枪的是谷歌04年发表的论文MapReduce,其实早于这篇论文已经有不少相似想法产生的发表,不过还要资本推进技术革命嘛。这篇论文的关键思想在于他给了分布式计算的一个很典型的算法,作到一个庞大数据集计算功力的成功分布,这样一来即便咱们不依靠硬件的提高,只经过算法就能够实现对大数据的计算了。性能

举个栗子,如今须要对全校的毕业论文作每一个单词的词频统计。MapReduce的作法是把每篇论文的每一个单词先作一个键值对形式的转化(Map),如(we,0),而后把转化后的键值对集分布到集群下各个子节点中(shuffle),这样每一个普通计算机分到了比较少许的论文数量,再把他们按值键值相同的合并(Reduce),可能会是(we,10086),在统一将整理后的数据集返还给master节点,完成整个数据集的计算。学习

三,恶龙咆哮

咱们如今很耳熟的框架基本上都是开源的,从Apache的Hadoop运用MapReduce开启了全民使用Hadoop的热潮后,大数据方向的框架一直在发展,一直在进步,一直适应于人们的生活。

咱们从上个例子能够知道,要处理人们平常生活中产生的大数据要分不少步骤:

数据采集(Apache Flume)--->数据缓冲缓存,分布式消息队列(Apache Kafka)--->数据实时计算(Apache Hadoop, Spark,Storm,Flink)--->数据存储(HBase)

在这期间还要有不少对大数据补充产品好比:分布式协调工具Zookeeper,数据仓库Hive等等,有些已经弃用,有些还在更新。

固然,除了Apache家族开源的几个产品,市场上其余比较热门的分布式框架好比Redis(分布式内存存储),Dubbo(分布式远程服务调用)等等。

须要一提的是,全部这些产品在网络分层的角度看都是软件层面上的产品,网络整个五层结构的协同合做才使得咱们能在互联网浪潮中扑腾,因此即便咱们了解了其中一个框架,也只不过是冰山一角。

四,利刃出击

简单来讲,Apache的实时计算框架经历的一系列的发展过程:

Hadoop依靠MapReduce的数据处理

Hadoop经过主从模型,用一系列技术维护同时性,作出来一个可维护可高效率运行的大数据实时处理框架

名门望族Spark经过RDD进行系统能力扩展

其实Spark对于Hadoop的创新有不少,但仍是在发展路途中留下了不少Hadoop的身影。其中最主要的创新就是Hadoop建立了RDD(分布式弹性数据集)这样一个数据结构,其中不少分区存储信息,还创建了与其余RDD之间的联系,这样就使得咱们的数据集大小可控,能够根据业务须要进行数据分流操做,提升系统灵活性,运行速度也因为在MapRedeuce方面的改进而大大提升。

Storm流处理革新

大数据的革新带来了数据形式的革新,数据再也不像之前同样是大规模集成式的批处理,更多的是来自不一样地点的分布式实时流计算。Storm的方式是完全改变思想,新建了本身的一套数据结构,把整个数据看成数据流同样处理,想要关闭就拧紧水龙头,想要打开就控制流开启,在本身造成的topology中作业务。

Flink有状态的实时运算

Flink把数据当成流来处理,计算时直接计算每一个状态,并保留过程当中的状态数据,而不是数据自己,在流当中设置窗口等概念控制流,并有一系列容错机制如ABS来保证持久化。

HDFS分布式存储

基于一件事情说三遍的思想,就是用一个主从模型作系统备份,并经过心跳保证系统一致性,在期间还要考虑网络,性能,单点破坏等一系列事件。

关于HBase等分布式存储的框架,起源于Google的另外一篇论文BigTable思想,这里再也不阐述。

以上是大数据实时处理的基本介绍,疏漏还请包涵,如要学习推荐先有一点理论常识,而后从o'reilly和官方书籍入手,再看工程代码辅助论文看,才会有效果。