首页 > 其他分享 >HBase 学习

HBase 学习

时间:2024-03-27 23:47:37浏览次数:20  
标签:存储 列族 Region 学习 RegionServer Master HBase

HBase 基本概念

HBase 的存储是基于 Hadoop 的。Hadoop 实现了一个分布式文件系统(HDFS)。HDFS 有高容错性的特点,被设计用来部署在低廉的硬件上,而且它提供高吞吐量以访问应用程序的数据,适合那些有着超大数据集的应用程序。基于 Hadoop 意味着 HBase 与生俱来的超强的扩展性和吞吐量。

HBase 采⽤的是Key/Value 的存储⽅式,这意味着,即使随着数据量增⼤,也⼏乎不会导致查询的性能下降。HBase 又是⼀个列式数据库(对⽐于传统的⾏式数据库⽽⾔)

当你的表字段很多的时候,你甚⾄可以把其中⼏个字段放在集群的⼀部分机器上,⽽另外⼏个字段放到 另外⼀部分机器上,充分分散了负载压⼒。然⽽,如此复杂的存储结构和分布式的存储⽅式带来的代价就是:哪怕只是存储少量数据,它也不会很快。

建议使用HBase的情况是:

  • 单表数据量超千万,⽽且并发还挺⾼。
  • 数据分析需求较弱,或者不需要那么灵活或者实时。

HBase 的部署架构

从 HBase 的部署架构上来说,HBase 有两种服务器:Master 服务器和 RegionServer 服务器。⼀般⼀个 HBase 集群有⼀个 Master 服务器和⼏个 RegionServer 服务器。Master 服务器负责维护表结构信息,实际的数据都存储在 RegionServer 服务器上。
image

HBase 有⼀点很特殊:客户端获取数据由客户端直连 RegionServer 的,所以Master挂掉之后依然可以查询数据,但就是不能新建表了。

RegionServer 是直接负责存储数据的服务器。RegionServer 保存的表数据直接存储在 Hadoop的HDFS上

image

RegionServer ⾮常依赖 ZooKeeper 服务,可以说没有 ZoOKeeper 就没有HBase。 ZooKeeper在 HBase 中扮演的⾓⾊类似⼀个管家。ZooKeeper 管理了 HBase 所有 RegionServer 的信息,包括具体的数据段存放在哪个 RegionServer 上。客户端每次与HBase 连接,其实都是先与 ZooKeeper 通信,查询出哪个 RegionServer 需 要连接,然后再连接 RegionServer。因此,以上的架构又可以拓展成
image

Region 是什么

Region 就是⼀段数据的集合。HBase 中的表⼀般拥有⼀个到多个 Region。Region 有以下特性:

  • Region 不能跨服务器,⼀个 RegionServer 上有⼀个或者多个 Region。
  • 数据量⼩的时候,⼀个Region⾜以存储所有数据;但是,当数据量⼤的时候,HBase 会拆分 Region。
  • 当HBase 在进⾏负载均衡的时候,也有可能会从⼀台 RegionServer 上把 Region 移动 到另⼀台 RegionServer 上。
  • Region 是基于 HDFS 的,它的所有数据存取操作都是调⽤了 HDFS 的客户端接⼜来实现的。

RegionServer 是什么

RegionServer 就是存放 Region 的容器,直观上说就是服务器上的⼀个服务。⼀般来说,⼀个服务器只会安装⼀个 RegionServer 服务,不过你实在想在⼀个服务器上装多个RegionServer 服务也不是不可以。当客户端从 ZooKeeper 获取 RegionServer 的地址后,它会直接从 RegionServer 获取数据。

Master 是什么

Master 只负责各种协调⼯作(其实就是打杂),⽐如建表、删表、移动 Region、合并等 操作。它们的共性就是需要跨 RegionServer,这些操作由哪个 RegionServer 来执⾏都不合适,所以 HBase 就将这些操作放到了 Master 上了。这种结构的好处是⼤⼤降低了集群对 Master 的依赖。⽽ Master 节点⼀般只有⼀个到两个,⼀旦宕机,如果集群对 Master 的依赖度很⼤,那么就会产⽣单点故障问题。在HBase 中,即使 Master 宕机了,集群依然可以正常地运⾏,依然可以存储和删除数据。

存储架构

最基本的存储单位是列(column),⼀个列或者多个列形成⼀⾏(row)。传统数据库是严格的⾏列对齐。⽐如这⾏有三个列a、b、c,下⼀⾏肯定也有三个列a、b、c。⽽在HBase中,这⼀⾏有三个列a、b、c,下⼀个⾏也许是有4个列a、e、f、g。在HBase 中,⾏跟⾏的列可以完全不⼀样,这个⾏的数据跟另外⼀个⾏的数据也可以存储在不同的机器上,甚⾄同⼀ ⾏内的列也可以存储在完全不同的机器上!每个⾏(row)都拥有唯⼀的⾏键(row key)来标定这个⾏的唯⼀性。每个列都有多个 版本,多个版本的值存储在单元格(cell)中。若⼲个列又可以被归类为⼀个列族。

image

行键

这个 rowkey 完全是由用户指定的⼀串不重复的字符串,这个指定的 row key是会直接决定这个row的存储位置的。HBase 中⽆法根据某个 column 来排序,系统永远是根据rowkey 来排序的。因
此,rowkey 就是决定 row 存储顺序的唯⼀凭证。⽽这个排序也很简单:根据字典排序。

如果在插入 HBase 的时候,使用了已存在的 rowkey,那么新的记录会把旧的记录更新掉,之前存在的值将会放到这个单元格的历史记录中,需要带上版本参数才能找到这个值。

⼀个列上可以存储多个版本的单元格。单元格就是数据存储的最⼩单元。

列族

在HBase 中,若⼲列可以组成列族(column family)。

建表的时候是不需要制定列的,因为列是可变的,它⾮常灵活,唯⼀需要确定的就是列族。 这就是为什么说⼀个表有⼏个列族是⼀开始就定好的。此外,表的很多属性,⽐如过期时间、 数据块缓存以及是否压缩等都是定义在列族上,⽽不是定义在表上或者列上。这⼀点做法跟以往的数据库有很⼤的区别。同⼀个表⾥的不同列族可以有完全不同的属性配置,但是同⼀个列族内的所有列都会有相同的属性,因为他们都在⼀个列族⾥⾯,⽽属性都是定义在列族上的。⼀个没有列族的表是没有意义的,因为列必须依赖列族⽽存在。

在HBase 中⼀个列的名称前⾯总是带着它所属的列族。列名称的规范是列族:列名,⽐如brother:age、brother:name、parent:age、parent:name。

列族存在的意义是:HBase 会把相同列族的列尽量放在同⼀台机器上,所以说,如果想让某⼏个列被放到⼀起,你就给他们定义相同的列族。

⼀个表要设置多少个列族⽐较合适?官⽅的建议是:越少越好,因为 HBase 并不希望⼤家指定太多的列族。为什么?因为没有必要,虽然 HBase 是分布式数据库,但是数据在同⼀台物理机上依然会加速数据的查询过程。所以请根据实际需要来指定列族,列族太多会极⼤程度地降低数据库性能;

Region 与行的关系

⼀个 Region 就是多个⾏的集合。在Region 中⾏的排序按照⾏键排序

与传统的关系型数据库对比

传统关系型数据库,其中每个⾏都是不可分割的,也就是说三个列必须在⼀起,⽽且要被存储在同⼀台机器上, 甚⾄是同⼀个⽂件⾥⾯。

image

HBase,HBase 中的每⼀个⾏都是离散的。因为有列族的存在,所以⼀个⾏⾥⾯的不同列甚⾄被分配到了不同的服务器上。⾏的概念被减弱到只有⼀个抽象的存在。在实体上,把多个列标定为⼀个⾏的关键词是 rowkey,这也是⾏这个概念在 HBase 中的唯⼀体现。在 HBase 中,每⼀个存储语句都必须精确地写出数据是要被存储到哪个单元格,⽽单元格是由表:列族:⾏:列来定义的。翻译过来就是你要精确地写出数据要被存储到哪个表的哪个列族的哪个⾏的哪个列。如果⼀⾏有10列,那存储⼀⾏的数据得写10⾏的语句;⽽在传统数据 库中存储语句(insert 语句)可以把整个⾏的数据⼀次性写在⾏语句⾥⾯。

image

标签:存储,列族,Region,学习,RegionServer,Master,HBase
From: https://www.cnblogs.com/panxianhao/p/18100571

相关文章

  • 毕业设计:基于深度学习的电影属性抽取及情感分析系统
    前言  ......
  • 毕业设计:基于深度学习的农作物病虫害识别系统 深度卷积 人工智能 机器视觉
    目录前言设计思路一、课题背景与意义二、算法理论原理2.1卷积神经网络2.2YOLOv5s算法三、检测的实现3.1数据集3.2实验环境搭建3.3实验及结果分析最后前言    ......
  • 毕业设计:基于深度学习的流动摊贩检测系统 人工智能 python
    目录前言一、课题背景与意义二、算法理论技术2.1目标检测算法2.2注意力机制三、模型训练3.1数据处理3.2实验环境3.3结果分析最后前言 ......
  • 关于RCE(远程代码执行漏洞)的学习1
            原理:因为应用系统给了用户提供指定的远程命令的操作,常见的比如:路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面,用户通过从这些界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。因此,如果设计者......
  • 学习java时候的笔记(四)
    数组什么是数组?数组指的是一种容器,可以用来储存同种数据类型的多个值一维数组一维数组的定义:格式1数据类型[]数组名例:int[]array格式2数据类型数组名[]例intarray[]一维数组的静态初始化初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中......
  • Flask学习记录-pipenv虚拟环境搭建
    python环境$python-VPython3.9.181.安装pipenv$pipinstallpipenv-ihttps://pypi.tuna.tsinghua.edu.cn/simple$pipenv--versionpipenv,version2023.12.12.创建虚拟环境[flask-test1]$pipenvinstallCreatingavirtualenvforthisproject...Pipfile:/us......
  • salesforce零基础学习(一百三十五)项目中的零碎知识点小总结(七)
    本篇参考:https://trailhead.salesforce.com/content/learn/modules/flow-implementation-2/debug-flows-as-another-userhttps://developer.salesforce.com/docs/platform/lwc/guide/create-components-dom-work.html?q=ref#refshttps://developer.salesforce.com/docs/platfo......
  • 综合架构--9--工作防火墙使用学习--38
    综合架构--9--工作防火墙使用学习--38防火墙--学习笔记防火墙分类:硬件:华为思科深信服软件:Windows:360电脑管家金山毒霸linux:firewalldiptables防火墙的作用:隔离严格过滤出站入站firewalld设计流程定义不同区域每个区域制定自己配置通过的......
  • ssm框架学习总结
    SSM框架的定义SSM框架是spring、springMVC、和mybatis框架的整合,是标准的MVC模式。标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层。pojo层PlainOrdinaryJavaObject,也有人称其为model、domain、bean等,pojo层是对应的数据库表的实体类。持久......
  • Java学习路线
    Java学习路线可以分为几个阶段,每个阶段都有其特定的学习目标和内容。以下是一条详细的Java学习路线:###阶段1:Java入门-**目标**:培养兴趣、快速上手。-**前期准备**:准备好在线编程工具,如菜鸟工具,以及记笔记软件,如Typora。-**Java编程基础**(约45天): -Java特点、环......