阿丹:
基础概念了解之后了解目标知识的架构体系,就能事半功倍。
架构体系
关键组件介绍:
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
描述Hadoop EcoSystem中的各层系统。其中,HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便
HBase是一个分布式的、面向列的NoSQL数据库,它构建在Hadoop之上。HBase的架构体系主要包括以下几个组件:
HMaster: HMaster是HBase集群中的主节点,负责管理整个集群和协调各个RegionServer。它负责分配和管理Region(表的分区)以及处理客户端的请求。
RegionServer: RegionServer是HBase的工作节点,它负责实际存储和处理数据。每个RegionServer负责多个Region的管理和服务,并处理客户端的读写请求。
ZooKeeper: ZooKeeper是HBase的协调服务,用于管理和协调HBase集群中的各个组件和任务。它负责监控节点的状态、维护集群配置信息和协调分布式锁等。
HDFS(Hadoop分布式文件系统): HBase使用HDFS作为其底层存储文件系统,用于持久化数据和存储表的Region。数据以块(Block)的形式分布在HDFS集群中。
表和Region: HBase中的数据组织在表中,每个表可以由一个或多个Region组成,每个Region负责表中一部分数据的存储和处理。Region通过分区键进行划分,不同的行数据根据分区键进行垂直分布。
客户端: HBase提供了Java API供客户端使用,客户端可以通过API与HBase集群进行交互,进行数据的读写操作。
这些组件共同构成了HBase的架构体系,实现了可扩展的、分布式存储和处理大规模数据的能力。
图片中的组件说明:
reginserver:本地服务器
hdfs:是hbase:运行的底层文件系统。
regionserver:理解为数据节点,存储数据
master regionserver要实时向master报告信息。master知道全局的regionserver运行情况,可以控制regionserver的故障转移和region的切分。
结构细化图:
存储设计:
在Hbase中,表被分割成多个更小的块然后分散的存储在不同的服务器上,这些小块叫做Regions,存放Regions的地方叫做RegionServer。Master进程负责处理不同的RegionServer之间的Region的分发。在Hbase实现中HRegionServer和HRegion类代表RegionServer和Region。HRegionServer除了包含一些HRegions之外,还处理两种类型的文件用于数据存储
- HLog, 预写日志文件,也叫做WAL(write-ahead log)
- HFile 真实的数据存储文件
HLog
MasterProcWAL:HMaster记录管理操作,比如解决冲突的服务器,表创建和其它DDLs等操作到它的WAL文件中,这个WALs存储在MasterProcWALs目录下,它不像RegionServer的WALs,HMaster的WAL也支持弹性操作,就是如果Master服务器挂了,其它的Master接管的时候继续操作这个文件。
WAL记录所有的Hbase数据改变,如果一个RegionServer在MemStore进行FLush的时候挂掉了,WAL可以保证数据的改变被应用到。如果写WAL失败了,那么修改数据的完整操作就是失败的。
- 通常情况,每个RegionServer只有一个WAL实例。在2.0之前,WAL的实现叫做HLog
- WAL位于/hbase/WALs/目录下
- MultiWAL: 如果每个RegionServer只有一个WAL,由于HDFS必须是连续的,导致必须写WAL连续的,然后出现性能问题。MultiWAL可以让RegionServer同时写多个WAL并行的,通过HDFS底层的多管道,最终提升总的吞吐量,但是不会提升单个Region的吞吐量。
HFile
HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。索引的大小(keys的大小,数据量的大小)影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。
探讨数据库的数据存储方式,其实就是探讨数据如何在磁盘上进行有效的组织。因为我们通常以如何高效读取和消费数据为目的,而不是数据存储本身。
Hfile生成方式
起初,HFile中并没有任何Block,数据还存在于MemStore中。
Flush发生时,创建HFile Writer,第一个空的Data Block出现,初始化后的Data Block中为Header部分预留了空间,Header部分用来存放一个Data Block的元数据信息。
而后,位于MemStore中的KeyValues被一个个append到位于内存中的第一个Data Block中:
注:如果配置了Data Block Encoding,则会在Append KeyValue的时候进行同步编码,编码后的数据不再是单纯的KeyValue模式。Data Block Encoding是HBase为了降低KeyValue结构性膨胀而提供的内部编码机制。
读写简单流程