HBase从入门到放弃系列之一 · 基础篇
Posted 技术道心南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase从入门到放弃系列之一 · 基础篇相关的知识,希望对你有一定的参考价值。
1.HBase是什么? -- is what
官网描述HBase:
HBase is the Hadoop database, a distributed, scalable, big data store.
### 解读:HBase是Hadoop的数据库;官网中用distributed(分布式的)、scalable(可扩展的)、big data store(大数据存储的) 3个后置定语来修饰这个Hbadoop数据库。其中,
distributed的通俗理解:HBase中存储的数据是分布在多个不同的机器上的;
scalable的通俗理解:HBsase集群中的RegionServer是可以横向任意添加的;
big data store的通俗理解:一张HBase表可以存储数十亿行 X 数百万列;
-------------------------------------------------------------------------------
2.HBase能干什么? -- can do what
### 解读:HBase的本质就是数据库,而数据库的作用无非就两方面:
* 存储数据
* 检索数据
&& 问题1:不是已有RDBMS(关系型数据库)吗?为何还要弄个HBaase出来?意义何在?
解释:当数据库中某张表的数据量达到数十亿条时,若用RDBMS进行检索查询时,效率极低,有一种砸键盘的冲动;而用HBase进行检索时,查询效率一般在秒级别(1秒左右)。所以,HBase存在的意义就是高效地解决大数据(亿级别)随机、准实时读/写访问的需求。
### 总结:HBase究竟能做什么:
(1) 海量数据的存储;
理由:hbase是基于hadoop之上的,hbase中的数据是以列簇存储在hdfs上的(其中每个列簇对应hdfs中的一个单独文件);而对于RDBMS来说,是不敢说海量存储的。
(2) 海量数据的查询;(举个现网的例子:)
一张表:
60亿条数据,30个字段,
依据一个条件去查(如车牌号),
1k,几十毫秒;
2w,几百毫秒;
>>> 查询效率:秒级别(1秒左右)
-------------------------------------------------------------------------------
3.HBase如何存数据及检索数据 -- how to do it?
官方描述:HBase是一个建立在hdfs上的Nosql非关系型列存储数据库,具有支持线性扩展(横向扩展)、自动故障转移、自动分区及模式自由等特性。
### 解读:通俗理解就是,hbase是按列存储的非关系型数据库,以列簇CF的形成存储在hdfs上,且HBase中regionserver的个数是可以任意增加的,当某个regionserver出现故障后,其中的数据可以自动转移到其他regionserver上;
3.1 HBase体系结构图
### 解读:HBase是一个主-从结构;Master是hbase的主节点,用来协调客户端应用程序与regionserver的关系,同时用来监控和记录元数据的变化和管理;regionserver是hbase的从节点,以region的形式处理实际的表。zookeeper是一个分布式应用程序协调服务,提供分布式同步,在hbase中,用来选举集群主节点Master,以便跟踪可用的在线服务器,同时维护集群的元数据。
&& 问题2:HBase具有扩展性的主要原因?
(1) HBase中的数据在文件中,在hdfs中,DataNode可以任意加;
(2) HBase表的数据可以分成多个区域region,每个region均有一个regionserver负责数据管理及检索,而regionserver也可以任意加。
3.2 HBase表的设计原理
## HBase的数据类型:hbase中没有花哨的数据类型,它所有都是字节组;也就是说,hbase的单元格cell只能容纳字节数组。
## HBase的模型术语:
* rowkey -- 行健
## 解读:rowkey是byte array(字节数组),它是表中每条记录的“主键”,其作用是提高查找速度;类似于RDBMS中的主键。
* column family -- 列簇
## 解读:列簇拥有一个string类型的名称,它包含一个或者多个相关列。
* column -- 列
## 解读:列属于某一个column family。它被包含在某一个CF中,且列不能脱离列簇而存在。
==> 加深理解:列簇与列的关系,类似于姓与名字的关系;同一姓的人(名字)很多,但名字不能脱离姓而存在。例如姓蒋的人很多,如蒋炳南,蒋超良,但当描述一个人的时候“超良”(类似于column)是不能脱离“蒋”(类似于CF)而存在的。
* cell -- 单元格
## 解读:hbase使用【坐标】来确定一个单元格,即使用[rowkey, columnfamily, column, timestamp:value]来定位一个cell。
* timestamp -- 时间戳
## 解读:cell值有时间版本,时间版本用时间戳来标识。
结束语:
我们之所以会心累,就是常常徘徊在坚持和放弃之间,举棋不定。
我有故事,你有酒吗?
以上是关于HBase从入门到放弃系列之一 · 基础篇的主要内容,如果未能解决你的问题,请参考以下文章
Diffusion Models从入门到放弃:必读的10篇经典论文