ITPub博客

首页 > 大数据 > Hadoop > Hbase初探

Hbase初探

原创 Hadoop 作者:541732025 时间:2014-03-10 11:58:52 0 删除 编辑
鉴于在HDFS中数据是不能修改的,所以,以此为基础的hbase的数据也只能永远insert,就算是删除数据,也是插入一条带有删除标记的新数据。

一,行健
行健是数据行在表里的唯一标示,并作为检索记录的主键
访问表里的行只有3种方式
1,通过单个行健访问
2,给定行健的范围范围
3,全表扫描
行健可以是最大长度不超过64KB的任意字符串。

二,列族与列
列表示为 <列族>:<限定符>,列族在定义表时就必须定义,但是限定符,也就是列名可以后来指定
Hbase在磁盘上按照列族来存储数据,这种列式数据库非常适合数据分析的情形

三,时间戳
可系统自动生成,也可用户指定
Hbase支持两种数据版本回收方式
1,每个数据单元,只存储指定个数的最新版本
2,保存指定时间长度的版本(例如7天)

元素由行健,列族:限定符,时间戳唯一决定
元素以字节码形式存放,没有类型之分

四,Hbase物理模型:


1,Hmaster,总控节点,管理一个或多个regionServer,负责启动、安装、把区域分配给注册的regionServer、恢复regionServer故障。类似于namenode在HDFS中的作用。
2,zookeeper负责调度
3,region与regionServer
表在行方向上按照行健范围划分成若干region,每个表最初只有一个region,当记录数增加到某个阈值时,开始分裂成两个region
regionServer:负责零个或多个区域的管理以及相应客户端的读写请求,以及区域的划分,并通知Hmaster有了新的子区域,这样主控机就可以把父区域设为离线,并用子区域替换父区域。一般一个物理节点跑一个regionServer,但是regionServer可以管理多个region,每个region可以是不同表的region
region包括Hlog日志和存放数据的store
Hlog:用于灾难恢复等,类似于oracle中的日志。预写式日志,记录所有更新操作先进日志,数据才会写入。Hlog存放在HDFS中,因此即使regionServer崩溃,提交日志仍然可用。
当regionServer不能访问,通常因为服务器的znode在zookeeper中过期了,Hmaster会根据区域对死掉的regionServer的提交日志进行分割。再重新分配后,在打开并使用死掉的regionServer上区域之前,这些区域会找到刚分割得到的文件,包括还没持久化存储的更新。这些更新会被“重做”是区域恢复到服务器失败前夕状态。
Store:每一个列族一个store(非常关键!),这就要求hbase的数据是稀疏的,即数据只集中在某个列族里面,而不是每个列族都会有值。(假如一行数据多个列族都有值,那么该行数据会分散在不同的store里面)
store可以分为memstore(内存)、storefile(硬盘)
到达regionServer的写操作首先会追加到Hlog,然后写入memstore,当memstore中数据足够多的时候,regionServer会启动flashcache进程把数据往storefile中写,不断重复,硬盘中就会产生许多小的storefile,每过一段时间,会触发hbase的一个合并进程,把小的storefile合并成大的storefile,在此过程中,会把删除的行,以及过期的行过滤掉。
当storefile大小超过一定阈值后,会把当前region分割为两个,并由Hmaster分配到相应的regionServer,实现负载均衡
客户端查找数据时,先在memstore中找,找不到再找storefile


4,hbase与hadoop的关系:
storefile对应Hfile,hfile其实就是hdfs中的文件,hfile又是分布式的,分散在不同的物理节点里面。

5,怎么定位region?
-ROOT-和.META.表
META表记录每张表用户表的region信息,META表可以有多个region
ROOT表记录META表的region信息,ROOT表只有一个region
zookeeper中记录了ROOT表的location
表中的项使用区域名作为建。区域名由由所属表名、区域起始行、区域的创建时间以及对其整体进行MD5哈希值组成。
由于表的键是排序的,因此,要查找特定行所在的区域只要在目录表中找到第一个键大于或等于给定行健即可。
区域变化时(分裂、禁用、regionServer崩溃),目力表会进行更新。

每个行操作可能要访问3次远程节点,为了节省这些代价,客户端会缓存它们遍历-ROOT-时获取的信息和.META.位置以及用户空间区域的开始行和结束行。
客户端在碰到错误之前一直会使用缓存的项,当错误发生时,即区域被移动了,客户端会再去查看.META.获取区域的新位置,如果.META.区域也被移动了,客户端会再去查看-ROOT-


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28912557/viewspace-1104460/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 一致性哈希算法
下一篇: zookeeper初探
请登录后发表评论 登录
全部评论

注册时间:2013-05-23

  • 博文量
    127
  • 访问量
    482615