设为首页 加入收藏

TOP

HBase核心模块介绍及基本概念介绍(HBase模式设计)
2018-12-07 02:03:02 】 浏览:13
Tags:HBase 核心 模块 介绍 基本 概念 模式 设计
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xinpiannanhai/article/details/80585850

一、HBase与Hadoop之间的关系

Hadoop框架中的HDFS分布式文件系统为HBase提供了可靠的底层存储支持。

Hadoop框架中的MapReduce为HBase提供了高性能的计算能力。


二、HBase的核心功能模块


1.Client

Client是整个HBase系统的入口

客户端使用RPC协议与HMaster和RegionServer进行通信

对于管理类(表的增删)操作,Client与HMaster进行RPC通信

对于数据读写类操作Client与RegionServer进行RPC交互

客户端可以是多个,也可以以不同形式访问,如Java接口、HBase shell命令行、Avro等

2.Zookeeper

Zookeeper负责消息协调通信-------由雅虎公司开发出的

Zookeeper是一个高可用的分布式数据管理与系统协调框架。

Zookeeper底层基于Paxos算法的实现,使的该框架保证了分布式环境中数据的一致性。

HBase中Zookeeper实例负责协调工作{

-储存Hbase元数据信息。

-实时监控RegionServer

-储存所有Region的寻址入口

-保证HBase中只有一个HMaster节点(通过Zoookeeper的选举机制来选出HMaster)

}

3.HMaster

-管理用户对表的增删改查操作

-管理HRegionServer的负载均衡,调整Region分布

-在RegionSplit后,负责新Region的分配

-在HRegionServer停机后,负责失效

-HRegionServer上的Regions迁移


4.HRegionServer

-主要负责响应用户I/O,向HDFS读写数据,是HBase中最核心的模块。

-HRegionServer内部管理了一系列的HRegion对象

-每个HRegion对应了表中的一个Region

-HRegion中由多个Hstore组成

-每个Hstore对应了表中的一个ColumnFamily的存储。

store存储是HBase的存储核心,由两部分组成

-MemStore:用户写入的数据首先会放入MemStore,MemStore的大小为64MB

-StoreFiles:当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)

当Store File文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除

HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的

三、HBase的使用场景

存储大量的数据(>TB)

需要很高的吞吐量(如京东商城或12306购票)

大规模数据集很好性能的随机访问(按列)

需要进行优雅的数据扩展

结构化和半结构化的数据

不需要全部的关系数据库特性,例如交叉列、交叉表,事务,连接等等。

四、HBase的经典案例

搜索引擎应用

爬虫持续不断的爬取新页面存储到HBase中

在整张表上使用MapReduce计算并生成索引,供网络搜索应用使用

用户发起网络搜索请求

网络搜索应用查询简历好的索引,或者直接从HBase得到单个文档

搜索结果直接提交给用户

五、HBase的基本概念

数据模型

数据逻辑模型



数据物理模型



逻辑模型的重要概念

Table--------表

Rowkey---------行键(类似关系型数据库的主键)

Column family------------列族/列簇(HBase中列族是一些列的集合)

Timestamp----------时间戳(每个时间戳对应不同的版本)

Cell----------------单元格(通过行键、列簇和列簇名、版本号来确定具体的一个单元格内容)唯一确定,无数据类型,全部是字节码形式

单元格的内容是不可再分割的字节数组

每个单元格保存着同一份数据的多个版本

不同时间版本的数据按照时间顺序倒序排序

事务特性ACID

传统SQL数据库通常都支持ACID的强事务机制

HBase NoSQL数据库仅提供对行级别的原子性保证。

-同时对同一个key下的数据进行两个操作,在实际执行的过程中会串行操作,保证每一个keyvalue对不会被破坏

-对同一行的所有列的操作是原子性的,对于该行的Put操作要么整体成功要么整体失败。

模式设计

数据库的模式设计不是一个新概念,系统都存在模式设计问题。只要称为数据库

HBase的模式结构包括表、Rowkey、列族、Timestamp(时间戳/时间版本)

模式是一个三维有序结构,表,Rowkey,列族三个维度确定一行数据

HBase模式设计过程中需要关注的问题

-表应该有多少个列族,列族使用什么数据,每个列族应该有多少列

-列名是什么,单元应该存储什么数据,每个单元存储多少个时间版本

-行键结构是什么,应该包含哪些信息。

Rowkey-行键设计

Rowkey是不可分割的字节数,按照字典排序由低到高存储在表中

Rowkey应该基于预期的访问模式来为Rowkey建模

Rowkey决定了访问HBase表时可以得到的性能

HBase只能在Rowkey上建立索引,在不清楚Rowkey的前提下访问表,可以使用扫描全表。

-原生HBase只支持Rowkey以字典顺序从小到大

-Rowkey=Integer.MAX_VALUE-Rowkey 转换为以字典顺序从大到小的排序

-Rowkey尽量散列Rowkey设计

-保证散列,就会保证所有的数据不是在一个Region上,避免读写时负载会集中在个别Region上

-Rowkey的长度尽量短

-如果Rowkey太长,存储开销增加,影响存储效率

ColumnFamily-列族定义

列族,是一些列的集合

-一个列族的所有成员都有着相同的前缀。

在物理上,列族的成员在文件系统上都存储在一起。

多个列族在执行flush和compaction时,造成很多IO负载

-Flush和compaction操作是针对一个Region的,当一个列族操作大量数据时会引发一个flush,那些不相关的列族也要进行flush,会造成很多没用的I/O负载。

-尽量在应用中使用一个列族


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HBase与HDFS结合使用 下一篇HBase初学-增删查改

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }