hadoop -- Hbase

news2024/9/23 5:15:26

HBase是一个分布式、可扩展、面向列的数据存储(百万级别列)、可伸缩、高可靠性、实时读写的NoSQL 数据库。

HBase利用 Hadoop的 HDFS作为其文件存储系统, 利用MapReduce 来处理HBase中的海量数据, 利用Zookeeper作为分布式协同服务。

HBase 基本的操作命令: 

# 进入HBase 客户端
[zsm@hadoop102 hbase-1.3.1]$ bin/hbase shell

# 查看所有的表
hbase(main):002:0> list
TABLE                                                                                                                                                                                                                       
stu                                                                                                                                                                                                                    
stu2                                                                                                                                                                                                                   
stu3                                                                                                                                                                                                                   
stu4 

创建表: 

create 'tableName', 'cf1', 'cf2'

创建一个包含cf1、cf2 两个列族的表

插入数据: 

put 'tableName', 'row1', 'cf1:column1', 'value1'

在表的【row1】 行,【cf1】 列族下的 【column1】 列 中插入值 【value1】

更新数据:

put 'tableName', 'row1', 'cf1:column1', 'value2'

将表的【row1】 行,【cf1】 列族下的 【column1】 列值修改为【value2】

查看数据: 

# 查看指定行
get 'tableName', 'row1'

# 查看指定行的指定列族的指定列
get 'tableName', 'row1', 'cf1:column1'

全表扫描数据: 

# 全表扫描
scan 'tableName'

# 分段扫描 ,从row1行开始 【, 到row2行结束】
scan 'tableName', {STARTROW => 'row1' [, STOPROW => 'row2']}

条件过滤: 

# 单列值过滤器(SingleColumnValueFilter)
scan 'mytable', {FILTER => "SingleColumnValueFilter('cf1', 'column1', '=', 'value1')"}

# 组合过滤
scan 'mytable', {FILTER => "FilterList(AND, SingleColumnValueFilter('cf1', 'column1', '=', 'value1'), SingleColumnValueFilter('cf2', 'column2', '>=', '100'))"}

# 页码过滤
scan 'mytable', {FILTER => "PageFilter(10)"}

# 行键范围过滤器(RowFilter)
scan 'mytable', {FILTER => "RowFilter(>=, 'binary:row1')"}

删除表、数据

# 删除表
disable 'tableName'
drop 'tableName'

# 清空表
truncate 'tableName'

# 删除某一行
delete 'tableName', 'row1'

# 删除某一列
delete 'tableName', 'row1', 'cf1:column1'

HBase 数据模型

HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个multi-dimensional map(多维度 K-V)。它是一个面向列的数据存储, 可容纳百万级别列。

HBase物理存储结构:

HBase的数据模型的主要组成部分:

  1. 表(Table):HBase中的数据存储在表中,每个表有一个唯一的名称。表由行和列组成,以键值对的形式存储数据。

  2. 行(Row):在HBase中,每一行由一个唯一的行键标识。行键是一个可变长的字节数组,以字典序排序。行键是HBase中数据访问和查询的主要方式。

  3. 列族(Column Family):表中的列按照列族进行组织,列族定义了一组具有相似属性的列。每个列族都有一个唯一的名字。不同列族的列在物理存储上是分开存储的,这样可以为不同列族的数据设置不同的存储和压缩策略。

  4. 列限定符(Column Qualifier):列限定符用于标识列族中的每个列,它是在列族内唯一的。例如,如果列族是"user",那么列限定符可以是"age"、"name"等。

  5. 单元格(Cell):一个单元格由行键、列族、列限定符和时间戳组成。一个表中的数据由多个单元格组成。

  6. 版本号(Version):HBase支持存储多个版本的数据。每个单元格可以存储多个版本的值,每个版本都有一个对应的时间戳。通过版本号可以实现数据的历史查询和版本控制。

  7. 命名空间(Namespace):命名空间是对表的逻辑分组,相当于一个命名空间的容器。它提供了一种逻辑隔离和管理表的方式。

HBase架构原理:

在这里插入图片描述

  • client: 包含访问HBase的接口并维护cache来加快对HBase的访问
  • zookeeper: 
    • 保证任何时候,集群中只有一个活跃的master
    • 存储所有的region的寻址入口
    • 实时监控Region server 的上线和下线信息,并实时通知Master
    • 存储HBase的schema和table的元数据 
  • Master
    • 为RegionServer 分配region
    • 负责Region server 的负载均衡
    • 发现失效的Region server 并重新分配其上的region
    • 管理用户对table的增删改操作
  • RegionServer
    • 存储HBase的实际数据
    • 刷新缓存到HDFS
    • 维护region, 处理对这些region的IO请求
    • 切分在运行过程中变化过大的region
  • Region: HBase分布式存储和负载均衡的最小单元,包含一个或多个store,每个store保存一个columns family。
  • Store: 包括位于内存中的memstore和位于磁盘的storefile。客户端检索数据,先在memstore找,找不到再找storefile 。
    • MemStore:放在内存里的,保存修改的数据即keyValues。当MemStore的大小达到一个阀值(默认64MB)时,MemStore会被Flush到文件。
    • StoreFile:MemStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。
      • 当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
      • 当一个region所有的storefile的大小和超过一定阈值后,会把当前的region分割为两个,并有hmaster分配到相应的regionserver服务器,实现负载均衡
    • HFile:HBase中KeyValue数据的存储格式,是Hadoop的二进制格式文件。
  • HLog:WAL log --- WAL意为write ahead log, 用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。

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

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

相关文章

AIGC之文本内容生成概述(下)——Transformer

在上一篇文章中,我们一口气介绍了LSTM、Word2Vec、GloVe、ELMo等四种模型的技术发展,以及每种模型的优缺点与应用场景,全文超过一万字,显得冗长且繁杂,在下文部分我们将分开介绍Transformer、BERT、GPT1/GPT2/GPT3/Cha…

electron+vue3全家桶+vite项目搭建【23】url唤醒应用,并传递参数

文章目录 引入实现效果实现步骤测试代码 引入 demo项目地址 很多场景下我们都希望通过url快速唤醒应用,例如百度网盘,在网页中唤醒应用,并传递下载链接,在electron中要实现这样的效果,就需要针对不同的平台做对应的处…

SpringMVC【SpringMVC拦截器、 SpringMVC跨域请求、SSM整合】(七)-全面详解(学习总结---从入门到深化)

目录 SpringMVC拦截器_拦截器过滤敏感词案例 SpringMVC跨域请求_同源策略 SpringMVC跨域请求_跨域请求 SpringMVC跨域请求_控制器接收跨域请求 SSM整合_需求分析 SSM整合_创建父工程 SSM整合_创建dao子工程 SSM整合_创建service子工程 SSM整合_创建controller子工程 …

Gradle和Aritifactory,实现上传Apk并发送消息到钉钉

Gradle和Aritifactory 本文链接:https://blog.csdn.net/feather_wch/article/details/131746580 文章目录 Gradle和AritifactoryGradle基本介绍Gradle插件开发流程本地仓库artifactory搭建添加仓库使用本地仓库gradle插件仓库引入 插件buildSrc开发步骤xxxPluginPg…

【力扣周赛】第 354 场周赛

文章目录 Q1:6889. 特殊元素平方和思路——简单模拟题竞赛时代码 Q2:6929. 数组的最大美丽值思路——差分数组,计算每个数字可能出现的次数竞赛时代码 Q3:6927. 合法分割的最小下标思路——投票法求出现次数超过半数的元素 模拟竞…

dede tag彩色随机大小的样式修改方法

dede tag彩色随机大小的样式修改方法,打开include/common.func.php 在最下面添加以下代码: //TAG彩色 jinmengqiang.cn function getTagStyle() { $minFontSize8; //最小字体大小,可根据需要自行更改 $maxFontSize18; //最大字体大小,可根据需要自行更改…

(中等)剑指Offer II 062.实现前缀树 Java

Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段: 指向子节点的指针数组children,对于本题而言,数组长度为26,即小写英文字母的数量。此时children[0]对应着小写字母a&#xff0…

数据结构(王道)——队列

一、队列的定义 三个重要名词:队头、队尾、空队列。 二、队列的基本操作 队列总结: 三、队列的顺序表实现 基本操作: 静态创建队列顺序表 队列顺序表的初始化操作: 入队操作: 入队操作优化: 最优版入队操作…

Navicat-Cracker NavicatCrackerDlg.cpp:332 -3已解决Navicat 162版本注册问题的详细分析与解决方案

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之…

一零六五、零基础入门数据挖掘-心跳信号分类预测(阿里云天池赛)

目录 赛制官方链接 赛题简介 赛制说明 长期赛(2021年7月~) 正式赛(3月12日 - 5月12日) 大赛组织 赛题背景 赛题数据 评测标准 结果提交 代码实现 赛制官方链接 零基础入门数据挖掘-心跳信号分类预测_学习赛_…

哈希表以及用js封装一个哈希表

最近在学数据结构和算法,正好将学习的东西记录下来,我是跟着一个b站博主学习的,是使用js来进行讲解的,待会也会在文章后面附上视频链接地址,大家想学习的可以去看看 本文主要讲解哈希表,其他数据结构后续学…

轻松入门Python量化交易(三)

大家好,我们接第二部分继续分析金融数据。 配对图和相关矩阵 证券中的相关性分析为我们提供了有趣的投资策略。市场中一个广为人知的策略叫做“Long-Short”,即买入一家公司的证券,同时卖出另一家公司的证券,相信这两个资产在市…

《微服务架构设计模式》第八章 外部API模式

内容总结自《微服务架构设计模式》 外部API模式 一、API设计难题二、API Gateway 模式1、简介2、所有者模式3、好处和弊端4、设计问题5、实现一个API Gateway 三、使用GraphQL 实现API Gateway四、总结 一、API设计难题 1、移动客户端的API设计难题 在此设计中,移动…

动态规划(二) —— 打家劫舍系列问题总结

前言 除了背包系列问题,打家劫舍系列问题同样也是动态规划的经典题目。在这篇文章中荔枝将会把打家劫舍系列问题做一下总结,再仔细体会动态规划的思想,希望能帮到有需要的小伙伴~~~ 文章目录 前言 一、Leecode198.打家劫舍 1.1 分析 1.2 …

C2C、B2B、B2C、O2O电商定义区别

如今是电子商务高度发展的时代,大多数传统企业商家都开始采取转型战略帮助企业发展,商业模式的选择是转型的关键点,下面小编向你详细介绍一下B2B、B2C、C2C、O2O这些商务模式,帮助你快速理解它们。 BBusiness,即企业;…

Servlet实现文件下载的功能

download.html <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>文件下载</title><base href"<%request.getContextPath()"/"%>>"> </head>…

前端基本功 用 React Hooks + Antd 实现一个 Todo-List

背景 使用 React Hooks 以及组件库 Antd 来实现一个可以 增删 标记是否完成 的 todo-list 思路 要实现一个 todo-list 首先想到用 useState 维护一个状态数组来保存当前 list &#xff0c;还要用一个状态维护添加框中的内容 const [todos, setTodos] useState(initialValu…

OpenCv图像基本变换

目录 一、图像翻转 二、图像旋转 三、仿射变换之平移 四、仿射变换之获取变换矩阵 五、仿射变换之透视变换 一、图像翻转 图像翻转不等同于旋转&#xff0c;类似于一些视频的拍摄&#xff0c;拍摄后实际是左右颠倒的&#xff0c;通过图像翻转可进行还原 案例代码如下: …

第十四章:Context Encoding for Semantic Segmentation ——语义分割的上下文编码

0.摘要 近期的研究在使用全卷积网络&#xff08;FCN&#xff09;框架改善像素级标注的空间分辨率方面取得了显著进展&#xff0c;通过采用扩张/空洞卷积、利用多尺度特征和细化边界等方法。本文通过引入上下文编码模块来探索全局上下文信息对语义分割的影响&#xff0c;该模块捕…

springMVC的开发步骤-15

第一步你用到前端核心控制器&#xff0c;你应该有他&#xff0c;因此导包&#xff1a; 第二步:配servlet 第三步&#xff1a;配控制器&#xff0c;用来调用视图 结束之后我要干嘛&#xff1f;这个springMvC,我能否将这个pojo放到容器内部当中&#xff0c;能否通过bean标签进行配…