hadoop -- Hbase

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.hqwc.cn/news/18633.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Redis 核心技术与实战》课程学习笔记(七)

切片集群:数据增多了,是该加内存还是加实例? 切片集群,也叫分片集群,就是指启动多个 Redis 实例组成一个集群,然后按照一定的规则,把收到的数据划分成多份,每一份用一个实例来保存。…

手机屏幕点胶区域定位机器视觉系统软硬件方案

【检测目的】 点胶之前定位产品,找寻效果较明显的边缘位置 【样品一】 两张图片为一个产品点胶部位的左边和右边。通过边缘A和边缘B这两条线可以找出交点位置做为定位点(产品不平会造成图像模糊的情况) 【样品二】 两张图片为一个产品点胶部位…

【Zabbix 监控 Windows 系统,Java应用,SNMP】

目录 一、Zabbix 监控 Windows 系统1、下载 Windows 客户端 Zabbix agent 22、安装客户端,配置3、在服务端 Web 页面添加主机,关联模板 二、Zabbix 监控 java 应用1、客户端开启 java jmxremote 远程监控功能1、配置 java jmxremote 远程监控功能2、启动…

Python算法笔记(1)-时间复杂度、空间复杂度

Python算法笔记(1)-时间复杂度 1.时间复杂度 时间复杂度是一个描述算法的运行时间的一个函数,它描述了算法的运行时间和输入数据的规模之间的关系,时间复杂度的表示方法用O表示,时间复杂度也用来考察输入值无限趋近无…

【NLP】基础工程:词嵌入

一、说明 词嵌入是高维向量空间中单词或短语的数字表示,其中向量之间的几何关系捕获相应单词之间的语义和句法相似性。这些表示使机器学习模型能够以更有意义的方式理解和处理自然语言。 在传统的 NLP 方法中,单词是使用稀疏的 one-hot 编码向量来表示的,其中每个单词在大词…

专治疑难系列 - 解决“npm ERR!”报错问题

‍‍🏡博客主页: Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『专治疑难系列』 🌌上期文章: 专治疑难系列 - 解决打印机凭证冲突问题 📰如觉得博主文章写的…

插入排序法解析

插入排序法解析 什么是插入排序法 插入排序法是一种简单但有效的排序算法,其基本思想是将一个待排序的元素逐个插入到已经排好序的元素序列中,直至所有元素都被插入完成,从而得到一个有序序列。 具体步骤如下: 假设初始时&…

css实现九宫格有边框,最外层四周无边框

1.先设置9个div&#xff0c;如下&#xff1a; <div class"wrapper"><div class"cell"></div><div class"cell"></div><div class"cell"></div><div class"cell"></div&…

听GPT 讲K8s源代码--pkg(一)

在 Kubernetes 代码仓库中&#xff0c;pkg/api和pkg/apis目录都包含用于定义 Kubernetes API 对象的代码&#xff0c;但它们的作用略有不同。 pkg/api目录包含 Kubernetes 的旧版本 API 对象定义&#xff0c;这些定义在 Kubernetes 1.7 版本之前使用。这些对象定义已经过时&…

【Linux从入门到精通】gdb调式技巧大全

本篇文章会对开发工具:gdb调试器的使用进行讲解。希望本篇文章会对你有所帮助。 目录 一、gdb简单介绍 二、gdb 调试 2、1 加入调试信息 2、2 调试命令 2、2、1 gdb可执行程序——进入调式 2、2、2 l行号/函数名——显示代码 2、2、3 b行号/函数名——打断点 2、2、4 infob——…

书法vr实景授课极大丰富了艺术家的表现语言

为了加强新形势下中华优秀传统文化教育&#xff0c;探索现代科学技术与传统文化的结合。VR公司深圳华锐视点不断创新VR虚拟现实技术在传统文化方面的体验活动&#xff0c;激发学生对传统文化的学习兴趣&#xff0c;树立民族文化自信!搭建书法授课VR虚拟场景&#xff0c;为学生创…

vue3 处理elementPlus的Tree树状结构的选中和编辑数据回显

<!-- 添加角色 请求菜单:props"{ children: children, label: name }" children:后端返回的子集结构的key label&#xff1a;name后端返回的名字&#xff1a;data"menus" menus是后端返回的菜单权限列表--><el-treeref"elTreeRef":dat…