一、Hbase shell客户端使用

  1. a、进入客户端 hbase shell
  2. b、常用命令
  3. help 查看命令帮助
  4. list 列出Hbase中存在的所有表
  5. list_namespace 列出HBase所有的命名空间
  6. alter 修改列簇(column family)模式
  1. 1alter 'student',{NAME=>'info',VERSION=>3} //更改列族信息
  1. count 统计表中行的数量
  2. create 创建表
  1. 1create 'student','cf1' // 创建一个student表,列族为cf1,至少指定一个列族名
  2. 2create 'stu','cf1','cf2','cf3' // 创建一个student表,列族为cf1、cf2、cf3
  3. 2create 'bigdata:stu','cf1','cf2','cf3' // 在名为biigdata的namespace下创建一个student表,列族为cf1、cf2、cf3
  1. describe 显示表相关的详细信息
  1. 1、查看表的描述: describe 'student'
  2. 一个大括号就相当于一个列簇: {NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACH
  3. E_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER
  4. => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false',
  5. COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
  1. delete 删除指定对象的值(可以为表,行、列对应的值,另外也可以指定时间戳的值)
  1. 格式:delete 'ns1:t1','r1','c1',ts
  1. deleteall 删除指定行的所有元素值
  1. 格式:deleteall 'ns1:t1','r1'
  1. disable 使表无效

flush 表明:把内存的数据刷写到hdfs/磁盘

  1. drop 删除表,在删除表之前需要使用disable命令更改表不可用
  2. drop_namespace 删除命名空间,在删除之前需要该命名空间下没有表
  3. enable 使表有效
  4. exists 测试表是否存在
  5. exit 退出Hbaseshell
  6. incr 增加指定表,行或列的值
  7. put 向指向的表单元添加值
  1. 格式:put 'ns1:t1' , 'r1' , 'c1' , 'value' , ts
  2. 格式:put '命名空间:表明' , 'rowKey' , '列族:列名' , '值' , timestamp
  3. 1put 'bigdata:stu' , '1001' , 'info:name' , ' 张三'
  1. tools列出Hbase所支持的工具
  2. get 获取行或单元(cell)的值
  1. 按指定 RowKey 获取唯一一条记录,get 方法(org.apache.hadoop.hbase.client.Get
  2. Get 的方法处理分两种 : 设置了 ClosestRowBefore 和没有设置的 rowlock 。主要是用来保证行的事务性,即每个 get 是以一个 row 来标记的。
  3. 一个 row 中可以有很多 family column.
  4. 1 查看 scores 表中的 Jim 行的相关数据。
  5. get 'scores','Jim'
  6. 2 获取rowKey=Jim并且 1552819392398 <= 时间戳范围 < 1552819398244
  7. get 'scores', 'Jim', {TIMERANGE => [1552819392398, 1552819398244]}
  8. 3 查看 scores 表中 Jim 行、course 列族的所以数据
  9. get 'scores','Jim','course'
  10. get 'scores','Jim',{COLUMNS=>'course'}
  11. 4 查看 scores 表中 Jim 行、course 列族中 math 列的值。
  12. get 'scores','Jim','course:math'
  13. get 'scores','Jim',{COLUMN=>'course:math'}
  14. 5 获取多个列的值,使用数组表示
  15. get 'scores', 'Jim', {COLUMN => ['grade', 'course', 'address:shen']}
  16. 6 获取grade4个版本的值,默认是按照时间戳降续排序的
  17. get 'scores', 'Jim', {COLUMN => 'grade', VERSIONS => 4}
  18. 7 通过时间戳获取某列相应版本的数据
  19. get 'scores','Jim',{COLUMN=>'course:Chinese',TIMESTAMP=>1599450828729}
  20. 8 获取rowKey=Jim中的值等于85的所有列
  21. get 'scores', 'Jim', {FILTER => "ValueFilter(=, 'binary:85')"}
  1. scan 通过对表的扫描来获取对用的值
  1. 按指定的条件获取一批记录, scan 方法(org.apache.Hadoop.hbase.client.Scan)实现条件查询功能使用的就是 scan 方式.
  2. 1)scan 可以通过 setCaching setBatch 方法提高速度(以空间换时间);
  3. 2)scan 可以通过 setStartRow setEndRow 来限定范围([startend)start 是闭区间,end 是开区间)。范围越小,性能越高。
  4. 3)scan 可以通过 setFilter 方法添加过滤器,这也是分页、多条件查询的基础。
  5. 1 扫描所有数据
  6. scan 'scores'
  7. 2 扫描所有数据,只显示某列
  8. scan 'scores',{COLUMN => 'course:Chinese'}
  9. 3 扫描所有数据,只显示某列,并指定时间戳
  10. scan 'scores', {COLUMNS => 'grade', TIMESTAMP=> 1599461998485}
  11. 4 扫描所有数据,并用TIMERANGE限制,表示的是”>=开始时间 and <结束时间“
  12. scan 'scores',{TIMERANGE=>[1599461946117, 1599464538536]}
  13. 5 扫描所有数据,显示多列的值
  14. scan 'scores', {COLUMNS => [ 'grade','course:Chinese', 'course:math']}
  15. 6 LIMIT 返回的行数
  16. scan 'scores', { LIMIT => 2}
  17. 7 STARTROWROWKEY起始行。会先根据这个key定位到region,再向后扫描
  18. scan 'scores', { STARTROW => 'Jim'}
  19. 8 STOPROW :截止到STOPROW行,STOPROW行之前的数据,不包括STOPROW这行数据
  20. scan 'scores', { STOPROW => 'Tom'}
  21. 9 scan 命令可以指定 startrow,stoprow scan 多个 row,并限制rowkey数量
  22. scan 'scores',{COLUMNS =>'course',LIMIT =>10, STARTROW => 'Jim', STOPROW=>'Tom'}
  1. status 返回Hbase集群的状态信息
  2. shutdown 关闭Hbase集群(与exit不同)
  3. c、关于表: (创建表create、查看表列表list、查看表的详细信息desc、删除表drop、清空表truncate、修改表的定义alter、)
  4. d、关于数据的操作(增put、删delete、查get + scan,改=变相的增加)
  5. e、查看有哪些命令: help;如果哪个命令不会使用 help "command"