hbase的服务体系遵从的是主从结构,由HRegion(服务器)-HRegionServer(服务器集群)-HMaster(主服务器)构成,
从图中能看出多个HRegion 组成一个HRegionServer,HMaster管理所有的HRegion. 所有的服务器都是通过zookeeper来进行管理和协调工作的。
HMaster并不存储hbase中的数据,hbase逻辑上的表可能会被划分成多个HRegion,存到HRegion的集群中,hbase存储的是数据到HRegion集群中的映射
HRegion
当一张表的数据超过设置的其设置的值的时候,hbase会自动将表划分成不同的区域,每一个区域包含所有行的一个子集,对于用户来说,一张表就是一个数据集,我们通过主键来区分数据。从物理上来说,一张表被分成了一个个HRegion块,我们通过表名+开始/结束 主键区分,一个HRegion会保存某一段一个表中连续数据,从开始主键到结束主键一张完整的表格式保存在多个HRegion上面的。
HRegionServer
所有的数据一般都是存在hdfs上的,用户通过HRegion来获取这些数据,一般一台机器上只运行一台HRegion服务器,而一个区段HRegion也只被一个HRegion服务器维护(一个HRegion服务器维护一个区段的HRegion,一台服务器上只有一个区段)
HRegionServer分为两大部分(HLOG和HRegion):
HLOG部分就是存储hbase的日志数据,采用先写日志的方式
HRegion里面有很多个HRegion,HRegion是存放真实数据的,HRegion里面又有很多个Store,每个Store存储的实际上是一个列族下的数据,每一个Store都有一块MemStore, MemStore是驻留在内存中的,数据进来后会先存在MemStore中,当阈值到达之后数据会再更新到StoreFile中,每个Store里面有多个StoreFile,它是最小的存储单位
Hbase中不涉及对数据的删除更新操作,他所有的更新操作都是以追加的方式进行。数据的删除和更新操作都在数据合并的时候进行,当超过Store中StoreFile的数量时候会进行数据合并,会触发数据合并操作,会把多个StoreFile合并成一个
当用户需要更新数据的时候,hbase会把数据提交对应的HRegionServer上进行修改,数据会首先提交到log日志中,在写入log之后,才会commint()调用才会返回给客户端,如果某一台HRegionServer出现故障的时候,那么它所维护的HRegion会被分配到新的HRegionServer中,log日志会根据HRegion进行划分,当新的HRegionServer在加载HRegion时候,根据log日志对数据进行数据恢复
当一个HRegion变的巨大超过其设置的阀值后,HRegionServer会调用HRegion的closeAndSpilt(),将这个HRegion拆分成两个,并报告主服务器使用哪个HRegionServer存放新的HRegion。这个过程会很快,因为原来的两个HReegion只是保留了StoreFile文件的引用,拆分的时候HRegion会处于服务停止的状态,当新的HRegion拆分完并把引用删除后,旧的HRegion才会删除。另外,两个HRegion可以通过调用HRegion.closeAndMeger()将两个HRegion合并成一个新的HRegion(有的Hbase版本在执行此操作的时候需要两台服务器都停止服务)
HMaster
每台HRegionServer都会跟HMaster进行通信,HMaster会告诉HRegionServer要维护哪些HRegion
当一台新的HRegionServer加入到HMaster服务器时,HMaster会先告诉他等待分配数,当有HRegion死机的时候,HMaster会把它分给其他的HRegionServer
如果一个Hbase可以启动多个HMaster服务,那么可是使用zookeper来保证只有一个HMaster运行
HMaster主要职责:
1:负责用户的增删改查操作
2:管理HRegionServer的负载均衡,分配HRegion
3:在HRegion分裂后,负责分配新的HRegion
4:在HRegion失效后,对失效的HRegion进行迁移
ROOT表和META表
ROOT表(根数据表):存储的是所有HRegion的元数据信息,并且这个表的数据不能分割,只存在一个HRegion。
META表(元数据表):存的是HRegion和HRegionServer的映射关系
区分HRegion一般使用 表名+主键范围,HRegion里面存储的是连续的数据,所以一般使用主键就可以确定HRegion,但是HRegion有合并,分割的操作,有可能在进行这个操作的时候出现死机,这时就有可能出现多份相同的主键和表名的数据。这个时候使用 主键+表名就不能确定哪个HRegion了。
HRegion的区分方式最好使用 表名+主键+唯一id(regionID),这些数据就是元数据,元数据本身是存在HRegion里,META表存的是HRegion和HRegionServer的映射关系。元数据也会不停的增长,为了定位这些元数据表的位置,我们把元数据表的位置放在ROOT表中,这个表存放所有元数据表的位置,这个表是不被分割的。
Hbase在启动的时候主服务器会先扫描root表,(因为这个表只有一个 HRegion,所以HRegion的名字是写死的)将表分配 给对应的HRegion。
当root表被分配好以后,就会读取元数据表的名字和元数据表的位置,然后把元数据表(metaTable)分配给不同的HRegionServer,然后再读取元数据表,找到HRegion的区域信息,分配给不同的HRegionServer
元数据表和跟数据表的每一行都包含一个列族
所以,当客户端拿到根数据表时,就不需要再访问主服务器了。因为,root表包含所有meta表的位置,meta表包含所有用户的空间区域列表和HRegionServer的位置,客户端可以缓存已知所有的root表和meta表。主服务器就负责超时的HRegion,就只在hbase启动的时候扫描root表和meta表,以及返回root表的HRegionServer位置
zookeeper
zookeeper里存储的是root表和meta表 的位置,每台机器都会在zookeeper中注册一个实例,zookeeper就会监控这些机器的状态,当某一台机器出现故障时,zookeeper会第一个感知,然后告诉hMaster然后进行相关处理,zookeepe还负责hMaster的恢复工作,并保证在同一时刻,只有一个hMaster提供服务。
- Hadoop中Hbase的体系结构
HRegion 当一张表中的数据特别多的时候,HBase把表拆成多个块,每个块就是一个HRegion,每个region中包含这个表里的所有行 HRegionServer 数据库的数据存在HDFS文件系 ...
- HBase的体系结构
- Hbase Java API详解
HBase是Hadoop的数据库,能够对大数据提供随机.实时读写访问.他是开源的,分布式的,多版本的,面向列的,存储模型. 在讲解的时候我首先给大家讲解一下HBase的整体结构,如下图: HBase ...
- HBase基础和伪分布式安装配置
一.HBase(NoSQL)的数据模型 1.1 表(table),是存储管理数据的. 1.2 行键(row key),类似于MySQL中的主键,行键是HBase表天然自带的,创建表时不需要指定 1.3 ...
- Hadoop 面试题之Hbase
Hadoop 面试题之九 16.Hbase 的rowkey 怎么创建比较好?列族怎么创建比较好? 答: 19.Hbase 内部是什么机制? 答: 73.hbase 写数据的原理是什么? 答: 75.h ...
- Hadoop之——HBase注意事项
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46447573 1.HBase(NoSQL)的数据模型 1.1 表(table) 存 ...
- 分布式存储系统-HBASE
简介 HBase –Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBse技术可在廉价PC Server上搭建起大规模结构化存储集群.HBase利用Had ...
- HBase、MongoDB、cassandra比较
前言 传统数据库遇到的问题,数据量很大的时候无法存储:没有很好的备份机制:数据达到一定数量开始缓慢,很大的话基本无法支撑:因此我们需要探究更加合适的数据库来支撑我们的业务. HBase 什么是HBas ...
- hbase总结~hbase配置和使用
Base配置和使用文档......................................................................................... ...
随机推荐
- A couple of notes about .NET Framework 4.6 setup behaviors
https://blogs.msdn.microsoft.com/astebner/2015/06/17/a-couple-of-notes-about-net-framework-4-6-setup ...
- MySQL 代码开发注意事项----开发高性能的sql
序言 一个服务或者一个程序,由 程序+数据组成.在数据这块,计算机中IO是比CPU要慢得多,为了减少IO,减少CPU运算.我们第一时间会想到索引,但索引为啥会提高效率,因为可以减少IO,在查询的时候不 ...
- 笔记:程序内存管理 .bss .data .rodata .text stack heap
1.未初始化的全局变量(.bss段) bss段用来存放 没有被初始化 和 已经被初始化为0 的全局变量.如下例代码: #include<stdio.h> int bss_array[102 ...
- DHCP
安装 yum install -y dhcp 配置文件 默认配置为/etc/dhcpd.conf [root@samba ~]# [root@samba ~]# rpm -ql dhcp | grep ...
- jQuery EasyUI Combobox 无法获取属性 options 的值: 对象为 null 或未定义
错误的写法: $('#combobox1').combobox({ valueField: 'id', textField: 'text',data:[{id:1,text:'蚂蚁小羊'}]}); 正 ...
- permission denied to create extension "hstore"解决方案
首先 sudo -u postgres psql postgres 进入数据库后输入命令 ALTER USER mydb_user WITH SUPERUSER; (把某个用户设置为超级 ...
- 关于TCP中的MSS
MSS 是TCP选项中最经常出现,也是最早出现的选项.MSS选项占4byte.MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的头部.TCP在三次握手中,每一方都 ...
- Android ActionBar 初探
1.指南,例子,个人感觉 首先上官网指南链接http://developer.android.com/guide/topics/ui/actionbar.html 参考了官网上的例子http://de ...
- 使用SVG绘制湖南地图
项目中有需求使用SVG绘制湖南地图,现把自己制作过程写一下供大家参考. 1.首先准备一张湖南地图(仅有各市边界线即可).(图片最好是PNG的,除了地图其它什么也没有) 2.准备SVG编辑工具SVGDe ...
- C++中有关数组的相关问题
1.数组长度相关: strlen(from <string.h>)只是针对字符数组才有的,他不包含\0的长度.无法对其他类型求长度.sizeof()则可以对\0发起作用.记住(a.leng ...