大数据基础之Hbase——Hbase的shell基本操作

 

目录

一:简介

二:Hbase重要概念:

Hbase的表结构

表Table

命名空间namespace

行键Row Key

区域region

列簇column family

修饰符(列限定符)

三:Hbase shell基本操作:

1.创建简单表:

2.修改(添加、删除)表结构:

3.获取表的描述describe

4.列举所有表list

5.表是否存在exists

6.启用表enable和禁用表disable

7.删除表drop

8.namespace命令

9.插入或修改数据put

10.获取数据get

11.全表扫描

12.删除某个列簇中的某个列delete

13.删除某行数据deleteall

14.清空表数据truncate

15.filter

ValueFileter的使用方法:

PrefixFilter的使用方法:

KeyOnlyFilter的使用方法:

增加内容:


一:简介

HBase的名字的来源于Hadoop database,即hadoop数据库,不同于一般的关系数据库,它是非结构化数据存储的数据库,而且它是基于列的而不是基于行的模式。

HBase是一个分布式的、面向列的、基于Google Bigtable的开源实现。
利用Hadoop HDFS作为其文件存储系统,
利用Hadoop MapReduce来处理HBase中的海量数据,
利用Zookeeper作为协同服务。

二:Hbase重要概念:

Hbase的表结构

HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family),每个列族/列簇下面可以有多个普通列。

表Table

HBase是用表来存储数据的。

命名空间namespace

namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。
HBase系统默认定义了两个缺省的namespace:

     hbase:系统内建表,包含namespace和meta表
     default:用户建表时未指定namespace的表都创建在此

行键Row Key

行键,每一行的主键列,每行的行键要唯一,行键的值为任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),(在HBase内部,rowKey保存为字节数组byte[]。
行的一次读写是原子操作 (不论一次读写多少列)

区域region

Table在行的方向上分割为多个Region。

Region是按大小分割的,每个表开始只有一个region,随着数据的增多,region不断增大,当增大到一个阀值的时候,region就会等分为两个新的region,之后会有越来越多的region。

Region是HBase中分布式存储和负载均衡的最小单元。不同的Region分布到不同的RegionServer上。

一个RegionServer包含一个WAL、一个BlockCache (读缓存)和多个Region

一个Region包含多个存储区,每个存储区对应一个列族

一个存储区由多个StoreFile和MemStore组成 一个StoreFile对应于一个HFile和一个列族

HFile和WAL作为序列文件保存在HDFS上

Client与RegionServer交互

列簇column family

列族是每个子列的父级,每个子列都属于一个列族,一个列族包含一个或者多个相关列,创建表的时候需要指定列族,而列不需要必须指定。通过“列族名:列名”来表示某个具体的子列。

HBase中的Schema就是 TableName + Column Family Name

修饰符(列限定符)

就是列族下的每个子列名称,或者称为相关列,或者称为限定符,只是翻译不同。
通过columnFamily:column来定位某个子列。

三:Hbase shell基本操作:

1.创建简单表:

create '表名', {NAME => '列簇名1'},{NAME => '列簇名2'}......

# 简写版
create '表名', '列簇名1','列簇名2','列簇名3'

# 详细版
create '表名', {NAME => '列簇名1' ,VERSIONS => 版本号, TTL => 过期时间, BLOCKCACHE => true}

# 例子
create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}

2.修改(添加、删除)表结构:

2.1 添加一个列簇

#语法
alter '表名','列簇名'

2.2 删除一个列簇

#语法
alter '表名',{NAME => '列簇名',METHOD => 'delete'}

2.3 修改列簇的属性

#修改f1列簇的版本为5
alter 't1',NAME => 'f1',versions => 5

#修改多个列簇,修改f2为内存,版本号为5
alter 't1','f1',{NAME => 'f2',IN_MEMORY => true},{NAME => 'f3',versions => 5}

也可以修改table-scope属性,例如MAX_FILESIZE, READONLY,MEMSTORE_FLUSHSIZE,DEFERRED_LOG_FLUSH等。
# 例如,修改region的最大大小为128MB:
alter 't1', MAX_FILESIZE => '134217728'

3.获取表的描述describe

#语法
describe '表名'

4.列举所有表list

5.表是否存在exists

exists '表名'

6.启用表enable和禁用表disable

通过enable和disable来启用/禁用这个表,相应的可以通过is_enabled和is_disabled来检查表是否被禁用。

# 语法
enable '表名'
is_enabled '表名'

disable '表名'
is_disabled '表名'

7.删除表drop

需要先禁用表,然后再删除表,启用的表是不允许删除的

#语法
disable '表名'
drop '表名' 

8.namespace命令

8.1列举命名空间 list_namespace

8.2获取命名空间描述 describe_namespace

8.3查看命名空间下的所有表 list_namespace_tables

8.4创建命名空间 create_namespace

8.5修改命名空间的属性 

alter_namespace 'ns1',{METHOD => 'set','PROPERTY_NAME' => 'PROPERTY_VALUE'}

#delete a property
alter_namespace 'ns1',{METHOD => 'unset', NAME => 'PROPERTY_NAME'}

8.6 删除命名空间drop_namespace  '命名空间名称'

9.插入或修改数据put

put '表名', '行键', '列族名', '列值'
put '表名', '行键', '列族名:列名', '列值'

10.获取数据get

get '表名','行键'

#根据某一行某列簇的数据
get '表名','行键','列簇名'

11.全表扫描

scan '表名'

#扫描列簇
scan '表名',{column=>'列簇名'}

#扫描列簇的某个列
scan '表名',{column=>'列簇名:列名'}

12.删除某个列簇中的某个列delete

delete '表名','行键','列簇名:列名'

13.删除某行数据deleteall

deleteall '表名','行键'

14.清空表数据truncate

15.filter

列举几个常用的filter

ColumnPrefixFilter 列前缀包含某字符的查找

PrefixFilter 前缀包含某字符的查找

ValueFilter 包含某字符的查找

StartRow 从列簇为某值开始往后查找

StopRow 找到列簇为某值结束

ValueFileter的使用方法:

谁的值=sku188
scan 'test1', FILTER=>"ValueFilter(=,'binary:sku188')"

谁的值包含88
scan 'test1',FILTER=>"ValueFilter(=,'substring:88')"

通过广告点击进来的(column为c2)值包含88 的用户
scan 'test1',FILTER=>"ColumnPrefixFilter('c2') AND ValueFilter(=,'substring:88')"

PrefixFilter的使用方法:

rowkey为user1开头的
scan 'test1',FILTER => "PrefixFilter('user1')"

KeyOnlyFilter的使用方法:

只要key,不要value
scan 'test1' FILTER=>"FirstKeyOnlyFilter() AND ValueFilter(=,'binary:sku188') AND KeyOnlyFilter()"

增加内容:

Hbase数据映射到Hive中的方法:

create external table emp(                                     //在Hive中创建表
emp_id string,
emp_name string,
emp_age string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with
serdeproperties
(
"hbase.columns.mapping" = ":key,base:name,base:age"            //在Hbase中的映射,分别为行键、列簇:列名
)
tblproperties("hbase.table.name" = "emp")                      //在Hbase中的表名

hbase大表快速count:

hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名'

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值