HBase存储结构、基本架构和shell操作

news2024/11/23 12:34:00

文章目录

  • 一、HBase简介
    • 1.1、HBase定义
    • 1.2、HBase的存储结构
    • 1.3、HBase基本架构
  • 二、HBase Shell操作
    • 2.1、基本操作
    • 2.2、namespace
    • 2.3、DDL
    • 2.4、DML

一、HBase简介

1.1、HBase定义

HBase是一个开源的分布式NoSQL数据库,它是Apache Hadoop项目的一部分,使用Hadoop的HDFS作为底层存储。

1.2、HBase的存储结构

  1. Name Space

命名空间,类似于关系型数据库中的database概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是:hbase和default,hbase中存放的是HBase内置表,default表是用户默认使用的命名空间。

  1. Table

表格,HBase中的数据以表格的形式组织,每个表格由多行和多列组成,其中每行数据都有唯一的行键(Row Key)。

  1. Row Key

行键,是HBase表格中每行数据的唯一标识符,行键是一个字节数组,长度不限制。

  1. Cloumn Family

列族,是一组有相关性的列的集合,它们共享相同的前缀,并被存储在相同的物理位置上。在创建表格时必须指定列族,并为每个列族指定一个唯一的名称,通常以字符串形式表示。

  1. Cloumn Qualifier

列限定符,是列族中每个列的唯一标识符,它们共享相同的列族前缀,以字节数组的形式存储。

  1. Cell

单元格,是表格中的最小数据单元,它由行键、列族、列限定符和时间戳四个维度组成,时间戳制定了单元格数据的版本信息。

  1. Version

版本,每个单元格可以存储多个版本的数据,每个版本都有一个时间戳,HBase默认按照时间戳降序排列版本,最新版本在最前面。

  1. Block

块,HBase中的数据存储都是按照块进行的,每个块包含多个行,每个块的大小由HBase的配置参数决定。
HFile块的大小默认值为:64MB。可以通过HBase配置文件中的“hbase.regionserver.hstore.blockingStoreFiles”参数进行配置,该参数的值表示每个存储区域中允许的最大HFile块数量。
还可通过Hadoop配置文件中的“hdfs.blocksize”参数来进行调整HFile块大小。

关于Table、Cloumn Family、Cloumn Qualifier、Row Key在表中结构如图:
在这里插入图片描述

1.3、HBase基本架构

在这里插入图片描述

  • HMaster:HBase的主节点,负责管理元数据信息和协调整个HBase集群的操作。HMaster通常运行在一个单独的节点上,会跟踪所有的RegionServer,处理RegionServer的加入、退出和故障转移等事件,并管理HBase表的创建、删除、分裂和合并等操作。
  • ZooKeeper:HBase集群的协调服务,用于协调分布式计算和存储节点的状态信息和元数据。ZooKeeper提供了分布式锁、选举和协调等基础服务,可以用于实现HBase集群的高可用性和可靠性。
  • HRegionServer:HBase的数据节点,负责存储和管理HBase表的数据,每个HRegionServer通常管理多个Region,每个Region负责存储表中的一部分数据。HRegionServer接收来自客户端的读写请求,处理请求后返回结果。若是其中一个HRegionServer发生故障,它所管理的Region会被重新分配到其他的RegionServer上,以确保数据的可用性和可靠性。
  • HRegion:HBase表的基本单元,负责存储表中的一部分数据。每个Region都是一个连续的行键范围,可以包含多个HFile。当表数据增加或者Region的大小到达一定阈值时,Region会自动进行拆分或者合并,已实现负载均衡和数据的平衡分布。
  • HStore:HRegion的物理存储单元,用于管理单个Region的数据存储和读写操作,每个Region都由一个或多个HStore组成,每个HStore实际上是一个Map,用于存储Region中的一部分数据。HStore中的数据以列族为单位进行组织,不同的列族存储在不同的HStore中,每个列族又包含多个列。在HStore中,数据以字节数组的形式进行存储,支持按行键和列进行快速随机访问。
  • StoreFile:StoreFile是HBase的存储文件格式,用于存储每个HStore中的数据。每个StoreFile都包含多个块(Block),每个块都包含若干行数据。每个StoreFile都对应一个HFile。

二、HBase Shell操作

2.1、基本操作

# 进入HBase客户端
hbase shell
# 查看帮助命令
help
# 查看命令如何使用
help '具体命名'

2.2、namespace

# 查看所有的命名空间
list_namespace
# 查看xsqone下的表
list_namespace_tables 'xsqone'
# 创建命名空间xsqone
create_namespace 'xsqone'
# 删除命名空间xsqone
drop_namespace 'xsqone'

2.3、DDL

# 在xsqone创建表student,列族为'studentInfo','schoolInfo'
create 'xsqone:student','studentInfo','schoolInfo'
# 查看表详情
desc/describe 'xsqone:student'
# 禁用student表
disable 'xsqone:student'
# 启用student表
enable 'xsqone:student'
# 查看student表是否禁用或启用
is_enabled 'xsqone:student'   (true为启用,false为禁用)
is_disabled 'xsqone:student'	(true为禁用,false为启用)
# 删除student表(前提需先禁用)
disable 'xsqone:student'
drop 'xsqone:student'
# 新增列族familyInfo
alter 'xsqone:student','familyInfo'
# 删除列族familyInfo
alter 'xsqone:student',{NAME=>'familyInfo',METHOD=>'delete'}
# 更改schoolInfo列族存储限制
alter 'xsqone:student',{NAME=>'schoolInfo',VERSIONS=>3}

2.4、DML

# 写入数据
put 'xsqone:student','row1','studentInfo:name','zs'
put 'xsqone:student','row1','studentInfo:age','18'
put 'xsqone:student','row1','schoolInfo:name','qh'
put 'xsqone:student','row1','schoolInfo:address','bj'
# 修改数据也是使用put,是进行覆盖
# 修改schoolInfo:name
put 'xsqone:student','row1','schoolInfo:name','bd'
# 读取数据,可以使用get和scan两种方式来读取
# get一条数据
get 'xsqone:student','row1'
# get具体列
get 'xsqone:student','row1',{COLUMN=>'studentInfo:name'}
# scanscan 是扫描数据,能够读取多行数据,不建议扫描过多的数据,推荐使用 startRow 和stopRow 来控制读取的数据,默认范围左闭右开
scan 'xsqone:student',{COLUMNS=>'studentInfo:name',STARTROW=>'rowkey2',STOPROW=>'rowkey4'}
# 扫描value为q的行列(模糊查询)
scan 'bigdata:student',FILTER=>"ValueFilter(=,'substring:q')"
# 扫描value为bj的行列
scan 'bigdata:student',FILTER=>"ValueFilter(=,'binary:bj')"
# ColumnPrefixFilter(列前缀过滤器)列以birth开头的
scan 'bigdata:student',FILTER=>"ColumnPrefixFilter('add')"
# 删除数据
# delete表示删除一个版本的数据,即为 1 个 cell,不填写版本默认删除最新的一个版本
delete 'xsqone:student','row1','schoolInfo:name'
# deleteall 表示删除所有版本的数据,即为当前行当前列的多个 cell
deleteall 'xsqone:student','row1','schoolInfo:name'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营 day56 | 动态规划 647. 回文子串 516.最长回文子序列

day56647 回文子串1.确定dp数组(dp table)以及下标的含义2.确定递推公式3,dp数组如何初始化4.确定遍历顺序5.举例推导dp数组516 最长回文子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化…

【H2实践】之 SpringBoot 整合

目标 本文紧接上篇【H2实践】之认识 H2,上篇简单介绍了 H2 及其使用,本文继上篇,探索 H2 与 SpringBoot 的整合。 主要实现目标: 1、SpringBoot 连接 H2 内存数据库,并对数据库进行管理。 2、访问 H2 Console 客户端…

Pytest 自动化测试框架

Pytest和Unittest测试框架的区别? 如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上格式会更加复杂;而pytest框架作为第三方框架&#x…

52癫痫发作预测的有效双自注意力残差网络

Effective dual self-attentional residual networks for epileptic seizure prediction 摘要 癫痫发作预测作为慢性脑疾病中最具挑战性的数据分析任务之一,引起了众多研究者的广泛关注。癫痫发作预测,可以在许多方面大大提高患者的生活质量&#xff0…

springboot项目配置序列化,反序列化器

介绍本文介绍在项目中时间类型、枚举类型的序列化和反序列化自定义的处理类,也可以使用注解。建议枚举都实现一个统一的接口,方便处理。我这定义了一个Dict接口。枚举类型注解处理这种方式比较灵活,可以让枚举按照自己的方式序列化&#xff0…

三种通用方法——惠普电脑硬盘数据恢复

随着当今数字时代的到来,人们对于计算机硬盘上存储的数据越来越重视。然而,电脑硬盘也时常会发生数据丢失的情况,这时候就需要进行数据恢复。惠普电脑是市面上比较常见的品牌之一,因此本文将从惠普电脑硬盘数据恢复的角度出发&…

【你不知道的事】JavaScript 中用一种更先进的方式进行深拷贝:structuredClone

你是否知道,JavaScript中有一种原生的方法来做对象的深拷贝? 本文我们要介绍的是 structuredClone 函数,它是内置在 JavaScript 运行时中的: const calendarEvent {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve…

EXCEL技能点3-常用技能1

1 引用格式 公式中引用单元格或者区域时,引用的类型可分为以下三种: 绝对引用 相对引用 混合引用 在Excel里,每个单元格都有一个编码,就像人的身份证一样,在Excel里是按照行列进行编码,例如A1就是第一列的第一行。 那么我们想要引…

QEMU启动x86-Linux内核

目录QEMU简介linux启动流程我的环境安装QEMU软件包安装源码安装编译linux内核编译busybox制作initramfs使用QEMU启动linux内核简化命令参考QEMU简介 QEMU(quick emulator)是一个通用的、开源的硬件模拟器,可以模拟不同硬件架构(如…

Docker入门 第四部分

Docker 的优势 Docker 相比于传统虚拟化方式具有更多的优势: Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。 Docker 需要的资源更少。Docker 在操作系统级别进行虚拟化,Docker 容器和内核交互,几乎没有性能损耗,性能…

Windows安装Hadoop

当初搭建Hadoop、Hive、HBase、Flink等这些没有截图写文,今为分享特重装。下载Hadoop下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/以管理员身份运行cmd切换到所在目录执行start winrar x -y hadoop-3.3.4.tar.gz,解压。配置…

刚刚和ChatGPT聊了聊隐私计算

开放隐私计算ChatGPT最近太火了,作为一个背后有庞大数据支撑,而且还在不断进化的人工智能,每个人都想和它聊一聊。我们也不例外,于是刚刚和它聊了聊隐私计算那些事儿。先来几个行业问题,毕竟它背后有所有行业新闻、论文…

Python tkinter 如何实现网站下载工具?将所有数据一键获取

前言 铁汁们有没有想过,如何把几个代码的功能结合到一起呢? 有想过的话,有没有实现过呢? 其实很简单的啊,咱就写一个界面就好了,想要哪个代码运行,鼠标轻轻一点就行 开发环境 python 3.8: 解…

【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令

目录 一:概述 1.1. 何为版本控制 1.2. 为什么需要版本控制 1.3. 版本控制工具 1.4. Git 简史 1.5. Git 工作机制 1.6. Git和代码托管中心 二:安装 2.1. Git安装 三:常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库…

多节点部署一键启动脚本

1 背景 我们在实际项目开发的时候,往往一个大的项目需要很多人协同开发,大家都开发完成在一起联调的时候需要启动很多节点,如果每次都手动去启动所有节点效率非常低,所以我们可以写一个脚本一键启动所有进程,以下统称为节点。 根据节点依赖的环境,一键启动脚本分两种情…

电力电子中逐波限流控制以及dsp实现

逐波限流是指在电力系统运行中,对电力设备进行电流保护的一种措施。它的实现方式是通过对电力系统的电流进行逐波监测和控制,每一波电流都可以独立地进行限制,从而保护电力系统设备不受过载损坏或短路故障的影响。 逐波限流的作用是提高电力…

1. ELK Stack 理论篇之什么是ELK Stack?

ELK Stack 理论篇之什么是ELK Stack?1.1 什么是 ELK Stack?1.2 ELK Stack的发展史1.2.1 Elasticsearch1.2.2 引入 Logstash 和 Kibana,产品更强大1.2.3 社区越来越壮大,用例越来越丰富1.2.4 然后我们向 ELK 中加入了 Beats1.2.5 那么&#x…

es6模块

目录 一、语法说明 二、示例代码 三、运行测试 一.语法说明 JavaScript 现在有两种模块。一种是 ES6 模块,简称 ESM;另一种是 CommonJS 模块,简称 CJS。CommonJS 模块是 Node.js 专用的,与 ES6 模块不兼容。语法上面&#xff0…

XE开发Linux应用(二)-Webservice

新建一个工程。选择如图。继续输入服务名然后就生成对应的单元。增加linux 平台。完善对应的单元代码{ Invokable implementation File for Txaliontest which implements Ixaliontest }unit xaliontestImpl;interfaceuses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns…

Hive常用内置函数、窗口函数及自定义函数

文章目录一、字符串函数二、数值函数三、日期函数四、其余常用函数五、窗口函数5.1、语法5.2、常用窗口函数六、自定义函数6.1、自定义UDF函数6.2、自定义UDTF函数6.3、将自定义函数导入hive中6.3.1、将项目打成jar包6.3.2、将jar包传入hive目录6.3.3、在hive中加载jar包6.3.4、…