Hbase安装和shell客户端操作

打印 上一主题 下一主题

主题 668|帖子 668|积分 2004

简介

HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文。
HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper 实现。
HBase 良好的分布式架构设计为海量数据的快速存储、随机访问提供了可能,基于数据副本机制和分区机制可以轻松实现在线扩容、缩容和数据容灾,是大数据领域中 Key-Value 数据结构存储最常用的数据库方案
特点

  • 易扩展
Hbase 的扩展性主要体现在两个方面,一个是基于运算能力(RegionServer) 的扩展,通过增加 RegionSever 节点的数量,提升 Hbase 上层的处理能力;另一个是基于存储能力的扩展(HDFS),通过增加 DataNode 节点数量对存储层的进行扩容,提升 HBase 的数据存储能力。

  • 海量存储
HBase 作为一个开源的分布式 Key-Value 数据库,其主要作用是面向 PB 级别数据的实时入库和快速随机访问。这主要源于上述易扩展的特点,使得 HBase 通过扩展来存储海量的数据。

  • 列式存储
Hbase 是根据列族来存储数据的。列族下面可以有非常多的列。列式存储的最大好处就是,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段时,能大大减少读取的数据量。

  • 高可靠性
WAL 机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication 机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且 Hbase 底层使用 HDFS,HDFS 本身也有备份。

  • 稀疏性
在 HBase 的列族中,可以指定任意多的列,为空的列不占用存储空间,表可以设计得非常稀疏。

  • 模块组成
HBase 可以将数据存储在本地文件系统,也可以存储在 HDFS 文件系统。在生产环境中,HBase 一般运行在HDFS 上,以 HDFS 作为基础的存储设施。HBase 通过 HBase Client 提供的 Java API 来访问 HBase 数据库,以完成数据的写入和读取。HBase 集群主由HMaster、Region Server 和 ZooKeeper 组成。
架构

HBase 系统遵循 Master/Salve 架构,由三种不同类型的组件组成:
client

  • 提供了访问hbase的接口
  • 提供cache缓存提高访问hbase的效率 , 比如region的信息
Zookeeper

  • 保证任何时候,集群中只有一个 Master;
  • 存储所有 Region 的寻址入口;
  • 实时监控 Region Server 的状态,将 Region Server 的上线和下线信息实时通知给 Master;
  • 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family 等信息。
Master

  • 为 Region Server 分配 Region;
  • 负责 Region Server 的负载均衡 ;
  • 发现失效的 Region Server 并重新分配其上的 Region;
  • GFS 上的垃圾文件回收;
  • 处理 Schema 的更新请求
Region Server

  • Region Server 负责维护 Master 分配给它的 Region ,并处理发送到 Region 上的 IO 请求;
  • Region Server 负责切分在运行过程中变得过大的 Region

安装

因为hbase需要依赖zookeeper和hdfs,所以在安装hbase集群之前需要确保zookeeper和hdfs的环境正常

  • 上传压缩包并解压
  • hbase配置
  1. # 1.在conf目录下找到hbase-env.sh
  2. cd /opt/apps/hbase-2.2.5/conf
  3. vi hbase-env.sh
  4. # 修改的地方:
  5. # 1.1 配置java的环境变量,注意需要将前面的注释打开
  6. export JAVA_HOME=/opt/apps/jdk1.8
  7. #1.2 hbase中内嵌了一个zookeeper,默认使用的是内置的zoopkeeper,将等号后面的true改成false
  8. export HBASE_MANAGES_ZK=false
  9. # 2.在 conf目录下找到hbase-site.xml
  10. vi hbase-site.xml
  11. # 在最下面输入下面的配置文件
  12. <configuration>
  13. <property>
  14. <name>hbase.rootdir</name>
  15. <value>hdfs://linux01:8020/hbase</value>
  16. </property>
  17. <property>
  18. <name>hbase.cluster.distributed</name>
  19. <value>true</value>
  20. </property>
  21. <property>
  22.   <name>hbase.unsafe.stream.capability.enforce</name>
  23.   <value>false</value>
  24. </property>
  25. <property>
  26. <name>hbase.zookeeper.quorum</name>
  27. <value>linux01:2181,linux02:2181,linux03:2181</value>
  28. </property>
  29. </configuration>
  30. # 3.regionservers 配置  启动集群中的Regionserver机器
  31. vi regionservers
  32. # 输入自己的三台机器域名
  33. linux01
  34. linux02
  35. linux03
复制代码

  • 集群分发
  1. for i in 2 3
  2. do
  3. scp -r hbase-2.2.5/ linux0$i:$PWD
  4. done
复制代码

  • 启动
单节点启动:
  1. bin/hbase-daemon.sh start master
  2. bin/hbase-daemon.sh start regionserver
  3. # 提示:如果regionserver无法启动,请先检查下集群之间的节点时间是否同步
复制代码
一键启动:
  1. bin/start-hbase.sh
复制代码

  • 验证启动是否成功
  1. # 1.jps查看
  2. [root@linux01 conf]# jps
  3. 4305 Jps
  4. 2386 QuorumPeerMain
  5. 2051 DataNode
  6. 3747 HMaster  # 查看HMaster有无进程
  7. 1898 NameNode
  8. 3934 HRegionServer  # 查看HRegionServer有无进程
  9. # 2.通过"linux01:16010"的方式来访问HBase管理页面,进得去代表启动成功
复制代码
数据模型

namespace:hbase中没有数据库的概念 , 是使用namespace来达到数据库分类别管理表的作用
table:表,一个表包含多行数据
Row Key (行键):一行数据包含一个唯一标识rowkey、多个column以及对应的值。在HBase中,一张表中所有row都按照rowkey的字典序由小到大排序。
Column Family(列族):在建表的时候指定,不能够随意的删减,一个列族下面可以有多个列(类似于给列进行分组,相同属性的列是一个组,给这个组取个名字叫列族)
Column Qualifier (列):列族下面的列,一个列必然是属于某一个列族的行
Cell:单元格,由(rowkey、column family、qualifier、type、timestamp,value)组成的结构,其中type表示Put/Delete操作类型,timestamp代表这个cell的版本。KV结构存储,其中rowkey、column family、qualifier、type以及timestamp是K,value字段对应KV结构的V。
Timestamp(时间戳):时间戳,每个cell在写入HBase的时候都会默认分配一个时间戳作为该cell的版本,用户也可以在写入的时候自带时间戳。HBase支持多版本特性,即同一rowkey、column下可以有多个value存在,这些value使用timestamp作为版本号,版本越大,表示数据越新。
shell客户端
  1. # 如果配置了环境变量:在任意地方敲 hbase shell
  2. # 如果没有配置环境变量,需要在bin目录下./hbase shell
  3. hbase shell
  4. # 出现如下 代表成功进入了hbase的shell客户端
  5. hbase(main):001:0>
复制代码
通用命令

status: 查看HBase的状态,例如,服务器的数量。
  1. hbase(main):001:0> status
  2. 1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
  3. Took 0.3609 seconds
复制代码
version: 提供正在使用HBase版本。
  1. hbase(main):002:0> version
  2. 2.2.5, rf76a601273e834267b55c0cda12474590283fd4c, 2020年 05月 21日 星期四 18:34:40 CST
  3. Took 0.0004 seconds
复制代码
table_help: 表引用命令提供帮助。
  1. 关于表的一些命令参考
  2. 如:
  3. To read the data out, you can scan the table:
  4.   hbase> t.scan
  5. which will read all the rows in table 't'.
复制代码
whoami: 提供有关用户的信息。
  1. hbase(main):004:0> whoami
  2. root (auth:SIMPLE)
  3.     groups: root
  4. Took 0.0098 seconds
复制代码
命名空间相关命令

list_namespace:列出所有的命名空间
  1. hbase(main):005:0> list_namespace
  2. NAMESPACE
  3. default
  4. hbase
  5. 2 row(s)
  6. Took 0.0403 seconds
复制代码
create_namespace:创建一个命名空间
  1. hbase(main):002:0> create_namespace doit
  2. NameError: undefined local variable or method 'doit' for main:Object
  3. # 名称需要加上引号
  4. hbase(main):003:0> create_namespace 'doit'
  5. Took 0.2648 seconds
复制代码
describe_namespace:描述一个命名空间
  1. hbase(main):004:0> describe_namespace 'doit'
  2. DESCRIPTION
  3. {NAME => 'doit'}
  4. Quota is disabled
  5. Took 0.0710 seconds
复制代码
drop_namespace:删除一个命名空间
  1. # 注意 :只能删除空的命名空间,如果里面有表是删除不了的
  2. hbase(main):005:0> drop_namespace 'doit'
  3. Took 0.2461 seconds
  4. # 命名空间不为空的话
  5. hbase(main):035:0> drop_namespace 'doit'
  6. ERROR: org.apache.hadoop.hbase.constraint.ConstraintException: Only empty namespaces can be removed. Namespace doit has 1 tables
  7.         at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.prepareDelete(DeleteNamespaceProcedure.java:217)
  8.         at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:78)
  9.         at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:45)
  10.         at org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachineProcedure.java:194)
  11.         at org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:962)
  12.         at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:1662)
  13.         at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeProcedure(ProcedureExecutor.java:1409)
  14.         at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$1100(ProcedureExecutor.java:78)
  15.         at org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureExecutor.java:1979)
  16. For usage try 'help "drop_namespace"'
  17. Took 0.1448 seconds     
复制代码
alter_namespace:修改namespace其中属性
  1. hbase(main):038:0> alter_namespace 'doit',{METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
  2. Took 0.2491 seconds
复制代码
list_namespace_tables:列出一个命名空间下所有的表
  1. hbase(main):037:0> list_namespace_tables 'doit'
  2. TABLE
  3. user
  4. 1 row(s)
  5. Took 0.0372 seconds
  6. => ["user"]
复制代码
DDL相关命令

list:列举出默认名称空间下所有的表
  1. hbase(main):001:0> list
  2. TABLE
  3. doit:user
  4. 1 row(s)
  5. Took 0.3187 seconds
  6. => ["doit:user"]
复制代码
create:建表
  1. create ‘xx:t1’,{NAME=>‘f1’,VERSION=>5}
  2. # 创建表t1并指明命名空间xx
  3. # {NAME} f1指的是列族
  4. # VERSION 表示版本数
  5. # 多个列族f1、f2、f3
  6. create ‘t2’,{NAME=>‘f1’},{NAME=>‘f2’},{NAME=>‘f3’}
  7. hbase(main):003:0> create 'doit:student' 'f1','f2','f3'
  8. Created table doit:studentf1
  9. Took 1.2999 seconds
  10. => Hbase::Table - doit:studentf1
  11. # 创建表得时候预分region
  12. hbase(main):106:0> create 'doit:test','f1', SPLITS => ['rowkey_010','rowkey_020','rowkey_030','rowkey_040']
  13. Created table doit:test
  14. Took 1.3133 seconds
  15. => Hbase::Table - doit:test
复制代码
drop:删除表
  1. hbase(main):006:0> drop 'doit:studentf1'
  2. ERROR: Table doit:studentf1 is enabled. Disable it first.
  3. For usage try 'help "drop"'
  4. Took 0.0242 seconds
  5. # 注意:删除表之前需要禁用表
  6. hbase(main):007:0> disable 'doit:studentf1'
  7. Took 0.7809 seconds
  8. hbase(main):008:0> drop 'doit:studentf1'
  9. Took 0.2365 seconds
复制代码
drop_all:丢弃在命令中给出匹配“regex”的表
  1. hbase(main):023:0> disable_all 'doit:student.*'
  2. doit:student1
  3. doit:student2
  4. doit:student3
  5. doit:studentf1
  6. Disable the above 4 tables (y/n)?
  7. y
  8. 4 tables successfully disabled
  9. Took 4.3497 seconds
  10. hbase(main):024:0> drop_all 'doit:student.*'
  11. doit:student1
  12. doit:student2
  13. doit:student3
  14. doit:studentf1
  15. Drop the above 4 tables (y/n)?
  16. y
  17. 4 tables successfully dropped
  18. Took 2.4258 seconds
复制代码
disable:禁用表
  1. # 删除表之前必须先禁用表
  2. hbase(main):007:0> disable 'doit:studentf1'
  3. Took 0.7809 seconds
复制代码
disable_all:禁用在命令中给出匹配“regex”的表
  1. hbase(main):023:0> disable_all 'doit:student.*'
  2. doit:student1
  3. doit:student2
  4. doit:student3
  5. doit:studentf1
  6. Disable the above 4 tables (y/n)?
  7. y
  8. 4 tables successfully disabled
  9. Took 4.3497 seconds
复制代码
enable:启用表
  1. hbase(main):007:0> enable 'doit:student'
  2. Took 0.7809 seconds
复制代码
enable_all:启用在命令中给出匹配“regex”的表
  1. hbase(main):032:0> enable_all 'doit:student.*'
  2. doit:student
  3. doit:student1
  4. doit:student2
  5. doit:student3
  6. doit:student4
  7. Enable the above 5 tables (y/n)?
  8. y
  9. 5 tables successfully enabled
  10. Took 5.0114 seconds
复制代码
is_enabled:判断该表是否是启用的表
  1. hbase(main):034:0> is_enabled 'doit:student'
  2. true
  3. Took 0.0065 seconds
  4. => true
复制代码
is_disabled:判断该表是否是禁用的表
  1. hbase(main):035:0> is_disabled 'doit:student'
  2. false
  3. Took 0.0046 seconds
  4. => 1
复制代码
describe:描述这张表
  1. hbase(main):038:0> describe 'doit:student'
  2. Table doit:student is ENABLED
  3. doit:student
  4. COLUMN FAMILIES DESCRIPTION
  5. {NAME => 'f1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLO
  6. CK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE
  7. _BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
  8. {NAME => 'f2', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLO
  9. CK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE
  10. _BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
  11. {NAME => 'f3', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLO
  12. CK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE
  13. _BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
  14. 3 row(s)
  15. QUOTAS
  16. 0 row(s)
  17. Took 0.0349 seconds
  18. # VERSIONS => '1',  -- 版本数量
  19. # EVICT_BLOCKS_ON_CLOSE => 'false',
  20. # NEW_VERSION_BEHAVIOR => 'false',
  21. # KEEP_DELETED_CELLS => 'FALSE',  保留删除的单元格
  22. # CACHE_DATA_ON_WRITE => 'false',
  23. # DATA_BLOCK_ENCODING => 'NONE',
  24. # TTL => 'FOREVER', -- 过期时间
  25. # MIN_VERSIONS => '0', -- 最小版本数
  26. # REPLICATION_SCOPE => '0',
  27. # BLOOMFILTER => 'ROW',  --布隆过滤器
  28. # CACHE_INDEX_ON_WRITE => 'false',
  29. # IN_MEMORY => 'false', -- 内存中
  30. # CACHE_BLOOMS_ON_WRITE => 'false', --布隆过滤器
  31. # PREFETCH_BLOCKS_ON_OPEN => 'false',
  32. # COMPRESSION => 'NONE',  -- 压缩格式
  33. # BLOCKCACHE => 'true',   -- 块缓存
  34. # BLOCKSIZE => '65536'  -- 块大小
复制代码
alter:修改表里面的属性
  1. hbase(main):040:0> alter 'doit:student', NAME => 'cf1', VERSIONS => 5, TTL => 10
  2. Updating all regions with the new schema...
  3. 1/1 regions updated.
  4. Done.
  5. Took 2.1406 seconds
复制代码
alter_async:直接操作不等待,和上面的alter功能一样
  1. hbase(main):059:0> alter_async 'doit:student', NAME => 'cf1', VERSIONS => 5, TTL => 10
  2. Took 1.0268 seconds
复制代码
alter_status:获取alter命令的执行状态
  1. hbase(main):060:0> alter_status 'doit:student'
  2. 1/1 regions updated.
  3. Done.
  4. Took 1.0078 seconds
复制代码
list_regions:列出一个表中所有的region
  1. Examples:
  2. hbase> list_regions 'table_name'
  3. hbase> list_regions 'table_name', 'server_name'
  4. hbase> list_regions 'table_name', {SERVER_NAME => 'server_name', LOCALITY_THRESHOLD => 0.8}
  5. hbase> list_regions 'table_name', {SERVER_NAME => 'server_name', LOCALITY_THRESHOLD => 0.8}, ['SERVER_NAME']
  6. hbase> list_regions 'table_name', {}, ['SERVER_NAME', 'start_key']
  7. hbase> list_regions 'table_name', '', ['SERVER_NAME', 'start_key']
  8. hbase(main):045:0> list_regions 'doit:student'
  9.                  SERVER_NAME |                                                   REGION_NAME |  START_KEY |    END_KEY |  SIZE |   REQ |   LOCALITY |
  10. --------------------------- | ------------------------------------------------------------- | ---------- | ---------- | ----- | ----- | ---------- |
  11. linux02,16020,1683636566738 | doit:student,,1683642944714.39f7c8772bc476c4d38c663e879d50da. |            |            |     0 |     0 |        0.0 |
  12. 1 rows
  13. Took 0.0145 seconds
复制代码
locate_region:通过表名和row名方式获取region
  1. hbase(main):062:0> locate_region 'doit:student', 'key0'
  2. HOST                                            REGION
  3. linux02:16020                                  {ENCODED => 39f7c8772bc476c4d38c663e879d50da, NAME => 'doit:student,,1683642944714.39f7c8772bc476c4d38c663e879d50da.', STARTKEY => '', ENDK
  4.                                                 EY => ''}
  5. 1 row(s)
  6. Took 0.0027 seconds
复制代码
show_filters:显示hbase的所有的过滤器
  1. hbase(main):058:0> show_filters
  2. DependentColumnFilter
  3. KeyOnlyFilter
  4. ColumnCountGetFilter
  5. SingleColumnValueFilter
  6. PrefixFilter
  7. SingleColumnValueExcludeFilter
  8. FirstKeyOnlyFilter
  9. ColumnRangeFilter
  10. ColumnValueFilter
  11. TimestampsFilter
  12. FamilyFilter
  13. QualifierFilter
  14. ColumnPrefixFilter
  15. RowFilter
  16. MultipleColumnPrefixFilter
  17. InclusiveStopFilter
  18. PageFilter
  19. ValueFilter
  20. ColumnPaginationFilter
  21. Took 0.0035 seconds
复制代码
DML相关命令

put插入/更新数据【某一行的某一列】(如果不存在,就插入,如果存在就更新)
  1. hbase(main):007:0> put 'doit:user_info' ,'rowkey_001','f1:name','zss'
  2. Took 0.0096 seconds
  3. hbase(main):008:0> put 'doit:user_info' ,'rowkey_001','f1:age','1'
  4. Took 0.0039 seconds
  5. hbase(main):009:0> put 'doit:user_info' ,'rowkey_001','f1:gender','male'
  6. Took 0.0039 seconds
  7. hbase(main):010:0> put 'doit:user_info' ,'rowkey_001','f2:phone_num','98889'
  8. Took 0.0040 seconds
  9. hbase(main):011:0> put 'doit:user_info' ,'rowkey_001','f2:gender','98889'
  10. # 注意:put中需要指定哪个命名空间的那个表,然后rowkey是什么,哪个列族下面的哪个列名,然后值是什么
  11. # 一个个的插入,不能一下子插入多个列名的值
复制代码
get:获取一个列族中列这个cell
  1. hbase(main):015:0> get 'doit:user_info' ,'rowkey_001','f2:gender'
  2. COLUMN                         CELL
  3. f2:gender                     timestamp=1683646645379, value=123
  4. 1 row(s)
  5. Took 0.0242 seconds
  6. hbase(main):016:0> get 'doit:user_info' ,'rowkey_001'
  7. COLUMN                         CELL
  8. f1:age                        timestamp=1683646450598, value=1
  9. f1:gender                     timestamp=1683646458847, value=male
  10. f1:name                       timestamp=1683646443469, value=zss
  11. f2:gender                     timestamp=1683646645379, value=123
  12. f2:phone_num                  timestamp=1683646472508, value=98889
  13. 1 row(s)
  14. Took 0.0129 seconds
  15. # 如果遇到中文乱码的问题怎么办呢?在最后加上{'FORMATTER'=>'toString'}参数即可
  16. hbase(main):137:0> get 'doit:student','rowkey_001',{'FORMATTER'=>'toString'}
  17. COLUMN                            CELL
  18. f1:name                          timestamp=1683864047691, value=张三
  19. 1 row(s)
  20. Took 0.0057 seconds
  21. # 注意:get是hbase中查询数据最快的方式,但是只能每次返回一个rowkey的数据
复制代码
scan:扫描表中的所有数据
  1. hbase(main):012:0> scan 'doit:user_info'
  2. ROW                            COLUMN+CELL
  3. rowkey_001                    column=f1:age, timestamp=1683646450598, value=1
  4. rowkey_001                    column=f1:gender, timestamp=1683646458847, value=male
  5. rowkey_001                    column=f1:name, timestamp=1683646443469, value=zss
  6. rowkey_001                    column=f2:gender, timestamp=1683646483495, value=98889
  7. rowkey_001                    column=f2:phone_num, timestamp=1683646472508, value=98889
  8. 1 row(s)
  9. Took 0.1944 seconds
  10. scan 'tbname',{Filter(过滤器)}
  11. scan 'itcast:t2'
  12. #rowkey前缀过滤器
  13. scan 'itcast:t2', {ROWPREFIXFILTER => '2021'}
  14. scan 'itcast:t2', {ROWPREFIXFILTER => '202101'}
  15. #rowkey范围过滤器
  16. #STARTROW:从某个rowkey开始,包含,闭区间
  17. #STOPROW:到某个rowkey结束,不包含,开区间
  18. scan 'itcast:t2',{STARTROW=>'20210101_000'}
  19. scan 'itcast:t2',{STARTROW=>'20210201_001'}
  20. scan 'itcast:t2',{STARTROW=>'20210101_000',STOPROW=>'20210201_001'}
  21. scan 'itcast:t2',{STARTROW=>'20210201_001',STOPROW=>'20210301_007'}
  22. #  在Hbase数据检索,==尽量走索引查询:按照Rowkey条件查询==
  23. #  尽量避免走全表扫描
  24. # 索引查询:有一本新华字典,这本字典可以根据拼音检索,找一个字,先找目录,找字
  25. # 全表扫描:有一本新华字典,这本字典没有检索目录,找一个字,一页一页找
  26. # ==Hbase所有Rowkey的查询都是前缀匹配==
  27. # 如果遇到中文乱码的问题在最后加上{'FORMATTER'=>'toString'}参数即可
  28. hbase(main):130:0> scan 'doit:student',{'FORMATTER'=>'toString'}
  29. ROW                               COLUMN+CELL
  30. rowkey_001                       column=f1:name, timestamp=1683863389259, value=张三
  31. 1 row(s)
  32. Took 0.0063 seconds
复制代码
incr:一般用于自动计数的,不用记住上一次的值,直接做自增
  1. # 注意:因为shell往米面设置的value的值是String类型的
  2. hbase(main):005:0> incr 'doit:student','rowkey002', 'f1:age'
  3. COUNTER VALUE = 1
  4. Took 0.1877 seconds
  5. hbase(main):006:0> incr 'doit:student','rowkey002', 'f1:age'
  6. COUNTER VALUE = 2
  7. Took 0.0127 seconds
  8. hbase(main):007:0> incr 'doit:student','rowkey002', 'f1:age'
  9. COUNTER VALUE = 3
  10. Took 0.0079 seconds
  11. hbase(main):011:0> incr 'doit:student','rowkey002', 'f1:age'
  12. COUNTER VALUE = 4
  13. Took 0.0087 seconds
复制代码
count:统计一个表里面有多少行数据
  1. hbase(main):031:0> count 'doit:user_info'
  2. 1 row(s)
  3. Took 0.0514 seconds
  4. => 1
复制代码
delete删除某一行中列对应的值
  1. # 删除某一行中列对应的值
  2. hbase(main):041:0> delete 'doit:student' ,'rowkey_001','f1:id'
  3. Took 0.0152 seconds
复制代码
deleteall:删除一行数据
  1. # 根据rowkey删除一行数据
  2. hbase(main):042:0> deleteall 'doit:student','rowkey_001'
  3. Took 0.0065 seconds
复制代码
append:追加,假如该列不存在添加新列,存在将值追加到最后
  1. # 再原有值得基础上追加值
  2. hbase(main):098:0> append 'doit:student','rowkey_001','f1:name','hheda'
  3. CURRENT VALUE = zsshheda
  4. Took 0.0070 seconds
  5. hbase(main):100:0> get 'doit:student','rowkey_001','f1:name'
  6. COLUMN                       CELL
  7. f1:name                     timestamp=1683861530789, value=zsshheda
  8. 1 row(s)
  9. Took 0.0057 seconds
  10. #注意:如果原来没有这个列,会自动添加一个列,然后将值set进去
  11. hbase(main):101:0> append 'doit:student','rowkey_001','f1:name1','hheda'
  12. CURRENT VALUE = hheda
  13. Took 0.0063 seconds
  14. hbase(main):102:0> get 'doit:student','rowkey_001','f1:name1'
  15. COLUMN                       CELL
  16. f1:name1                    timestamp=1683861631392, value=hheda
  17. 1 row(s)
  18. Took 0.0063 seconds
复制代码
truncate:清空表里面所有的数据
  1. # 执行流程
  2. # 先disable表
  3. # 然后再drop表
  4. # 最后重新create表
  5. hbase(main):044:0> truncate 'doit:student'
  6. Truncating 'doit:student' table (it may take a while):
  7. Disabling table...
  8. Truncating table...
  9. Took 2.5457 seconds
复制代码
truncate_preserve:清空表但保留分区
  1. hbase(main):008:0> truncate_preserve 'doit:test'
  2. Truncating 'doit:test' table (it may take a while):
  3. Disabling table...
  4. Truncating table...
  5. Took 4.1352 seconds
  6. hbase(main):009:0> list_regions 'doit:test'
  7.                  SERVER_NAME |                                                          REGION_NAME |  START_KEY |    END_KEY |  SIZE |   REQ |   LOCALITY |
  8. --------------------------- | -------------------------------------------------------------------- | ---------- | ---------- | ----- | ----- | ---------- |
  9. linux03,16020,1684200651855 |           doit:test,,1684205468848.920ae3e043ad95890c4f5693cb663bc5. |            | rowkey_010 |     0 |     0 |        0.0 |
  10. linux01,16020,1684205091382 | doit:test,rowkey_010,1684205468848.f8a21615be51f42c562a2338b1efa409. | rowkey_010 | rowkey_020 |     0 |     0 |        0.0 |
  11. linux02,16020,1684200651886 | doit:test,rowkey_020,1684205468848.25d62e8cc2fdaecec87234b8d28f0827. | rowkey_020 | rowkey_030 |     0 |     0 |        0.0 |
  12. linux03,16020,1684200651855 | doit:test,rowkey_030,1684205468848.2b0468e6643b95159fa6e210fa093e66. | rowkey_030 | rowkey_040 |     0 |     0 |        0.0 |
  13. linux01,16020,1684205091382 | doit:test,rowkey_040,1684205468848.fb12c09c7c73cfeff0bf79b5dda076cb. | rowkey_040 |            |     0 |     0 |        0.0 |
  14. 5 rows
  15. Took 0.1019 seconds
复制代码
get_counter:获取计数器
  1. hbase(main):017:0> incr 'doit:student','rowkey_001','f1:name2'
  2. COUNTER VALUE = 1
  3. Took 0.0345 seconds
  4. hbase(main):018:0> incr 'doit:student','rowkey_001','f1:name2'
  5. COUNTER VALUE = 2
  6. Took 0.0066 seconds
  7. hbase(main):019:0> incr 'doit:student','rowkey_001','f1:name2'
  8. COUNTER VALUE = 3
  9. Took 0.0059 seconds
  10. hbase(main):020:0> incr 'doit:student','rowkey_001','f1:name2'
  11. COUNTER VALUE = 4
  12. Took 0.0061 seconds
  13. hbase(main):021:0> incr 'doit:student','rowkey_001','f1:name2'
  14. COUNTER VALUE = 5
  15. Took 0.0064 seconds
  16. hbase(main):022:0> incr 'doit:student','rowkey_001','f1:name2'
  17. COUNTER VALUE = 6
  18. Took 0.0062 seconds
  19. hbase(main):023:0> incr 'doit:student','rowkey_001','f1:name2'
  20. COUNTER VALUE = 7
  21. Took 0.0066 seconds
  22. hbase(main):024:0> incr 'doit:student','rowkey_001','f1:name2'
  23. COUNTER VALUE = 8
  24. Took 0.0059 seconds
  25. hbase(main):025:0> incr 'doit:student','rowkey_001','f1:name2'
  26. COUNTER VALUE = 9
  27. Took 0.0063 seconds
  28. hbase(main):026:0> incr 'doit:student','rowkey_001','f1:name2'
  29. COUNTER VALUE = 10
  30. Took 0.0061 seconds
  31. hbase(main):027:0> get_counter 'doit:student','rowkey_001','f1:name2'
  32. COUNTER VALUE = 10
  33. Took 0.0040 seconds
复制代码
get_splits:用于获取表所对应的region数个数
  1. hbase(main):148:0> get_splits 'doit:test'
  2. Total number of splits = 5
  3. rowkey_010
  4. rowkey_020
  5. rowkey_030
  6. rowkey_040
  7. Took 0.0120 seconds
  8. => ["rowkey_010", "rowkey_020", "rowkey_030", "rowkey_040"]
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表