数据分为结构化数据(如人员信息、项目信息)和非结构化数据(如图片,文档),传统上讲,我们采用数据库来存结构化数据,如MySQL Oracle SQLServer,用NFS来存非结构化数据。
大数据,意味着数据多,如果记录数达到了上亿,一般数据库可能也就拖不动了。如果存储文件数达到几个T,甚至更多。那么NFS硬件又如何布局呢?
有时可能一台机器上的硬盘插满都不够。 有人说,不是可以用群集么,群集可以解决计算时多台,但解决不了存储容量的扩容。
- 能否有这样的一个平台:
这样的架构中,数据节点可以随意增加,容量不够,添加个节点就行,总容量等于数据节点之和。然后我们读取数据时,只与总管节点打交道,至于有几个数据节点,对程序来说是透明的。这样的平台,就可以完全达到我们随意扩容的功能。同时针对备份,该平台能自己能解决,一份数据可以直接复制到两个数据节点上,完成备份功能。数据节点所用的服务器,还要以不用再单独配存储设备,直接利服务器自带存储即可。
有这样的平台哇?——有,有个牛人写了这样的软件,名叫Hadoop。
目前业内流行很多大数据平台,如华为、华三、星环、腾讯。
其实本质上都是基于Hadoop来的,稍加包装和改造。 就这点功能?——No。
它还有个更强大的用处,就叫计算。
有了大数据,毫无疑问需要便用,否则那就数据垃圾堆、数据坟墓。如何用呢?比如我想写统计程序,统计一下所有文档中,哪个词语使用的频次最高。
试想一下,传统怎么做? 我们会写一个程序放在业务应用服务器上,然后程序从“总管节点”读数取文档数据,然后读到后进行统计累加。
问题来了,我的数据是海量的,有几十个T,请问你这个程序执行完,从“总管节点”到“业务应用”这台电脑上的网络中,要走到多少流量?应该就是这几十个T吧,是不是有点恐怖?
也就是你把所有的数据,从存储全部移动到了应用端,只不过没有落地而已。于是大牛们就想,这些存储结点上不也有CPU么,不也有计算能力么。能否利用这些CPU资源,而不要把数据进行搬移,称之为移动计算(体)。
这个在Hadoop上执行计算的架构,叫MapReduce。其中包含两个过程,Map是把计算任务下发到各计算结点上,Reduce是把各计算结点算出的结点回收回来,最终返回给用户。
MapReduce存在个缺陷,就是计算的中间结果是落地在磁盘上,也就增加了IO操作。
后来有人改造了下,把中间结果写入内存中,于是出现了Spark。好了,这就是大数据平台,提供了统一存储以及计算的统一解决方案。各类应用都最终化解为MapReduce过程在Hadoop上执行,包括各类机器学习算法。
试想个问题:Google搜索一条信息为什么这么快?是不是就是这个思路?先把收集的各网页信息,存于无数台服务器上,当你执行搜索时,其实每台服务器都在帮你执行,然后每台上处理的数据量相对小,于是就快了,再把最终结果汇给你。
其实,Hadoop就是借鉴了Google的思想,做出的开源产品。