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提供服务。
 
 
 
 
 
 
 

hbase 的体系结构的更多相关文章

  1. Hadoop中Hbase的体系结构

    HRegion 当一张表中的数据特别多的时候,HBase把表拆成多个块,每个块就是一个HRegion,每个region中包含这个表里的所有行 HRegionServer 数据库的数据存在HDFS文件系 ...

  2. HBase的体系结构

  3. Hbase Java API详解

    HBase是Hadoop的数据库,能够对大数据提供随机.实时读写访问.他是开源的,分布式的,多版本的,面向列的,存储模型. 在讲解的时候我首先给大家讲解一下HBase的整体结构,如下图: HBase ...

  4. HBase基础和伪分布式安装配置

    一.HBase(NoSQL)的数据模型 1.1 表(table),是存储管理数据的. 1.2 行键(row key),类似于MySQL中的主键,行键是HBase表天然自带的,创建表时不需要指定 1.3 ...

  5. Hadoop 面试题之Hbase

    Hadoop 面试题之九 16.Hbase 的rowkey 怎么创建比较好?列族怎么创建比较好? 答: 19.Hbase 内部是什么机制? 答: 73.hbase 写数据的原理是什么? 答: 75.h ...

  6. Hadoop之——HBase注意事项

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46447573 1.HBase(NoSQL)的数据模型 1.1 表(table) 存 ...

  7. 分布式存储系统-HBASE

    简介 HBase –Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBse技术可在廉价PC Server上搭建起大规模结构化存储集群.HBase利用Had ...

  8. HBase、MongoDB、cassandra比较

    前言 传统数据库遇到的问题,数据量很大的时候无法存储:没有很好的备份机制:数据达到一定数量开始缓慢,很大的话基本无法支撑:因此我们需要探究更加合适的数据库来支撑我们的业务. HBase 什么是HBas ...

  9. hbase总结~hbase配置和使用

    Base配置和使用文档......................................................................................... ...

随机推荐

  1. iife js

    摘自:http://dz.sdut.edu.cn/blog/subaochen/2016/02/%E8%AF%B4%E4%B8%80%E8%AF%B4js%E7%9A%84iife/ 1 定义 IIF ...

  2. 【总结】使用WebBrowser遇到的陷阱

    一.前言 一直想用WebBrowser做一些好玩的东西,比如抓取分析感兴趣的网站页面.自动点击提交页面等,所以最近在研究WebBrowser.WebBrowser的功能十分强大,就是一个微型的Brow ...

  3. 12,13 Proxy和Reflect

    Proxy和Reflect Proxy(代理) Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程 ...

  4. laypage分页

    1.分页 laypage({ cont:$("#page"), //容器,仅支持id名\原生DOM对象,jquery对象 pages:, //总页数 skip:true, //是否 ...

  5. 二、基于hadoop的nginx访问日志分析---计算日pv

    代码: # pv_day.py#!/usr/bin/env python # coding=utf-8 from mrjob.job import MRJob from nginx_accesslog ...

  6. coreseek安装过程

    一.sphinx 全文检索 通过sphinx检索到id,然后到mysql里面拿到记录 什么是劝我呢检索?结构化数据: 具有固定格式或者长度的数据非结构化数据: 标题 内容 等不定长的数据非机构化数据还 ...

  7. word转化jpg

    用画图复制粘贴word内容,然后保存为jpg  即可~亲测可行,比截图清洗太多.

  8. diff生成补丁与patch打补丁

    1.使用diff生成补丁: diff是Linux下的文件比较命令,参数这里就不说了,直接man一下就行了,不仅可以比较文件,也可以比较两个目录,并且可以将不同之处生成补丁文件,其实就是一种打补丁的命令 ...

  9. PowerDesigner连接Oracle并导出表结构

    环境:Oracle 11G(远程) + win32_11gR2_client + PowerDesigner 15 一.下载.安装.配置 1.下载地址 win32_11gR2_client客户端下载地 ...

  10. 101 LINQ Samples

    https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b