大数据基础之Hbase——Hbase的shell基本操作
目录一:简介二:Hbase重要概念:Hbase的表结构表Table命名空间namespace行键Row Key区域region列簇column family修饰符(列限定符)Hbase shell基本操作:创建Hbase表:1.创建简单表:2.修改(添加、删除)表结构:3.获取表的描述describe4.列举所有表list5.表是否存在exists6.启用表enable和禁用表disable7.删
目录
一:简介
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)