数据存储与管理技术是大数据系统的基础,只有将数据存储与管理好了,才能进行后续的操作,所以大数据存储与管理的技术对整个大数据系统都至关重要,数据存储与管理的好坏直接影响了整个大数据系统的性能表现。
大数据存储技术
在大数据系统中,由于数据量的庞大,所以大数据的存储都是采用分布式存储的方式。大量的数据被分块存储在不同的数据中心不同机房不同的服务器节点上,并且通过副本保持数据的可靠性。
大数据领域最著名的存储技术就是Google的GFS和Hadoop的HDFS,HDFS是GFS的开源实现。HDFS的设计理念非常简单,当一台计算机无法存储所有需要的数据时,就使用多台机器共同存储,当机器数量越来越多时,就形成了一个大规模的集群。
HDFS架构
HDFS的架构如下图所示,采用的主从的结构,一台主节点上运行NameNode守护进程,一台节点上运行SecondaryNameNode守护进程,其他节点上运行DataNode守护进程,所有的数据都存放在DataNode节点上以块的形式存储。
NameNode被称为名称节点,它本身没有存放数据,在NameNode节点存放的数据文件的目录,也就是文件系统完整的索引。实际上NameNode中一共有两种文件,一种是File System Image(文件系统镜像),它包含完整的元数据(描述数据的数据,指示数据的存储位置等)。还有一种就是日志文件,日志文件记录了数据的改动。为什么不把对数据的改动直接更新到文件系统镜像中呢?这是因为文件系统镜像非常大,实时的更新会非常的慢,效率很低。所以在数据频繁改动时只要记录在一个日志文件中,然后定期将日志文件合并到文件系统镜像中。
SecondaryNameNode被称为第二个名称节点,同NameNode一样,SecondaryNameNode节点里也是存的文件系统镜像和日志文件,SecondaryNameNode的作用主要有两点:
1. 代替NameNode做合并操作
NameNode需要随时为集群提供服务,所以有时候可能没有多余的资源进行合并操作,所以SecondaryNameNode会将NameNode中的文件系统镜像和日志文件拷贝到本地,将其合并然后返还给NameNode,以减轻NameNode的负担。
2. 提高名称节点可靠性
因为名称节点只有一个,所以发生故障时会导致系统不可用。这时候就需要SecondaryNameNode将最新的文件系统镜像交给解决好故障之后的名称节点或者重新替换掉的名称节点,帮助名称节点恢复工作。
HDFS的优点
HDFS是大数据的根基,它有以下几个优点:
1. 能够存储大规模数据
能够支持过万的节点,数据量可以达到PB级,文件数量可以达到百万以上。
2. 流式访问数据
HDFS采用一次写入多次读取的模式,保证了数据的一致性。
3. 运行在廉价机器集群上
HDFS对硬件要求低,配置集群只需要普通的硬件就可以,不必专门购买昂贵的机器。
4. 高容错性
廉价的机器可能故障率比较高,但是HDFS集群具有高容错性。因为数据在HDFS中保存多个副本,当一个节点出现故障时会使用其他节点上的副本,并且可以配置其他节点代替故障节点。
HDFS和GFS
HDFS的设计和GFS高度一致,但是由于GFS专门为Google提供服务,GFS会针对Google的使用需求进行性能上的优化,而HDFS是一个开源项目,所以HDFS要考虑到应对不同的业务逻辑需求,会尽量设计得更简洁通用。GFS和HDFS的区别主要有以下几点:
1. 快照
GFS中拥有快照功能,可以在不影响当前操作的情况下对文件进行拷贝,拷贝的结果实际上是产生一个快照文件指向源文件,源文件增加引用计数。
2. 垃圾回收
当任务完成程序运行结束,系统需要回收之前分配的资源。在HDFS中采用的是直接删除的方法,而在GFS中采用的是惰性回收策略。所谓惰性回收就是在任务结束时不会立刻回收所有文件资源而是标记这些文件资源,防止普通用户访问,一段时间后删除。
大数据管理技术
我们通常使用数据库来管理数据,在大数据中也一样。与传统数据管理不一样的地方在于,传统数据多是结构化的数据,使用普通的关系型数据库管理就可以。 而在大数据中出现了大量的半结构化和非结构化的数据,使用传统的关系型数据库无法很好地管理所有数据,所以在大数据的数据管理中,我们通常使用非关系型数据库,其中最常用的就是HBase。
HBase采用了列族存储,列族存储来源于Google的Bigtable论文,本质上就是一个按列存储的大表。列式存储与行式存储如下图所示。
行式存储按行存储数据,这样一张表的数据都是在一起的,如果只需要查少数几列的数据时,查询会进行大量的IO,浪费大量时间和资源。
而列式存储,数据是按相同字段存储在一起,每一列单独存放,不同的列对应不同的属性,属性也可以根据需求动态增加。这样就可以只查询相关的列,减少了系统的IO。
HBase的逻辑模型如下图所示。其中RowKey是表的行号,也是每条记录的主键。Column Family是列族,包含一个或多个列。Column是列,代表一个记录的一个属性。Version Number是版本号,默认为系统时间。Data是存储的数据。
下图是HBaese的物理模型,一个大表中的数据按照Row Key排序,然后按行切割成Region,当表不够大时只有一个Region,当表越来越大后会形成多个Region。Region是HBase中分布式存储的最小单元,不同的Region分布在不同的RegionServer上。一个Region又会分成一个或者多个Store,一个Store又可以分成一个或者多个StoreFile,每一个StoreFile中有一个HFile。HFile是存储的最小单元,它们都存放在HDFS上。对于每一个Store都有一个MemStore的写入缓冲区,对Region进行写数据之前会检查MemStore,如果MemStore中已经缓存了写入数据则直接返回,如果MemStore中没有缓存,则需要先写入到Hlog中,再写入到MemStore中。Hlog是用来记录操作的日志,虽然写Hlog会一定程度上影响性能,但是Hlog可以用来提高可靠性,以便系统故障时可以通过Hlog来恢复数据。
看了大有收获,真的没有白来!
感谢支持🙏
他们都是电脑 群发广告的..
来看看总能学到一点东西!
互相学习