大数据开发:Hadoop生态的分布式数据库

Hadoop作为分布式基础架构,有分布式文件系统HDFS进行存储划分,而落实到最终的存储上,还需要分布式数据库的配合,其中Hadoop原生的Hbase就是典型的分布式数据库。今天的大数据开发学习分享,我们就主要来讲讲Hadoop生态的分布式数据库。

1、什么是分布式数据库?

从狭义的理解就是分布式关系型数据库,主要特指目前热门的NewSQL。

从广义的理解,分库分表的传统关系型数据库,传统关系型数据库集群,关系型数据库的主从架构,分布式KV数据库(例如:HBase),分布式文档数据库(例如:MongoDB),分布式关系数据库(例如:TiDB)等,统称为分布式数据库。

2、Hadoop HDFS的数据存储模型

最早Google发明了GFS分布式文件系统,之后对应的开源项目就是鼎鼎大名的Hadoop HDFS。

GFS/HDFS的特点表现在顺序的、成块的、无索引的向文件块中写入数据,并在集群环境中按块(block)均匀分布存储,使用时再根据MapReduce、Spark的并行任务,按块批次的读取分析。这样就把写入和并行读取的性能发挥到了极致,具备了任何建立索引的数据库都无法比拟的读写速度。

HDFS的数据写入结构示意图

上图是一个写入HDFS数据的例子,我们需要知道HDFS这些事情:

需要写入HDFS的文件会被分成数据块,一个数据块通常是64M或者128M。

数据块在HDFS集群中默认有三个副本,平均分配在不同的DataNode数据节点上。

由于HDFS的分布式架构是中心化管理,因此并没有数据节点主副的概念,只有顺序的概念,所有数据节点都是存储数据块副本的,全部通过namenode节点安排数据节点的写入顺序。

数据节点的写入过程就像一个数据管道,根据客户端就近原则,形成数据节点的排队,当第一个节点写入数据包后,然后再向数据管道的下一个数据节点复制,以此类推,并得到完成确认。

3、HBase的架构设计

为了更好的理解HBase/Bigtable,一定需要先铺陈一下它们所依赖的分布式文件系统基础环境,然后再看看这些巧夺天工的分布式数据库设计如何形成的。

由于GFS/HDFS集群的高性能设计是建立在放弃随机查找的基础之上。那么如何既能拥有随机查找的特性,又能充分利用好HDFS/GFS的集群优势,而且还能在分布式环境下,具备数据写入的强一致性呢?这才涌现出了HBase/Bigtable这类基于分布式文件系统的分布式数据库。

但大家要注意了,实际上HBase/Bigtable的随机查找设计目标并不是解决复杂的join关联查找或二次索引范围查找,而是实现简单的一个K-V查询模型,满足海量数据的存放条件下,通过主键查找结果,能达到毫秒级响应的数据库。

HBase的数据写入结构示意图

上图就是HBase的写入过程以及HDFS作为物理层支撑的架构示意图。

HBase按照LSM-Tree索引加上SSTable数据结构建立了NoSQL常用的数据存储模型。写入过程分成了下面几个部分:

客户端向HBase的Region Server写入数据,会首先进入到WAL(Write-Ahead-Log)预写日志中,然后再进入到选择的Region的MemStore中,那这个WAL的目的是什么呢?保命用的!因为一旦Region Server断电或异常崩溃,MemStore的数据是在内存里,肯定就丢了,MemStore恢复的时候就靠WAL存的日志数据了。MemStore真正同步数据后,WAL才会从本地写入HDFS,否则回滚。

Region的MemStore是一个放在内存里的高速操作区,MVCC事务操作,最近写入记录读取都可以在此处快速完成,当数据在MemStore写满后,就会刷入到Store File磁盘存储区。

Store File存储区就是不断通过memstore刷盘而形成的HFile,每个HFile默认分配128M,大小正好与HDFS的一个数据块(block)一致,HFile的物理位置就是存储在HDFS的每个数据块中,HFile就是不可更改的了,并通过HDFS的副本机制,形成三副本保证数据的可靠性。

4、HDFS与HBase的协作配合

从上述的HDFS和HBase系统的配合中(GFS与BigTable同理)我们可以看到Hadoop生态体系设计的巧妙结构:

HDFS对于大文件块的顺序写入,批量分析,HDFS的无索引、顺序写入、管道复制机制充分体现了Google的暴力美学~解决问题的方式务实、简单、直接、高效。

HBase作为列簇设计的K-V数据库,又实现了细腻入微的设计思想,通过LSM-Tree索引和SSTable数据结构建立起原生数据库存储层。

HBase机制上WAL、MemStore、StoreFile形成数据操作的多元素协作。

HBase架构上HRegion Server、HRegion、HLog、HStore层层嵌套,形成分布式数据库的集群化能力。

最关键的就是HBase与HDFS的分工思想,HBase解决业务数据记录写入,K-V随机查找(毫秒级),由Region Server控制的行级事务等一些列分布式数据库特征;而HDFS解决小文件汇聚成大文件的高性能处理,分布式文件系统的海量存储,数据多副本的可靠性,以及成为Mapreduce、Spark、Hive等其他框架与HBase之间协作的基础平台。

关于大数据开发学习,Hadoop生态的分布式数据库,以上就为大家做了简单的介绍了。Hadoop生态当中,Hbase作为原生的数据库,与HDFS是紧密联系配合的,学习阶段也建议结合起来去理解和掌握。

你可能感兴趣的:(大数据开发:Hadoop生态的分布式数据库)