您当前的位置:首页 > 电脑百科 > 数据库 > 百科

聊聊HBase分布式数据库设计那些事

时间:2020-10-29 09:37:39  来源:  作者:

数据模型

传统的关系型数据库,一张表(table)由行(row)和列(column)组成。相对Hbase分布式数据库却有所差别,可以把Hbase中的表理解成不同维度Map的集合。包含以下主要概念。

  • table
    hbase数据库中的表。
  • row
    hbase数据库表中的行。一张表包含多行。每一行由row key和一个或多个column的值组成。row key按字母表顺序排序存储。在设计表的row key时,推荐按业务含义把相近的内容放到一起,这样可以有效地提高查询效率。比如:一张表的row key为domain(域名)时,对应row key值最好设计成域名的倒叙值(如:org.Apache.www, org.apache.mail, org.apache.jira),hbase存储时就可以把相同根域名的值放到同一块存储区域中,查询起来更快。row key不宜设计过大,hbase中每个值都会保存相关keys (row key, family qualifier, and timestamp)。
  • column
    hbase数据库表中的列。列由列族(column family)和列修饰符(column qualifier)构成。两者通过':'符号分隔。
  • column family
    框架性能方面的考虑,列族在物理上是多个列以及列中的相应值的集合。列族中还会存储一些基础的元数据,比如当前列族内容是否需要缓存在内存中,row key编码规则,数据压缩方式等。一张hbase表中的列族不宜过多,一般建议不超过3个,过多时在数据块压缩调整时会导致相互影响,从而影响性能。
  • column qualifier
    列修饰符被加入到某个列族中,并在列族中提供索引关联列修饰符中的值。如:列族content中的html修饰符,表示content:html;另一个修饰符pdf,则表示content:pdf。
  • cell
    一个单元对应表中一行(row)中列族(column family)下某个列修饰符(column qualifier)的值,包含具体值和时间戳(timestamp),其中时间戳用来标识当前值所属的版本(version)。
  • timestamp
    cell值被写入时,附带会写入相应的timestamp时间,作为该值的一个版本信息。timestamp默认取当前RegionServer服务机器上的时间,当然你也可以自行指定时间值。

概念视图

上面数据模型介绍的概念通过以下表格可以帮助理解。

聊聊HBase分布式数据库设计那些事

 

将以上表格转换成json格式

聊聊HBase分布式数据库设计那些事

 

通过以上图示,可以了解:

一个row key具有多个版本的数据,不同版本通过不同的timestamp定义。

一个column family可以有多个column qualifier。

row key下的column family可以为空。

一个row key多版本数据按版本号时间倒序排列。当查询条件不带版本号时,以倒叙顺序依次从上往下查找。如:rowkey="com.cnn.www",列族=contents:html,返回值t6版本的值。

NOSQL特性

hbase是一个nosql数据库,相较于RDBMS,它不支持传统关系型数据库的typed columns(列类型), secondary indexes(二级索引), triggers(触发器), and advanced query languages(高级查询语言)等特性。它的长处在数据存储,是真正意义上的分布式数据库。通过添加RegionServer机器,即可实现hbase的线性和模块化扩展。

Hbase具有以下特性:

  • Strongly consistent reads/writes: HBase is not an "eventually consistent" DataStore. This makes it very suitable for tasks such as high-speed counter aggregation.(强一致读写,非最终一致性数据存储,这使得特别适合高速的count聚合运算场景)。
  • Automatic sharding: HBase tables are distributed on the cluster via regions, and regions are automatically split and re-distributed as your data grows.(自动分片:HBase表通过regions分布到集群的不同机器上,随着数据增长,regions会自动分裂和重新分配集群机器资源)
  • Automatic RegionServer failover(自动RegionServer故障切换)
  • Hadoop/HDFS Integration: HBase supports HDFS out of the box as its distributed file system.(支持Hadoop和HDFS集成)
  • MapReduce: HBase supports massively parallelized processing via MapReduce for using HBase as both source and sink.(支持MapReduce计算框架)
  • JAVA Client API: HBase supports an easy to use Java API for programmatic access.(友好的java API集成)
  • Thrift/REST API: HBase also supports Thrift and REST for non-Java front-ends.(友好的Thrift/REST API集成)
  • Block Cache and Bloom Filters: HBase supports a Block Cache and Bloom Filters for high volume query optimization.(大容量查询优化,设计了块缓存和布隆过滤)
  • Operational Management: HBase provides build-in web-pages for operational insight as well as JMX metrics.(内置可视化界面操作工具)

表物理存储模型

聊聊HBase分布式数据库设计那些事

 

HBase表中的数据被拆分成不同的区域块(Region),每个区域块按一定规则分发到集群中不同的RegionServer上。通过这种把大表中数据打散到集群节点存储的方式来实现大数据宽表的线性扩展能力。

架构

聊聊HBase分布式数据库设计那些事

 

上图Hbase总体架构图,包含了HMaster、HRegionServer、HRegion、Hlog、Store、MEMStore等逻辑结构划分。HBase以HDFS作为底层存储框架,通过DFS Client进行文件操作。HMaster负责把HRegion分配给HRegionServer。一个HRegionServer包含多个HRegion。HRegionServer中的多个Region共享一个HLog,HLog用来做灾备恢复。一个Region由一个或多个store组成,一个store对应表中的一个列族,每个store包含memStore和其对应的一个或多个StoreFile。StoreFile是HFile的轻量封装,HFile是HDFS中的文件存储格式,MemStore放在内存中。

  • Client
    Client访问在新版本中将不直接操作zookeeper,通过HMaster的RPC远程端口间接获取meta数据。Client获得RegionServer Location后将直接对接RegionServer服务,无需经过HMaster转接。
  • HMaster
    HMaster主要功能:把HRegion分配到某一个RegionServer;有RegionServer宕机了,HMaster可以把这台机器上的Region迁移到active的RegionServer上;对HRegionServer进行负载均衡;通过HDFS的dfs client接口回收垃圾文件(无效日志等)。
  • HRegionServer
    维护HMaster分配给它的HRegion,处理对这些HRegion的IO请求,也就是说客户端直接和HRegionServer打交道;负责切分正在运行过程中变得过大的HRegion。
  • HRegion
    每个HRegion由多个Store构成,每个Store保存一个列族(Columns Family),表有几个列族,则有几个Store,每个Store由一个MemStore和多个StoreFile组成,MemStore是放在内存中的,写到文件后就是StoreFile。StoreFile底层是以HFile的格式保存。
  • HLog
    HLog(WAL log):WAL意为write ahead log(预写日志),用来做灾难恢复使用,HLog记录数据的变更,包括序列号和实际数据,所以一旦region server 宕机,就可以从log中回滚还没有持久化的数据。
  • HFile
    HBase的数据最终是以HFile的形式存储在HDFS中的,HBase中HFile有着自己的格式。

小结

本文简单介绍了Hbase分布式数据的数据模型、概念视图、NOSQL特性、整体架构内容。对Hbase的一些关键概念有了初步认识,从整体上对框架有了全局的了解。

希望本文对初学HBase的读者有所帮助,若有遗漏之处欢迎留言讨论。



Tags:HBase   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
老刘今天复习HBase知识发现很多资料都没有把概念说清楚,有很多专业名词一笔带过没有解释。比如这个框架高性能、高可用,那什么是高性能、高可用?怎么实现的高性能高可用?没说!如...【详细内容】
2021-03-04  Tags: HBase  点击:(136)  评论:(0)  加入收藏
一、NoSQL的简介NoSQL比关系型数据库性能高数倍。NoSQL凭借 “易扩展、大数据、高可用、高性能、灵活性”特点强势引领全场。CP型分布式数据库,能够保证数据的强一致性和分区...【详细内容】
2021-02-25  Tags: HBase  点击:(446)  评论:(0)  加入收藏
在大数据相关行业的面试中,经常会被问到这个问题:Redis、传统数据库、HBase以及Hive的区别。 本文将针对这个面试问题,做以下分析:1.问题分析面试官考核的是你对不同数据存储技...【详细内容】
2021-02-23  Tags: HBase  点击:(337)  评论:(0)  加入收藏
Redis定位在"快",MongoDB定位在"灵活",HBase定位于"大"。在一般使用情况下,MongoDB可以当作简单场景下的但是性能高数倍的MySQL,Redis基本只会用来做缓存,HBase用来存储海量数据...【详细内容】
2020-11-11  Tags: HBase  点击:(173)  评论:(0)  加入收藏
数据模型传统的关系型数据库,一张表(table)由行(row)和列(column)组成。相对Hbase分布式数据库却有所差别,可以把Hbase中的表理解成不同维度Map的集合。包含以下主要概念。 ta...【详细内容】
2020-10-29  Tags: HBase  点击:(166)  评论:(0)  加入收藏
导读:HBase是一个构建在HDFS之上的、分布式的、支持多版本的NoSQL数据库,它的出现补齐了大数据场景下快速查询数据能力的短板。它非常适用于对平台中的热数据进行存储并提供查...【详细内容】
2020-10-14  Tags: HBase  点击:(105)  评论:(0)  加入收藏
Hbase是Hadoop开源项目下的一个子项目,是一个构建在hdfs之上,支持分布式,水平扩展,数据多版本等特性的NoSQL数据库。现广泛应用于大数据的存储和查询场景。单机模式安装安装包下...【详细内容】
2020-10-13  Tags: HBase  点击:(145)  评论:(0)  加入收藏
今天给大家分享的内容是LSM树,它的英文是Log-structed Merge-tree。看着有些发怵,但其实它的原理不难,和B树相比简直算是小儿科了。 并且这也是一个非常经典的数据结构,并且在大...【详细内容】
2020-09-22  Tags: HBase  点击:(148)  评论:(0)  加入收藏
大数据存储: HBase API,DDL,DML4.1 环境准备新建项目后在pom.xml中添加依赖:<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId>...【详细内容】
2020-08-25  Tags: HBase  点击:(98)  评论:(0)  加入收藏
首先,需要明确的是,HBase写入速度比读取速度要快,根本原因LSM存储引擎。LSM树全称是基于日志结构的合并树(Log-Structured Merge-Tree)。No-SQL数据库一般采用LSM树作为数据结构,H...【详细内容】
2020-08-10  Tags: HBase  点击:(153)  评论:(0)  加入收藏
▌简易百科推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  快乐火车9d3    Tags:SQL   点击:(1)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  linux上的码农    Tags:sql   点击:(9)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰...【详细内容】
2021-12-22  GitHub精选    Tags:HasorDB   点击:(5)  评论:(0)  加入收藏
作者丨Rafal Grzegorczyk译者丨陈骏策划丨孙淑娟【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将...【详细内容】
2021-12-22    51CTO  Tags:Liquibase   点击:(3)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Bald    Tags:SQL   点击:(5)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  谣言止于独立思考    Tags:SQL基础   点击:(13)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  柠檬班软件测试    Tags:SQL   点击:(15)  评论:(0)  加入收藏
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表...【详细内容】
2021-12-08  小智雅汇    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
概述DBConvert Studio 是一款强大的跨数据库迁移和同步软件,可在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的 DBConvert 和 DBSync 核心与改进的现...【详细内容】
2021-11-17  雪竹聊运维    Tags:数据库   点击:(26)  评论:(0)  加入收藏
一、前言 大家好,我是小诚,《从0到1-全面深刻理解MySQL系列》已经来到第四章,这一章节的主要从一条SQL执行的开始,由浅入深的解析SQL语句由客户端到服务器的完整执行流程,最...【详细内容】
2021-11-09  woaker    Tags:SQL   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条