HBase数据库模型操作-简介
1、表的一些操作
1.1、创建一个表:create命令
1、使用create命令创建一个新表。您必须指定表名称和ColumnFamily名称。2、示例:-- create 'test', 'cf'
1.2、列出有关表的信息:list命令
1、使用list命令确认您的表存在2、示例list 'test'
1.3、查看表的详细信息:describe命令
1、使用describe命令查看详细信息,包括配置默认值2、示例describe 'test'3、
1.4、插入数据:put命令|batch命令
1、使用put命令,保存数据到表2、示例put 'testspace:testtable1','20210506_10001','f1:name','zhangsan'-- '20210506_10001' : 代表rowkey-- 'f1:name' : 代表列族前缀+列限定符后缀-- 'zhangsan' :代表具体插入的值3、API文档:https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Table.html#put-org.apache.hadoop.hbase.client.Put-https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Table.html#batch-java.util.List-java.lang.Object:A-
1.5、一次扫描表中所有数据:scan命令
1、使用scan命令扫描表中的数据。您可以限制扫描2、示例scan 'test'3、API文档https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html
1.6、获取单行数据:get命令
1、要一次获取一行数据,请使用get命令。2、示例get 'test','row1'3、API文档https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Table.html#get-org.apache.hadoop.hbase.client.Get-
1.7、禁用|启用表格:disable命令|enable命令
1、使用disable命令禁用该表。您可以使用enable命令重新启用它。2、示例disable 'test'enable 'test'
1.8、删除表格:drop命令
1、使用drop命令,要删除表2、示例drop 'test'
1.9、删除表数据:delete命令
1、API文档https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Table.html#delete-org.apache.hadoop.hbase.client.Delete-2、注意:2-1、HBase不会就地修改数据,因此删除操作通过创建称为【墓碑】的新标记来处理。这些墓碑以及固定价格将在大压实时清理干净。2-2、delete: 最小粒度是单元格(Cell),而且不能跨列族操作,如果需要删除表中所有列族在某一行的数据(删除表中一个逻辑行),则需要使用 deleteall 命令
2、命名空间操作{命名空间是表的逻辑分组}
2.1、命名空间管理{在表创建期间}
1、创建命名空间1-1、示例#Create a namespacecreate_namespace 'my_ns'2、删除命名空间2-1、示例#drop namespacedrop_namespace 'my_ns'3、修改命名空间3-1、示例#alter namespacealter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
2.2、预定义的名称空间
1、有两个预定义的特殊名称空间:1-1、hbase-系统名称空间,用于包含HBase内部表。1-2、默认-没有显式指定名称空间的表将自动落入该名称空间。2、示例#namespace=foo and table qualifier=barcreate 'foo:bar', 'fam'#namespace=default and table qualifier=barcreate 'bar', 'fam'
3、表[Table]
1、表在架构定义时预先声明
4、行[Row]|行键[RowKey]
1、row key - 概述1-1、可以决定一行数据。1-2、行键是未解释的字节。按字典顺序对行进行排序,最低顺序在表中排在最前面。空字节数组用于表示表名称空间的开始和结束。1-3、只能存储64k的字节数据2、row key - 特点2-1、RowKey类似于主键,可以唯一的标识一行记录2-2、由于数据按照RowKey的字典序(byte order)排序存储,因此HBase中的数据永远都是有序的。2-3、RowKey可以由用户自己指定,只要保证这个字符串不重复就可以了。3、row key - 使用3-1、get:通过指定单个RowKey来获取对应的唯一一条记录;3-2、like:通过RowKey的range来进行匹配;3-3、scan:通过设置startRow和stopRow参数来进行范围匹配(注意:如果不设置就是全表扫描)。4、row key - 作用简介4-1、Hbase在读写数据时需要通过RowKey找到对应的Region,从而避免{热点现象}4-1-1、热点现象-概述-- 当大量请求访问HBase集群的一个或少数几个节点,造成少数RegionServer的读写请求过多,负载过大,而其他RegionServer负载却很小,这样就造成热点现象。4-1-2、热点现象-处理:通过RowKey的优化,避免热点现象-- 反转(Reversing): 把固定长度或者数字格式的 rowkey进行反转,反转分为一般数据反转和时间戳反转,其中以时间戳反转较常见。-- 加盐(Salting):在原RowKey的前面添加固定长度的随机数,也就是给RowKey分配一个随机前缀使它和之前的RowKey的开头不同。-- 哈希(Hashing):基于RowKey的完整或部分数据进行Hash,而后将哈希后的值完整替换或部分替换原RowKey的前缀部分。这里说的hash常用的有MD5、sha1、sha256 或 sha512 等算法。4-2、MemStore和HFile中的数据都是按照 RowKey 的字典序排序。5、row key - 设计原则5-1、长度原则、5-2、唯一原则、5-3、排序原则、5-4、散列原则、
4.1、行键[RowKey]详细简介
https://blog.csdn.net/weixin_36140358/article/details/112096313
5、列簇[Column Family]
1、HBase中的列分为多个列族。列族的所有列成员都具有相同的前缀。1-1、比如:'课程:历史'、'课程:数学',列都是'课程',使用冒号(:)分隔列簇和列簇限定符,1-2、列族前缀必须由可打印字符(printable characters)组成。限定尾部(列族限定符)可以由任意字节组成。1-3、列族必须在架构定义时预先声明,而不必在架构时定义列,2、HBase把同一列族中的数据存储在同一目录下,由几个文件保存
6、单元格[Cells]
1、一个{行、列、版本}指定一个cell在HBase中是唯一的2、cell中的数据是没有类型的,全部是字节数组形式存储。
7、Timestamp时间戳
1、HBase每个cell存储单元对同一份数据有多个版本,根据唯一时间戳来区分每个版本直接的差异,不同版本的数据按照时间倒序排序,最新的数据排在最前面。2、时间戳类型是64位整型。3、时间戳可由HBase在数据写入时自动赋值(当前系统时间,单位ms),也可由客户显示赋值,但要注意唯一性。
8、Table中ColumnFamily和ColumnQualifier的关系与区别
1、Table可以直接理解为表,而Family和Qualifier其实都可以理解为列,一个Family下面可以有多个Qualifier。2、可以简单的理解为,HBase中的列是二级列,也就是说Family是第一级列,Qualifier是第二级列。两个是父子关系。3、从性能的角度应该如何设置family和qualifier呢?{数据的读写效率上考虑}3-1、最极端的,可以每一列都设置成一个family,也可以只有一个family,但所有列都是其中的一个qualifier3-2、如果只有一个family,那么每一次读都会读取当前rowkey的所有数据,网络和io上会有一些损失。3-3、不同的family是在同一个region下面。而每一个family都会分配一个memstore,所以更多的family会消耗更多的内存。
9、官方文档:
http://hbase.apache.org/book.html#quickstart
