广告
返回顶部
首页 > 资讯 > 数据库 >HBase框架学习之路
  • 607
分享到

HBase框架学习之路

2024-04-02 19:04:59 607人浏览 安东尼
摘要

1 背景知识1.1 解决问题解决hdfs不支持单条记录的快速查找和更新的问题。1.2 适用情况存在亿万条记录的数据库,只有千万或者百万条记录使用RDBMS更加合适确保你的应用不需要使用RDBMS的高级特性(

1 背景知识

1.1 解决问题

解决hdfs不支持单条记录的快速查找和更新的问题。

1.2 适用情况

  • 存在亿万条记录的数据库,只有千万或者百万条记录使用RDBMS更加合适

  • 确保你的应用不需要使用RDBMS的高级特性(第二索引事务机制,高级查询语言等)

  • 足够的硬件配置,即节点数,HDFS在少于5个节点时并不会表现得很好,HBase也存在相同情况。

2 设计理念

2.1 概述

2.1.1 简介

  • 使用Java语言开发NoSQL类型的分布式数据库

  • 不支持RDBMS的一些高级特性,如事务机制,第二索引,高级查询语言等

  • 支持线性和模块化扩展,可以通过在商用机器上增加RegionServer来线性提高性能

2.1.2 HBase特性:

  • 强读写一致性:适合高速计数聚合操作

  • 自动切分数据:分布式存储数据,随着数据增长进行自动切片

  • RegionServer自动失效备援

  • 与HDFS集成

  • 支持mapReduce执行大规模并行操作

  • 提供Java Client api

  • 提供Thrift/REST API

  • 针对大容量查询优化的块缓存和Bloom Fliter

  • 可视化管理界面

2.1.3 劣势

  • WAL的重新执行速度缓慢

  • 故障恢复缓慢且复杂

  • 主压缩会引起 I/O风暴(大量的I/O操作)

2.2 设计架构

2.2.1 基础概念

概念中文解释备注举例
Table由多行组成...
Row由一个Key和一个或者多列组成

Column由列族和列限定符组成列族:列限定符 ;行与行之间的列可以相差很多
Column Family列族物理上存储多个列;为提高性能设计的;表格创建时需要置顶content
Column Qualifier列限定符列族中数据的索引表格创建时不需要指定,可以在任何时候添加content:html
Cell单元由行、列族、列限定符、值和代表版本的时间戳组成

TimeStamp时间戳用来表示数据的版本可以使用系统时间也可以自己指定

2.2.1.2 例子本例子取自官方文档

Row KeyTime StampColumnFamily contentsColumnFamily anchorColumnFamily people
"com.cnn.www"t9
anchor:cnnsi.com = "CNN"
"com.cnn.www"t8
anchor:my.look.ca = "CNN.com"
"com.cnn.www"t6contents:html = "…

"com.cnn.www"t5contents:html = "…"

"com.cnn.www"t3contents:html = "…

com.example.wwwt5contents:html: "..."
people:author: "John Doe"

说明

  1. 表格格式不是唯一和最精确的表达方式,还可以用JSON格式来表达

  2. 表格中的空白单元不会占用物理存储空间,只是概念上存在

2.2.1.3 操作

操作API注意点与版本的关系
GetTable.get返回指定行的属性;Scan的第一行若没有指定版本,则返回版本值最大(但可能不是最新的)的数据;可以通过设置MaxVersion的值修改返回的数据条数
ScanTable.scan返回满足条件的多行同上
PutTable.putKey存在则更新Key不在则插入;通过 Table.put (写缓存) 或者Table.batch (没有写缓存)默认使用系统时间;只要key、column和version相同就可以实现覆盖;插入时可以指定版本
DeleteTable.delete1.删除指定列;2.删除列的所有版本;3.删除特定列族的所有列1. 删除操作不会立刻执行,而是给该数据设置墓碑标签,在空间清理的时候再执行死亡数据和墓碑的清除工作;2.通过在 hbase-site.xml.中hbase.hstore.time.to.purge.deletes属性来设置TTL(生存时间)

说明

  1. 版本数的最大值和最小值是可以指定的,并且会影响操作

  2. 版本(时间戳)是用来管控数据的存活时间的,最好不要手动设置

2.2.1.4 局限

1)Delete操作会影响Put操作:原因在于Delete操作并不是立刻执行,而是给死亡数据设置墓碑标签,那么如果当你执行了一个Delete版本低于等于T的操作,而后有插入Put了一个版本为T的数据,此时新Put的数据也会被打上标签,那么会在系统的下一次清理工作中将打上标签的数据全部清理掉,执行查询时则会获取不到新Put的数据,如果你不手动设置版本的话,版本采用系统默认时间,则不会出现这种情况。

2)清理工作会影响查询:创建三个版本为t1,t2,t3的单元,并且设置最大版本数为2.所以当我们查询所有版本时,只会返回t2和t3。但是当你删除版本t2和t3的时候,版本t1会重新出现。显然,一旦重要精简工作运行之后,这样的行为就不会再出现。

查看更多关于数据模型的信息

2.2.2 架构

2.2.2.1 架构特点

1)主从架构
2)有三个组件:

组件名称组件主要功能
HMaster负责Region的分配和DDL操作(创建,删除表)
HRegionServerRegionServer负责数据的读写;和客户端通讯
ZooKeeper维持集群的活动状态

3)底层储存是HDFS

2.2.2.2 组件

hbase:meta:所有region的信息

1)结构:

Key

  • 格式:([table],[region start key],[region id])

Values

  • info:regioninfo (序列化HRegionInfo实例)

  • info:server (包含此Region的RegionServer的server:端口)

  • info:serverstartcode (包含此Region的RegionServer的启动时间)

2)存储位置:ZooKeeper中

HMaster:控制者

  • 分配Region:启动时分配,失效RegionServer上Region的再分配,Region切分时分配

  • 监控集群中的所有RegionServer,实现其负载均衡

  • DDL:Data Definition Language(表格的创建、删除和更新-列族的更新)

  • 管理namespace和table的元数据

  • 权限管理(ACL)

  • HDFS上的垃圾文件回收

HRegionServer:HBase实际读写者

  • 响应client的读写请求,进行I/O操作(直接绕过HMaster)

  • 与HDFS交互,管理table数据

  • 当Region的大小到达阀值时切分Region

本小节可参考Region Server详解

ZooKeeper:协调者

  • 保证集群中有且只有一个HMaster为Active

  • 存储hbase:meta,即所有Region的位置信息

  • 存储HBase中表格的元数据信息

  • 监控RegionServer状态,将RS的上下线情况汇报给HMaster

  • ZooKeeper集群本身使用一致性协议(PAXOS协议)保证每个节点状态的一致性

Region:Region是HBase数据存储和管理的基本单位

本小节可参考Region详解

2.3 相关流程

2.3.1 首次读写流程

本小节可参考Region Server详解中的首次读写流程

2.3.2 写流程

本小节可参考Region Server详解中的写流程

2.3.2 读流程

本小节可参考Region Server详解中的读流程

2.4 相关机制

2.4.1 Compaction机制(压缩合并)

2.4.1.1 次压缩

本小节可参考Region Server详解中的次压缩部分

2.4.1.2 主压缩

本小节可参考Region Server详解中的主压缩部分

2.4.2 WAL Replay机制

本小节可参考Region Server详解中的WAL Replay

2.5 版本更新内容

2.5.1 .META表 =>hbase:meta

2.5.1.1 -ROOT-和.META

在0.96.x之前是存在-ROOT-和.META两个表格来维持region的元数据

1)结构:

Key

.META. region key (.META.,,1)

Values

 info:regioninfo (hbase:meta的序列化实例)
 info:server (存储 hbase:meta的RegionServer的server:port)
 info:serverstartcode (存储 hbase:meta的RegionServer的启动时间)

2)读取region位置信息的流程

  1. 从ZooKeeper中读取-ROOT- Table所在HRegionServer

  2. 从该HRegionServer中根据请求的TableName,RowKey读取.META. Table所在HRegionServer

  3. 从该HRegionServer中读取.META. Table的内容而获取此次请求需要访问的HRegion所在的位置

  4. 访问该HRegionSever获取请求的数据

2.5.1.2 hbase:meta

本小节可参考2.2.2.2 组件中的hbase:meta和2.3 相关流程中的首次读写流程进行比较

2.5.1.3 升级的目的

1)0.96.x版本之前是参考Goole的BigTable设计的,从读取数据请求发起到真正读取到数据要经过4个步骤,Google设计BigTable的目的在于它的数据量巨大,多层的schema结构能够存储更多的Region,但是随着而来的就是访问性能的下降。
2)一般公司的数据量没有Google那么大,所以去掉-ROOT-表,留下.META(hbase:meta)表,提高Region的大小,不仅可以满足存储需求,而且访问性能得到提高。

2.5.2 HLog =>WAL

  • 0.94.x 之前HBase中的WAL实现称为HLog,存储在/hbase/.logs/目录下

  • 0.94.x之后更名为WAL,存储在/hbase/WALs/目录下

2.6 跟其他框架的联系

待续...

2.7 性能调优

待续...

2.8 高级特性

待续...

3 项目实战

3.1 入门指南

3.1.1 环境搭建

本小节可参考HBase部署入门指南

3.1.2 入门程序

本小节可参考HBase shell 练习、HBase Java API 练习、使用MapReduce操作HBase

3.2 技术难点

待续...

3.3 开发中遇到的问题

待续...

3.4 应用

3.4.1 OpenTSDB开发

待续...

4 声明

待续部分将会后期不定期更新,敬请期待。


您可能感兴趣的文档:

--结束END--

本文标题: HBase框架学习之路

本文链接: https://www.lsjlt.com/news/40313.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HBase框架学习之路
    1 背景知识1.1 解决问题解决HDFS不支持单条记录的快速查找和更新的问题。1.2 适用情况存在亿万条记录的数据库,只有千万或者百万条记录使用RDBMS更加合适确保你的应用不需要使用RDBMS的高级特性(...
    99+
    2022-10-18
  • react框架next.js学习之API 路由篇详解
    目录正文使用方式API 路由匹配API 处理API 配置边缘计算支持自定义 API注意点总结正文 next.js 作为最热门的 react 框架,不过这么久了好像国内使用率一直不太高...
    99+
    2022-11-13
  • 学习笔记-TP5框架学习笔记\(路由\)
    TP5框架简单理解 (PS:只做粗略、关键知识的记录,TP程序的开始。详情请阅读官方手册) 1. 架构总览 TP程序的开始 PHP >=5.3.0, PHP7 ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方...
    99+
    2023-10-25
    学习 php 开发语言
  • PHP之CI框架学习讲解
    一、前言 CodeIgniter 是一个简单快速的PHP MVC框架。EllisLab 的工作人员发布了 CodeIgniter。CodeIgniter 是一套小巧但功能强大的、给 ...
    99+
    2022-11-12
  • Spring框架学习之AOP详解
    目录一、概念二、底层原理:动态代理2.1 有接口, JDK 动态代理2.2 无接口, CGLIB 动态代理三、术语四、操作4.1 Spring 框架一般都是基于 AspectJ 实现...
    99+
    2022-11-12
  • python学习之路
    第一部分    使用入门1、人们选择python的六个主要原因是什么?①软件质量、开发者的效率、程序的可移植性、标准库的支持、组件集成和享受简便,其中质量和效率是选择python的主要原因。2、请列举正在使用python的四个著名公司的名字...
    99+
    2023-01-31
    之路 python
  • Spring框架学习之Cache抽象详解
    目录1.简介cache和buffer2.缓存抽象3.spring缓存抽象与多进程 官方文档  8.0 Spring为不同缓存做了一层抽象,这里通过阅读文档以及源码...
    99+
    2022-11-12
  • Python Behave框架学习
    behave是python语言的行为驱动开发,全称:Behavior-driven development,简称BDD。 BDD框架 BDD即行为驱动开发(Behavior Driv...
    99+
    2022-11-11
  • python学习之路(1)
    今天刚入门python,对于有c和java基础的我,学习起来还是比较容易的,我并没有用PyCharm写,而是最基础的IDLE,学习python比java容易的地方就是不要写分号,不要打包,不要定义等等,可能是我还学习的不够深入吧。 今天的...
    99+
    2023-01-31
    之路 python
  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-...
    99+
    2023-01-31
    之路 Python
  • python学习之路—day1
    变量:存储信息,日后被调用、修改操作. 常量:固定不变的量,字母大小写。 命名规则: 1,、字母数字下划线组成 2、命名具有代表意义的 3、不能以数字开头,特殊符号开头 4、不能以保留字命名,lg:for等 5、命名一般不以中文命名 6、...
    99+
    2023-01-30
    之路 python
  • python学习之路-01
    1.Python是一门计算机语言 2.新手入门之概念讲解:反正我一开始不懂为什么要安装python,又要安装pycharm之类的软件,程序员就比别人牛逼吗,学个语言还要安装两软件!!! 解释器:python官网安装的软件(安装步骤最...
    99+
    2023-01-31
    之路 python
  • JAVA学习之一步步搭建spring框架
    前言作为一个服务端开发感觉一直挺排斥框架这种东西的,总觉得什么实现逻辑都帮你封装在里面了,你只需要配置这配置那个,出了问题也不知道怎么排查,之前即使写web程序也宁愿使用jetty这样的嵌入式的web server实现,自己写servlet...
    99+
    2023-05-31
    搭建 spring 框架
  • 深度学习框架之MXNet怎么使用
    使用MXNet进行深度学习主要有以下几个步骤:1. 安装MXNet:可以通过pip命令进行安装,例如`pip install mxn...
    99+
    2023-09-21
    深度学习 MXNet
  • Hadoop学习之路(一)——Hadoop家族学习路线图
    主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括...
    99+
    2022-10-18
  • python编程webpy框架模板之def with学习
    目录一:模板的理解二:简单模板三:def with四:注意一:模板的理解 模板是将一个事物的结构规律予以固定化、标准化的成果。 例如:网页的组成需要是html,head,body,你...
    99+
    2022-11-12
  • Django框架基础学习
    Django安装python下载地址 http://www.python.org/download/releases/3.3.4/Django的下载地址:https://www.djangoproject....
    99+
    2022-10-18
  • Android 框架学习(4)—— HIDL
    一、HIDL定义         HIDL是用于指定HAL与其用户之间接口的一个接口描述语言(Interface Description Lan...
    99+
    2022-06-06
    学习 框架 Android
  • 如何学习Ajax 框架
    本篇文章为大家展示了如何学习Ajax 框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一.XMLHttpRequest 对象的三个重要的属性。onreadysta...
    99+
    2022-10-19
  • spring框架学习总结
    目录Spring 框架概述Spring优点Spring体系结构Spring拓展Spring Boot与Spring CloudSpring IoC 容器 (IoC 也称为依赖项注入(...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作