Hbase初探

作者: 田真的架构人生 | 来源:发表于2017-08-16 09:35 被阅读0次

鉴于在HDFS中数据是不能修改的,所以,以此为基础的hbase的数据也只能永远insert,就算是删除数据,也是插入一条带有删除标记的新数据。

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

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

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

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

四,Hbase物理模型:


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


Hbase初探
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-


Hbase初探

相关文章

  • Hbase初探

    鉴于在HDFS中数据是不能修改的,所以,以此为基础的hbase的数据也只能永远insert,就算是删除数据,也是插...

  • Hbase初探

    背景 由于项目需求数据本地话保存,而且数据主要为json格式的大块非结构化数据,并且线上情况以每日50G的速度在增...

  • HBase golang初探

    最近要进行大数据相关的任务,牛刀小试,先将最基础的HBase搭建并实践起来。本文借用docker,快速搭建HBas...

  • HBase 监控 | HBase Metrics 初探(一)

    前言:对于任意一个系统而言,做好监控都是非常重要的,HBase也不例外。经常,我们会从JMX中获取相关指标来做展示...

  • HBase结合Phoenix使用初探

    hbase命令帮助: hbase的create以及put命令帮助: 创建二级索引 有了索引表之后,直接在hbase...

  • HBase 初探:架构 + 原理 + 对比 + 实践

    因为工作需要使用 HBase,因此调研了 HBase 相关的内容。本文的写作目的不仅仅是对前期工作的总结,也希望能...

  • Hbase运行机制

    本文思路 Hbase是什么 Hbase的优劣 Hbase架构 Hbase容错 Hbase使用总结 HBase是什么...

  • 苹果 ARKit 初探

    苹果 ARKit 初探 苹果 ARKit 初探

  • 数据存储-Hbase基础

    Outline 什么是Hbase 为什么需要Hbase Hbase的基础概念 Hbase的架构 Hbase的读写操...

  • HBase集群的搭建

    HBase集群搭建 HBase官网:http://hbase.apache.org/[http://hbase.a...

网友评论

    本文标题:Hbase初探

    本文链接:https://www.haomeiwen.com/subject/lrnbrxtx.html