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从入门到放弃系列之一 · 基础篇的主要内容,如果未能解决你的问题,请参考以下文章

Kubelet从入门到放弃:拓扑管理(上)

Go从入门到放弃

Diffusion Models从入门到放弃:必读的10篇经典论文

JavaScript从入门到放弃之补充篇

[JavaScript从入门到放弃系列] 高级篇11.Vue.js之路由part2

Diffusion Models从入门到放弃:必读的10篇经典论文