hbase简洁

Posted hollowcabbage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hbase简洁相关的知识,希望对你有一定的参考价值。

技术分享图片Hbase概述

HBase是什么?

  1. HBase是一个构建在HDFS上的分布式列存储系统
  2. HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储
  3. 从逻辑上讲, HBase将数据按照表、行和列进行存储

Hbase是Hadoop生态系统的一个组成部分

 

  技术分享图片

Hbase与HDFS对比

HDFS HBase
HDFS是适于存储大容量文件的分布式文件系统。 HBase是建立在HDFS之上的数据库。
HDFS不支持快速单独记录查找 HBase提供在较大的表快速查找
它提供了高延迟批量处理;没有批处理概念。 它提供了数十亿条记录低延迟访问单个行记录(随机存取)
它提供的数据只能顺序访问。 HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。

 

 

 

 

 

HBase的存储机制

HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。

一个表有多个列族以及每一个列族可以有任意数量的列。

后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳

下面给出的表中是HBase模式的一个例子

Rowkey Time Stamp Column Family Column Family Column Family
col1 col2 col3 col1 col2 col3 col1 col2 col3
1 t1  a  b  c  a1  a2  a3      
t2 e f g       b1 b2 b3
2 t3                  
3 t4                  

 

 

 

 

Row Key:HBase是采用KeyValue的列存储,那Rowkey就是KeyValue的Key了,表示唯一一行,即表中每条记录的“主键”。

Rowkey也是一段二进制码流,最大长度为64KB,内容可以由使用的用户自定义。数据加载时,一般也是根据Rowkey的二进制序由小到大进行的。

Column Family:拥有一个名称(string),并且包含一个或者多个相关列

Column:属于某一个column family,包含在某一列中 familyName:columnName

Version Number:数据版本号,默认值是系统时间戳,也可由用户提供(无需以递增的顺序插入)

行存储与列存储对比

行式数据库 列式数据库

数据是按行存储的

数据是按列存储-每一列单独存放

没有索引的查询使用大量I/O

数据即是索引

建立索引需要花费大量时间和资源  只访问查询涉及的列-大量降低系统I/O
RDBMS有它的模式,描述表的整体结构的约束。 HBase无模式,它不具有固定列模式的概念;仅定义列族
RDBMS是事务性的。 没有任何事务存在于HBase。
用于结构化数据非常好。 它用于半结构以及结构化数据是非常好的。

 

 

 

 

 

 

 

 

 

 

Hbase与支持的操作

所有操作均是基于rowkey的;

支持CRUD(Create、Read、Update和Delete)和Scan;

单行操作:put get scan

多行操作:Scan,Multiput

没有内置join操作,可使用MapReduce解决

 

Hbase物理模型

  1. 每个column family存储在HDFS上的一个单独文件中
  2. Key 和 Version number在每个 column family中均由一份
  3. 空值不会被保存
  4. Hbase为每个值维护了多级索引

 

物理存储

  • Table中的所有行都按照row key的字典序排列
  • Table 在行的方向上分割为多个Region
  • 技术分享图片
  • Region按大小分割的,每个表开始只有一个region,随着数据增多, region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;

技术分享图片

 

  •  Region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上
    技术分享图片

     

  • Region虽然是分布式存储的最小单元,但并不是存储的最小单元

    Region由一个或者多个Store组成,每个store保存一个columns family
    每个Store又由一个memStore和0至多个StoreFile组成;
    memStore存储在内存中, StoreFile存储在HDFS上。

    技术分享图片

     

    ROOT表和META表

    HBase的所有Region元数据被存储在.META.表中,随着Region的增多,.META.表中的数据也会增大,并分裂成多个新的Region。为了定位.META.表中各个Region的位置,把.META.表中所有Region的元数据保存在-ROOT-表中,最后由Zookeeper记录-ROOT-表的位置信息。所有客户端访问用户数据前,需要首先访问Zookeeper获得-ROOT-的位置,然后访问-ROOT-表获得.META.表的位置,最后根据.META.表中的信息确定用户数据存放的位置,如下图所示。

    技术分享图片

     



    -ROOT-表永远不会被分割,它只有一个Region,这样可以保证最多只需要三次跳转就可以定位任意一个Region。为了加快访问速度,.META.表的所有Region全部保存在内存中。客户端会将查询过的位置信息缓存起来,且缓存不会主动失效。如果客户端根据缓存信息还访问不到数据,则询问相关.META.表的Region服务器,试图获取数据的位置,如果还是失败,则询问-ROOT-表相关的.META.表在哪里。最后,如果前面的信息全部失效,则通过ZooKeeper重新定位Region的信息。所以如果客户端上的缓存全部是失效,则需要进行6次网络来回,才能定位到正确的Region。

 HBase架构

 

技术分享图片

    • Master
      HBase Master用于协调多个Region Server,侦测各个RegionServer之间的状态,并平衡RegionServer之间的负载。HBaseMaster还有一个职责就是负责分配Region给RegionServer。HBase允许多个Master节点共存,但是这需要Zookeeper的帮助。不过当多个Master节点共存时,只有一个Master是提供服务的,其他的Master节点处于待命的状态。当正在工作的Master节点宕机时,其他的Master则会接管HBase的集群。
    • Region Server
      对于一个RegionServer而言,其包括了多个Region。RegionServer的作用只是管理表格,以及实现读写操作。Client直接连接RegionServer,并通信获取HBase中的数据。对于Region而言,则是真实存放HBase数据的地方,也就说Region是HBase可用性和分布式的基本单位。如果当一个表格很大,并由多个CF组成时,那么表的数据将存放在多个Region之间,并且在每个Region中会关联多个存储的单元(Store)。
    • Zookeeper
      对于 HBase 而言,Zookeeper的作用是至关重要的。首先Zookeeper是作为HBase Master的HA解决方案。也就是说,是Zookeeper保证了至少有一个HBase Master 处于运行状态。并且Zookeeper负责Region和Region Server的注册。其实Zookeeper发展到目前为止,已经成为了分布式大数据框架中容错性的标准框架。不光是HBase,几乎所有的分布式大数据相关的开源框架,都依赖于Zookeeper实现HA。



      组件高可用

      • Master容错:Zookeeper重新选择一个新的Master。如果无Master过程中,数据读取仍照常进行,但是,region切分、负载均衡等无法进行;
      • RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer;
      • Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例。

 




















以上是关于hbase简洁的主要内容,如果未能解决你的问题,请参考以下文章

只需花15分钟快速入门Hbase

带你学习不一样的Hbase|概述|核心原理

lambda高效简洁神器

Typecho Mirages - 简洁的自适应主题推荐

将空范围传递给采用一对迭代器的函数的简洁/简洁的方法是啥?

ES6/ES7 中“可选”对象键的简洁/简洁语法?