hbase简洁
Posted hollowcabbage
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hbase简洁相关的知识,希望对你有一定的参考价值。
Hbase概述
HBase是什么?
- HBase是一个构建在HDFS上的分布式列存储系统
- HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储
- 从逻辑上讲, 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物理模型
- 每个column family存储在HDFS上的一个单独文件中
- Key 和 Version number在每个 column family中均由一份
- 空值不会被保存
- 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上。
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简洁的主要内容,如果未能解决你的问题,请参考以下文章