HBase 二: 常用语法总结

本文全面介绍了HBase数据库的常用命令,覆盖基本操作、表管理、数据增删改查及过滤器使用,适合初学者和进阶用户快速掌握HBase操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本命令

start-all.sh             启动hadoop
zkServer.sh start  启动zookeeper
start-hbase.sh      启动hbase
hbase shell           进入shell
http://192.168.56.137:60010   web网址

打开Hbase shell:
以下代码均是在 hbase shell 下运行 hbase(main):008:0> xxx

hbase shell

1.1 获取帮助

 获取帮助
 help
 获取命令的详细信息
 help 'status'

1.2 查看服务器状态

status

1.3 查看版本信息

version

二、关于表的操作

(本文在默认default中建表,以下有如何在新建表空间中建表的案列)
1、介绍
在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。Apache HBase从0.98.0, 0.95.2两个版本开始支持namespace级别的授权操作,HBase全局管理员可以创建、修改和回收namespace的授权。

2、namespace
HBase系统默认定义了两个缺省的namespace
hbase:系统内建表,包括namespace和meta表
default:用户建表时未指定namespace的表都创建在此

以下为在表空间中建表的情况

start here



創建表空間

hbase(main):004:0> create_namespace 'gree'

查看表空間

hbase(main):006:0> list_namespace

刪除表空間

hbase(main):008:0> drop_namespace 'gree'

查看表的基本信息

命令格式:desc ‘表名’

describe 'Student'

在gree中創建表

hbase(main):011:0> create 'gree:student','bashinfo', 'schoolinfo'

查看指定表空間下的表

hbase(main):013:0> list_namespace_tables 'gree'

查看描述表信息

hbase(main):014:0> describe 'gree:student'

查看指定表是否不可用

hbase(main):015:0> is_disabled 'gree:student'
false                                                                                                 
0 row(s) in 0.0200 seconds

查看指定表是否可用

hbase(main):016:0> is_enabled 'gree:student'
true                                                                                                  
0 row(s) in 0.0100 seconds

stop here




2.1 查看所有表

list

2.2 创建表(此为不创建表空间,直接创建表)

命令格式: create ‘表名称’, ‘列族名称1’,‘列族名称2’,‘列名称N’

#创建一张名为Student的表,包含基本信息(baseInfo)、学校信息(schoolInfo)两个列族
create 'Student','baseInfo','schoolInfo'

2.4 表的启用/禁用

enable和disable可以启用/禁用这个表,is_enabled和is_disabled来检查表是否被禁用

#禁用表
	disable 'Student'
#检查表是否被禁用
	is_disabled 'Student'
#启用表
	enable 'Student'
#检查表是否被启用
	is_enabled 'Student'

2.5 检查表是否存在

exists 'Student'

2.6 删除表

#删除表前需要先禁用表
	disable 'Student'
#删除表
	drop 'Student'

三、增删改

3.1 添加列族

命令格式: alter ‘表名’, ‘列族名’

alter 'Student', 'teacherInfo'

3.2 删除列族

命令格式:alter ‘表名’, {NAME => ‘列族名’, METHOD => ‘delete’}

alter 'Student', NAME => 'teacherInfo', METHOD => 'delete'

3.3 更改列族存储版本的限制

默认情况下,列族只存储一个版本的数据,如果需要存储多个版本的数据,则需要修改列族的属性。修改后可通过desc命令查看。

alter 'Student',NAME=>'baseInfo',VERSIONS=>3

3.4 插入数据

命令格式:put ‘表名’, ‘行键’,‘列族:列’,‘值’

注意:如果新增数据的行键值、列族名、列名与原有数据完全相同,则相当于更新操作

put 'Student', 'rowkey1','baseInfo:name','tom'
put 'Student', 'rowkey1','baseInfo:birthday','1990-01-09'
put 'Student', 'rowkey1','baseInfo:age','29'
put 'Student', 'rowkey1','schoolInfo:name','Havard'
put 'Student', 'rowkey1','schoolInfo:localtion','Boston'

put 'Student', 'rowkey2','baseInfo:name','jack'
put 'Student', 'rowkey2','baseInfo:birthday','1998-08-22'
put 'Student', 'rowkey2','baseInfo:age','21'
put 'Student', 'rowkey2','schoolInfo:name','yale'
put 'Student', 'rowkey2','schoolInfo:localtion','New Haven'

put 'Student', 'rowkey3','baseInfo:name','maike'
put 'Student', 'rowkey3','baseInfo:birthday','1995-01-22'
put 'Student', 'rowkey3','baseInfo:age','24'
put 'Student', 'rowkey3','schoolInfo:name','yale'
put 'Student', 'rowkey3','schoolInfo:localtion','New Haven'

put 'Student', 'wrowkey4','baseInfo:name','maike-jack'

3.5 获取指定行、指定行中的列族、列的信息

#获取指定行中所有列的数据信息
	get 'Student','rowkey3'
#获取指定行中指定列族下所有列的数据信息
	get 'Student','rowkey3','baseInfo'
#获取指定行中指定列的数据信息
	get 'Student','rowkey3','baseInfo:name'

3.6 删除指定行、指定行中的列

#删除指定行
	delete 'Student','rowkey3'
#删除指定行中指定列的数据
	delete 'Student','rowkey3','baseInfo:name'

四、查询

hbase中访问数据有两种基本的方式:

  1. 按指定rowkey获取数据:get方法;
  2. 按指定条件获取数据:scan方法。

scan可以设置begin和end参数来访问一个范围内所有的数据。get本质上就是begin和end相等的一种特殊的scan。

4.1Get查询

  # 获取指定行中所有列的数据信息
	get 'Student','rowkey3'
  #获取指定行中指定列族下所有列的数据信息
	get 'Student','rowkey3','baseInfo'
  #获取指定行中指定列的数据信息
	get 'Student','rowkey3','baseInfo:name'

4.2 查询整表数据

scan 'Student'

4.3 查询指定列簇的数据

scan 'Student', COLUMN=>'baseInfo'

4.4 条件查询

#查询指定列的数据
scan 'Student', COLUMNS=> 'baseInfo:birthday'

除了列(COLUMNS)修饰词外,HBase还支持Limit(限制查询结果行数),STARTROWROWKEY起始行,会先根据这个key定位到region,再向后扫描)、STOPROW(结束行)、TIMERANGE(限定时间戳范围)、VERSIONS(版本数)、和FILTER(按条件过滤行)等。

如下代表从rowkey2这个rowkey开始,查找下两个行的最新3个版本的name列的数据:

scan 'Student', COLUMNS=> 'baseInfo:name',STARTROW => 'rowkey2',STOPROW => 'wrowkey4',LIMIT=>2, VERSIONS=>3

五:在 hbase shell 中过滤器的使用

网上较多在 java 中写hbase的过滤器,本文讲在 hbase shell 里使用 hbase 过滤器

5.1 在 hbase shell 里上传过滤器(如果该过滤器不存在)

hbase(main):073:0> import org.apache.hadoop.hbase.filter.RowFilter
hbase(main):074:0> import org.apache.hadoop.hbase.filter.RegexStringComparator
hbase(main):080:0> import org.apache.hadoop.hbase.filter.CompareFilter
......

5.2 条件过滤

Filter可以设定一系列条件来进行过滤。如我们要查询值等于24的所有数据:
ValueFilter

scan 'Student', FILTER=>"ValueFilter(=,'binary:24')"

值(日期)等于1986-11-25的

scan 'gree:student', FILTER=>"ValueFilter(=,'binary:1986-11-25')"

包含yale的所有数据 (模糊查询)

scan 'Student', FILTER=>"ValueFilter(=,'substring:yale')"

列名中的前缀为birth的:
ColumnPrefixFilter

scan 'Student', FILTER=>"ColumnPrefixFilter('birth')"

FILTER中支持多个过滤条件通过括号、ANDOR进行组合:
ColumnPrefixFilter

#列名中的前缀为birth且列值中包含1998的数据

scan 'Student', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter(=,'substring:1998')"

PrefixFilter用于对Rowkey的前缀进行判断:
PrefixFilter

scan 'Student', FILTER=>"PrefixFilter('wr')"

查找row中 包含2的rowkey信息
RowFilter

scan 'gree:student',FILTER=>"RowFilter(=,'substring:2')"

通过rowkey过滤,匹配出rowkey等于11的数据

 scan 'testByCrq', FILTER=>"RowFilter(=,'binary:11')"

通过rowkey过滤,匹配出rowkey小于等于0111486816556的数据。

scan 'testByCrq', FILTER=>"RowFilter(<=,'binary:0111486816556')"

通过rowkey过滤,匹配出rowkey包含111的数据。
          注:substring不能使用小于等于等符号。

scan 'testByCrq', FILTER=>"RowFilter(=,'substring:111')"

通过列簇过滤,匹配出列簇含f的数据
FamilyFilter

scan 'testByCrq', FILTER=>"FamilyFilter(=,'substring:f')"

使用正则表达式进行过滤
CompareFilter,RegexStringComparator

scan 'gree:student',FILTER=>RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), RegexStringComparator.new('^row[\w]*\d'))

过滤器很多,以上为常用的,遇到再总结

 

六:在 hbase shell 里操作从 hdfs 上传内容到 hbase


在 java 里的操作会在另外一篇文章中阐述
通过Xftp将文件hbase_import_data.csv拉到虚拟机的 /root 目录下,然后从 /root 目录下上传到 hdfs 的 /user 目录下

[root@lijia1 ~]# hdfs dfs -put ./hbase_import_data.csv /user/

创建一个hbase表

hbase(main):082:0> create 'gree:customer','order'

将hdfs里的文件上传到hbase

[root@lijia1 ~]# hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
> -Dimporttsv.separator=, \
> -Dimporttsv.columns="HBASE_ROW_KEY,order:numb,order:date" \
> gree:customer /user/hbase_import_data.csv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值