言归正传,这篇科普文章就给大家讲讲大数据的技术栈和生态圈,让大数据不再神秘!
何谓大数据?大数据的Wiki英文引文中的解释如下:
The tools, processes and procedures allowing an organization to create, manipulate, and manage very large data sets and storage facilities.
允许组织去创建,操纵和管理巨量数据集和存储设施的工具,过程和程序。
因此,从广义上来说,大数据是一个抽象的概念,它包含了巨量数据本身以及处理它所需要的工具、过程以及程序。从狭义上说,大数据就是各种来源结构化和非结构化的数据集合,通常这种数据集合造成传统软件在可接受的时间内进行数据处理的能力。
随着时间的推移,数据的单位增长随着软硬件的不断进步,而呈现出指数倍的增长,在气象学、基因组学、神经网络体学、复杂的物理模拟、生物及环境研究、金融、电商等各个领域,数据的体量已经大到传统的软件程序对其进行分析处理的时间无法承受,也许可能计算一次大气模拟需要一个月之久才能得到结果,但得到的结果的时候已经失去了其本身计算的意义。
截止2012年,全世界每天产生2.5EB(1EB=1000PB=1000000TB=1000000000GB)的数据,采用传统的软件处理数据已经是穷途末路,大数据技术的产生是大势所趋。
大数据的特点可以使用5个V来介绍,分别是Velocity、Value、Veracity、Variety、Volume。
Velocity(速度):大数据的产生速度是非常迅速的,图中也介绍了这个特性中的几个要点,分别是批量化产生、近乎实时的要求、处理速度快、以及支持流式处理操作。可以想象,如果一个公司的搜索引擎不能近乎实时且精准地返回用户想要查询的结果,那么这家公司一定会被市场淘汰掉。
Value(价值):数据的增加并不代表数据的价值增加,在一般的情况下,数据价值的密度较低,这是一个沙里淘金的过程。如何采用合适的算法模型来对数据进行分析、挖掘,寻找数据中的价值是未来相当长的一段时间内学界、业界需要共同努力的事情。
Veracity(真实性):这里指的是数据的可信度。一般而言,大数据需要确保获得的数据具有真实性的意义,否则一切都是无意义的徒劳。
Variety(种类):大数据的种类和来源是多样化的,其中包括结构化、半结构化和非结构化的数据,具体表现有文本数据、音视频数据、图片、地理位置数据等等。多类型的数据对目标企业或机构的数据的处理能力就提出了更高的要求。
Volume(体量):毋庸置疑,大数据的数据体量是非常庞大的,通常意义上来说,一次计算的体量至少都应该是GB级别,大多数都是TB级别,有的甚至在PB、EB。
大数据的技术栈从业务流的角度进行分析,大数据的技术栈的功能主要针对数据提供:采集、清洗、存储、查询、计算、可视化等功能。针对这些功能,各个技术机构针对自己的业务需求,开发了可用的框架,目前这些技术框架有很多,我们可以看下面这张图,来宏观感受一下。
不要被吓到,这里的所有技术并不会要求你全部搞定,一般的大数据从业人员也只需要会每隔小部分中最重要的一个或几个技术就够了。在众多的技术中,最让人熟悉的莫过于Hadoop技术生态圈里的内容了,因此我首先来介绍一下有关Hadoop的技术生态圈,让大家了解Hadoop的各种技术之间是怎么进行协同工作的。
上图是一个Hadoop的技术生态圈,里面包括了Hadoop全部的技术栈,各个技术都充当了整个大数据处理流程中的某个特定角色,下面我来挨着解释一下。
1、HDFS
HDFS,全称为Hadoop Distributed File System,叫做Hadoop分布式文件系统。它是Hadoop生态系统中最重要的组件。 HDFS是Hadoop的主要存储系统。 Hadoop分布式文件系统(HDFS)是基于Java的文件系统,可为大数据提供可伸缩、容错、可靠且经济高效的数据存储。 HDFS是在商用硬件上运行的分布式文件系统。它支持通过类似shell的命令的直接交互。HDFS其内部有两个最重要的组件,分别是NameNode和DataNode。
NameNode,不存储实际的数据而是对文件系统内的元数据进行管理,比如数据块信息、数据分布的存放节点与位置、DataNode节点的数据存放细节等,在同一个集群中,此组件要求只能有一个处于工作状态。
DataNode,负责在HDFS中存储实际数据。DataNode根据客户端的请求执行读取和写入操作。DataNode的副本块由文件系统上的2个文件组成。第一个文件用于数据,第二个文件用于记录块的元数据。在启动时,每个DataNode连接到其相应的NameNode并进行握手。命名空间ID和DataNode的软件版本的验证通过握手进行。发现不匹配时,DataNode自动关闭。DataNode根据NameNode的指令执行诸如块副本创建,删除和复制之类的操作。