大数据时代给传统数据仓库架构带来了一系列的冲击和挑战,从源数据存储层面,仓储的构建者需要思考的两个主要方面:一是数据规模急速增长,现有的单节点或者共享磁盘架构能否适应海量数据的存储;二是数据结构复杂多样,现有的基于结构化数据为主体的存储方案能否兼容非结构化数据。因此需要首先明确实际项目的大数据来源,结合实际功能需求选择大数据存储方案。
一、大数据存储方案
根据调研,大数据存储中具有代表性的分布式存储系统有GFS、FaceBook HayStack、HDFS、KFS、TFS 等。
1、GFS(google file system)
谷歌使用的可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用,可以采用非常廉价的硬件搭建,通过软件的方式自动容错,在保证系统可靠性和可用性的同时,减少系统成本。一个GFS集群由一个master和大量的chunkserver构成,并被许多的客户client访问。体系结构如下:
整个体系节点分三种,GFS Master(中心服务器)、GFS Chunkserver(数据库服务器)、GFS Client(客户端)。
硬件方面:主控机、linux服务器、路由器、交换机等,可使用虚拟服务器技术获取多个数据块服务器chunkserver。
软件方面:开源、linux语言。
使用工具:Hadoop等分布式软件。
优势:开源;对硬件的要求低;经济成本较低。
2、Facebook Haystock
Facebook使用的分布式系统,主要用于存储照片的系统,具有高吞吐量、低延时、容错性好;并可以提要存储空间利用率,提高请求处理效率。其基本框架如下:
缺陷:硬盘存储慢;访问效率低;CDN(内容分发网络)速度快,但价格昂贵。
3、HDFS(hadoop distributed file system)
Hadoop分布式文件系统,GFS简化版,更具针对性的分布式系统。是运行在通用硬件上的分布式文件系统,具有高度容错性等特点,适合在廉价的设备上运行。存储特点:流式读取方式,一次写入多次读出;主要针对存储超大文件设计,包括几百MB/GB/TB等。该分布式构建在普通PC机的集群上,构建成本较低。系统架构如下:
硬件方面:主控机(中心服务器);多台数据库服务器;客户端。
软件方面:开源,使用java实现,与其他语言兼容性一般。
使用工具:hadoop分布式架构的开发工具。
4、KFS(kosmos distributed file system)
KFS:是一个专门为数据密集型应用(搜索引擎,数据挖掘等)而设计的存储系统,类似于Google的GFS和Hadoop的HDFS分布式文件系统。
硬件方面:主控机(中心服务器);多台数据库服务器;客户端。
软件方面:使用C++实现,支持的客户端包括C++,Java和Python。
系统功能方面:支持存储扩充(添加新的chunckserver,系统自动感知);支持多种高级功能(文件多版本管理、文件操作日志、文件回收站机制、文件事件驱动、文件操作事务控制);负载平衡(系统周期地检查chunkservers的磁盘利用,并重新平衡chunkservers的磁盘利用,HDFS现在还没有支持)。
5、TFS(taobao file system)
TFS:taobao file system,高可扩展、高可用性、面向互联网服务的分布式文件系统,主要针对海量非结构化数据,构筑在普通的linux机器集群上。一个TFS集群有两个nameserver节点(一主一备)和多个dataerver节点组成,服务程序都运行在普通的linux机器上。
缺点:支持小文件数据较好,不适用大数据源的数据存储。
软件方面:开源,使用C++实现,拥有自己的命名规则,都给开发部署带来了较大的困难。
二、实现大数据存储要从下述三个技术角度分析
1、对于大规模数据,我们将采用分而治之的思想,构建分布式存储系统,并且做到易扩展。保证系统可以方便的增加节点,当企业的数据快速增加时,可以使数据分布始终保持在平衡状态。
2、兼用多种存储引擎。大数据因结构复杂多样使得数据仓库要采集的源数据种类繁多,因此新的仓储架构也要改变目前以结构化为主体的单一存储方案的现状,针对每种数据的存储特点选择最合适的解决方案:对非结构化数据采用分布式文件系统进行存储;对结构松散的半结构化数据采用面向文档的分布式key/value存储引擎;对海量的结构化数据采用shared-nothing的分布式并行数据库系统存储。
1)适合存储海量非结构化数据的分布式文件系统。
主要包括GFS、FaceBook HayStack、HDFS、KFS、TFS 等。
2)适合存储海量半结构化数据的分布式存储引擎。
HBase(Hadoop Database),也是开源项目Hadoop的家族成员,是Bigtable的开源实现。HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,它不同于一般的有模式的关系型数据库,HBase存储的数据表是无模式的,特别适合结构复杂多样的半结构化数据存储。此外,HBase利用HDFS作为其文件存储系统,利用MapReduce技术来处理HBase中的海量数据。
3)适合存储海量结构化数据的分布式并行数据库系统。
Greenplum是基于PostgreSQL开发的一款MPP(海量并行处理)架构的、shared-nothing无共享的分布式并行数据库系统。采用Master/Slave架构,Master只存储元数据,真正的用户数据被散列存储在多台Slave服务器上,并且所有的数据都在其它Slave节点上存有副本,从而提高了系统可用性。Greenplum最核心的技术就是,大表数据分片存储,可以应对海量数据;基于大表的查询语句在经过Master分析后可以分片发送到Slave节点进行并行运行,所有节点将中间结果返回给Master节点,由Master进行汇总后返回给客户端,大大提高了SQL的运行速度。
三、大数据存储中所用的数据库
1、传统关系型数据库
存储结构化数据常用的数据库有:MySQL、PostgreSQL等。
2、NoSQL数据库
NoSQL数据库的四大分类:
分类 |
举例 |
典型应用场景 |
数据模型 |
优点 |
缺点 |
键值(key-value) |
TokyoCabinet/Tyrant, Redis, Voldemort, Oracle BDB |
内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等 |
Key 指向 Value 的键值对,通常用hash table来实现 |
查找速度快 |
数据无结构化,通常只被当作字符串或者二进制数据 |
列存储数据库 |
Cassandra, HBase, Riak |
分布式的文件系统 |
以列簇式存储,将同一列数据存在一起 |
查找速度快,可扩展性强,更容易进行分布式扩展 |
功能相对局限 |
文档型数据库 |
CouchDB, MongoDb |
Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) |
Key-Value对应的键值对,Value为结构化数据 |
数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 |
查询性能不高,而且缺乏统一的查询语法 |
图形数据库 |
Neo4J, InfoGrid, Infinite Graph |
社交网络,推荐系统等。专注于构建关系图谱 |
图结构 |
利用图结构相关算法。比如最短路径寻址,N度关系查找等 |
很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案 |
四、行业大数据平台架构(基于Hadoop平台)
基于Hadoop的技术扩展和封装,围绕Hadoop衍生出相关的大数据技术,应对传统关系型数据库较难处理的数据和场景,例如针对非结构化数据的存储和计算等,充分利用Hadoop开源的优势,伴随相关技术的不断进步,其应用场景也将逐步扩大,目前最为典型的应用场景就是通过扩展和封装Hadoop来实现对互联网大数据存储、分析的支撑。这里面有几十种NoSQL技术,也在进一步的细分。对于非结构、半结构化数据处理、复杂的ETL流程、复杂的数据挖掘和计算模型,Hadoop平台更擅长。大数据平台架构图如下:
评论留言