Hbase结构再探究
Hbase储存再hdfs上,这是hbase的具体文件夹

-
.hbck:这是 HBase 的hbase-hbck工具生成的目录,用于存储修复 HBase 表的信息。hbase-hbck工具用于检查和修复 HBase 表的一致性和完整性。 -
.tmp:这是一个临时目录,通常用于临时存储数据或文件,以便后续处理。在 HBase 中,它可能用于一些临时数据的存储或操作。 -
MasterData:这是 HBase Master 节点的数据目录,用于存储 Master 节点的状态信息和元数据。 -
WALs:这是 Write-Ahead Logs(WALs)的缩写,用于存储 HBase 的编辑日志,记录了所有表的变更操作。这个目录存储了 HBase 中的持久化数据变更。 -
archive:这是一个归档目录,可能用于存储过去的数据备份或归档数据。通常,这里存储了一些旧版本的数据。 -
corrupt:这个目录通常用于存储损坏或不可用的数据块或文件。这些文件可能已损坏或发生错误,无法正常使用。 -
data:这是 HBase 存储实际数据的目录,包含了 HBase 表的数据块和列簇。这是 HBase 中最重要的目录之一,存储了用户数据。 -
hbase.id:这个文件包含了 HBase 实例的唯一标识符或ID。它用于标识 HBase 集群中的不同实例。 -
hbase.version:这个文件包含了 HBase 版本的信息,包括版本号等。 -
mobdir:这个目录通常与 HBase 的 MOB(Medium Object)存储相关,用于存储 MOB 类型的数据。MOB 是一种用于存储大型二进制对象的机制。 -
oldWALs:这是旧的 Write-Ahead Logs(WALs)的存储目录,通常用于存储旧版本的编辑日志。 -
staging:这是一个临时存储目录,通常用于执行一些临时操作或数据迁移。
data下面每个命名空间都是一个文件夹

其中上面两个是默认就有的,下面这个是我自定义的命名空间

每张表都是一个文件夹

.tabledesc:与 HBase 表的描述信息有关。通常,HBase 表的描述信息包括表的结构、列族信息、数据编码方式等。.tabledesc 包含了与表相关的元数据或描述数据。
下面则是具体数据

-
.regioninfo:.regioninfo文件是 Apache HBase 中用于存储 HRegion 的元数据的文件。在 HBase 中,数据被划分为多个区域(regions),每个区域对应一个.regioninfo文件。这些区域文件实际上是存储在 HDFS(Hadoop分布式文件系统)上的,而不是本地文件系统。每个
.regioninfo文件包含有关特定区域的元数据信息,这些信息包括但不限于:-
Region Name: 区域的唯一标识符,通常是一个哈希值。
-
Start Key: 区域的起始键。
-
End Key: 区域的结束键。
-
Region ID: 区域的唯一标识符。
-
Table Name: 区域所属的表的名称。
-
Timestamp: 区域创建的时间戳。
这些元数据信息对于 HBase 的区域分割和数据定位非常重要。HBase会根据这些信息来确定数据应该存储在哪个区域,以及如何进行区域的拆分和合并操作。
.regioninfo文件通常由 HBase 自动管理,用户不需要直接编辑或操作这些文件。这些文件位于 HBase 表的.META.表中,HBase Master 和 Region Servers 使用这些信息来协调数据的读取和写入操作。 -
-
recovered.edits:recovered.edits是 Apache Hadoop HDFS(分布式文件系统)中的一个文件,通常与 HBase(基于 Hadoop 的分布式数据库)相关。它包含了 HBase 的编辑日志(edit log)的恢复部分。HBase 的编辑日志是一种记录了所有表的变更操作(如插入、更新、删除等)的日志。这个日志用于保证数据的一致性和持久性,以便在节点故障或其他故障发生时能够还原数据。
recovered.edits文件通常在 HBase 的数据目录中,用于存储在 HBase Master 启动或重新启动时,从编辑日志中恢复尚未持久化到 HFile(HBase存储文件)中的数据变更。这有助于确保在 Master 节点发生故障时,不会丢失尚未应用的数据变更。在 HBase 运行时,编辑日志和
recovered.edits文件的管理是由 HBase 自动完成的,用户不需要直接处理这些文件。 -
score和teacher,info:是我自定义的列族,每个列族都是一个目录,而字段名和值都是储存在一个文件中,因此字段名和值都是离散的。
从上面的结构分析可以看出要想查找到一个值,必须从命名空间->表名->列族名,因为列是离散的因此hbase给出了rowkey来查找每一个cell,而不是关系型数据库中通过列名来查找值
这里可以看出列名和值为什么的离散化储存的,如果我们获取数据会得到多个cell,但是对于同一个rowkey的cell都是属于一行的
Hbase shell常见命令
create 'namespace:table_name', 'column_family'
通过namespace:表名来确定在哪里创建表,只需定义表和列族
put 'namespace:table_name','rowkey','column_family:column','value'
这里添加数据,因为是离散化的表,因此lcolumn和value都是动态的,是后来添加的
disable 'namespace:table_name'
drop 'namespace:table_name'
和关系型数据库不一样的,删除某一张表必须先禁用该表再删除
disable_all
drop_all
禁用并删除hbase下的所有表,用于清空hbase,但不会删除namespace
get和scan
get 'namespace:table_name','rowkey','column_family:column',.....
获取一个或者多个cell因为但是一次只能查询一个rowkey,也就是只能查找一行数据
scan 'namespace:table_name'
扫描表,获取数据

浙公网安备 33010602011771号