热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hbase架构与基本概念

1、HBase简介Hbase是一个分布式的、多版本的、面向列的开源KeyValue数据库。多版本:每列值或单元格的值都具有时间戳,通过不同的时间戳来区分不同
1、 HBase简介
Hbase是一个分布式的、多版本的、面向列的开源KeyValue数据库。
  • 多版本:每列值或单元格的值都具有时间戳,通过不同的时间戳来区分不同版本的值,一个单元格不同版本的值按照降序排列在一起,访问时优先读取最新的值。
  • 面向列:Hbase是面向列存储的,RDBMS在表定义时,列属性是固定的,不能动态扩展,而Hbase可以动态的插入列,列的数量没有限制(可以有数百万个列)。
2、HBase中重要的概念
  • Row Key(行键):HBase是根据RowKey来检索数据的,不支持条件查询和Order by等查询,读取记录只能按Row key(及其range)或全表扫描。HBase存储时,根据RowKey的字典序排序。
  • Column Family(列族):在创建表时预先声明,不能修改的太频繁。Hbase中列的数量可能没有限制,但是列族的数量是有限制的,不超过几十个。
  • Column(列):Hbase中每个列属于一个列族,一般以列族名为前缀进行表示,ColumnFamily:Column Name,可以动态的新增(或删除),列的数量没有限制。
  • Timestamp(时间戳):每列值或单元格都有时间戳, Hbase中以时间戳来区分版本,每列值以时间戳进行降序排列,访问时优先读取最新的值。
  • Value(值):Hbase中的值是由Table,RowKey,Column Family,Column,Timestamp来唯一确定的,数据存储模式如下:(Table,RowKey,Column Family,Column,Timestamp)——>Value。
3、Hbase架构
(1)架构初识
在分布式的生产环境中,HBase 需要运行在 HDFS 之上。HBase 上层提供了访问数据的 Java API 层,供应用访问存储在 HBase 的数据。在 HBase 的集群中主要由 Master 和 Region Server 以及 Zookeeper组成,具体模块如下图所示:
  • Client API
访问Hbase数据的客户端接口。并缓存region的位置信息。
  •  Master

HBase Master用于协调多个Region Server,负责RegionServer之间的负载均衡,将繁忙服务器中的region移到负载较轻的服务器中。HBase允许多个Master节点共存,不过当多个Master节点共存时,只有一个Master是提供服务的,其他的Master节点处于待命的状态。当正在工作的Master节点宕机时,其他的Master则会接管HBase的集群。HBase Master还负责建表和创建列簇。

  • Region Server
对于一个Region Server而言,其包括了多个Region。RegionServer负责为他们服务的Region提供读写请求,并负责拆分超过配置大小的Region。Client直接与RegionServer通信,处理所有数据相关的操作。
  • Region
一个Region对应一个表,Region信息中包括此Region存储的StartKey。一个Region超过了配置中Region大小的最大值,Region就需要拆分,形成两个新Region,每个Region是原始Region的一半。在拆分完成后,Master被告知拆分情况,并可以根据负载均衡,将新Region分配到其他Region Server上。
  • ZooKeeper
ZooKeeper为HBase集群提供协调服务,它管理着Master和RegionServer的状态,并且Zookeeper负责Region和Region Server的注册。并存储所有Region的寻址入口(含有-ROOT-表的region服务器信息)。
  • HDFS
HDFS(Hadoop Distribute File System,hadoop分布式文件系统),由NameNode和DataNode组成。
——NameNode负责控制和管理整个分布式文件系统的主控节点。保存分布式文件系统的目录结构,以及数据的位置信息。
——DataNode负责具体的数据存储的从节点。
访问Hbase数据时,一个基本流程如下:
客户端要查找行健时,首先联系ZooKeeper子集群,通过ZooKeeper获取含有-ROOT-表的 Region Server名,通过含有-ROOT-表的Region Server可以查询到哪个.META. Region包含此行健信息;通过查询.META.表来获取客户端查询的行健数据所在Region Server名,在客户端知道了数据的实际位置后,会缓存这次查询的Region位置信息,并直接与管理实际数据的Region Server通信,获取行健信息。当再次查询时,由于已经缓存了Region的位置信息,就不再查询.META.表,直接定位数据位置。
-ROOT-:记录.META.表的Region信息。
.META.:记录用户表的Region信息。
参考《-ROOT-表和.META.表结构详解》 中的数据访问流程图,访问数据基本流程,如下所示(2)HBase存储与详细组件上文中给出了HBase架构的基本组成模块,下图显示的是HBase的详细组件。
 上图给出了HBase包含的详细组件,如下:
  • HReigon
一个Region由多个Store组成,一个Store对应一个Column Family(列族);
Store包括位于内存中的MemStore和位于磁盘的StoreFile,写操作先写入MemStore,当MemStore达到某个阈值时,将MemStore中的数据写入StoreFile。每个Store又由一个MemStore和多个StoreFile组成;
当一个region中所有StoreFile的大小和超过一定阈值后,Region 会进行拆分,由Master分配拆分后的Region到相应的 Region Server服务器上,实现负载均衡;
StoreFile以HFile格式保存在HDFS上。
  • KeyValue格式
HBase中实际的存储文件功能由HFile负责,由DATA块组成,每个DATA块都包含了一定数量的序列化的KeyValue实例,HFile中KeyValue格式如下

Key Lengh和Value Length分别表示键长度和值长度,此信息可以在查找数据时,进行跳跃,忽略键直接访问值。
存储文件中所有的KeyValue都被有序的存储,有助于把类似的键放在一起。
  • WAL(Write-Ahead Log)机制
预写日志机制。Store在保存数据时,先将数据保存在内存中,达到某阈值时,再将数据刷写到硬盘上。但存储在内存中的数据是不稳定的,例如在服务器断电的情况下,数据就有可能丢失。而解决此问题的方法就是预写日志机制:每次更新都会先写入日志,然后再写入内存中。WAL存储了对数据的所有更改。如果服务器崩溃,它可以有效地回访日志,回复数据。
Hlog即保存了预写的日志,存储在HDFS上。同一个Region 服务器共享同一个Hlog文件。
  • DFSClient
分布式文件系统的客户端,与DataNode通信,写入或获取需要的文件信息。
4、与传统数据库区别
根据Hbase架构和存储原理,总结下与传统数据库区别。
(1)Hbase是基于列模式的映射数据库,它只能表示简单的key-value的映射关系。
  • 数据类型:Hbase只有简单的字符串类型,而RDBMS类型选择比较丰富
  • 数据操作:Hbase操作只有简单的CRUD等操作,表与表之间没有关系是分离的;而RDBMS有各种各样的表连接操作
  • 存储模式:Hbase是基于列存储的,RDBMS是基于表结构和行模式存储的。
  • 数据维护:Hbase中的更新并不是真正意义上的更新,因为它的旧值仍然存在,实际上是插入了新数据。
  • 可伸缩性:Hbase能很轻易的增加或减少硬件数量。
Hbase基于列模式的分布式数据库更适合海量存储和互联网应用。
(2)表设计比较参考《Hbase总结(五)-hbase常识及habse适合什么场景》,我们进行表设计对比(更详细介绍请参考原文)。以记录博客内容为例1)传统数据库表设计我们创建两张表,一张为Article Table,另外一张为Author Table。
在两张表中各插入一条数据后,如下所示
2)、HBase可以按以下方式设计
如上图所示,RDBMS中的两张表可以分别用两个列族来标示,每个列族中的列保存了对应的Value信息,插入一条数据后,如下所示
上图中,可以看出HBase中是按RowKey的字典序进行排序的;两个版本的author:nickname,则体现了HBase多版本的特点;列族中多列是根据Column Key来排序的。

以上内容为HBase架构和基本概念的学习总结,如有不正确之处,请指出,大家共同学习进步。
参考文章:
《HBase权威指南中文版》
《Hadoop实战》
《Apache HBase ™ Reference Guide》
《Hbase总结(四)- Hbase与传统数据库的区别》
《Hbase总结(五)-hbase常识及habse适合什么场景》
《Hadoop相关知识整理系列之一:HBase基本架构及原理》
《Hbase原理、基本概念、基本架构》
《-ROOT-表和.META.表结构详解》




推荐阅读
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 分布式一致性算法:Paxos 的企业级实战
    一、简介首先我们这个平台是ES专题技术的分享平台,众所周知,ES是一个典型的分布式系统。在工作和学习中,我们可能都已经接触和学习过多种不同的分布式系统了,各 ... [详细]
  • B站服务器故障影响豆瓣评分?别担心,阿里巴巴架构师分享预防策略与技术方案
    13日晚上,在视频观看高峰时段,B站出现了服务器故障,引发网友在各大平台上的广泛吐槽。这一事件导致了连锁反应,大量用户纷纷涌入A站、豆瓣和晋江等平台,给这些网站带来了突如其来的流量压力。为了防止类似问题的发生,阿里巴巴架构师分享了一系列预防策略和技术方案,包括负载均衡、弹性伸缩和容灾备份等措施,以确保系统的稳定性和可靠性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
author-avatar
twinklezai750
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有