1.HBase的数据模型
1.1 表(table)
1.2 行键(row key),类似于MySQL中的主键
行键是HBase表天然自带的。
1.3 列族(column family),列的集合
HBase中列族是需要在定义表时指定的,列是在插入记录时动态增加的。
HBase表中的数据,每个列族单独一个文件。
1.4 时间戳(timestamp),列(也称作标签、修饰符)的一个属性
行键和列确定的单元格,可以存储多个数据,每个数据含有时间戳属性,数据具有版本特性。
如果不指定时间戳或者版本,默认取最新的数据。
1.5 存储的数据都是字节数组
1.6 表中的数据是按照行键的顺序物理存储的
2.HBase的物理模型
2.1 HBase是适合海量数据(如20PB)的秒级简单查询的数据库。
2.2 HBase表中的记录,按照行键进行拆分, 拆分成一个个的region。
许多个region存储在region server(单独的物理机器)中的。
这样,对表的操作转化为对多台region server的并行查询。
3.HBase的体系结构
3.1 HBase是主从式结构,HMaster、HRegionServer
4.HBase的伪分布搭建
4.1 在hadoop0上解压缩、重命名、设置环境变量HBASE_HOME
4.2 修改文件$HBASE_HOME/conf/hbase-env.sh,修改内容如下
export JAVA_HOME=/usr/local/jdk
export HBASE_MANAGES_ZK=true
4.3 修改文件hbase-site.xml,修改内容如下
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop2:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop2</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
4.4 (可选)修改regionservers
4.5 启动,执行命令start-hbase.sh
注意:启动hbase之前要先启动hadoop,确保hadoop可写入数据。
60010端口查看集群状态
查看
HRegionServer的启动信息
ps aux | grep HRegionServer
5. hbase shell操作
进入shell
hbase shell
help是帮助
exit退出
创建表
>create 'users','user_id','address','info'
表users,有三个列族user_id,address,info
列出全部表
>list
得到表的描述
>describe 'users'
删除表前必须disable
>disable 'users_tmp'
>drop 'users_tmp'
添加记录
put 'users','xiaoming','info:age','24';
put 'users','xiaoming','info:birthday','1987-06-17';
put 'users','xiaoming','info:company','alibaba';
put 'users','xiaoming','address:contry','china';
put 'users','xiaoming','address:province','zhejiang';
put 'users','xiaoming','address:city','hangzhou';
获取一条记录
1.取得一个rowkey的所有数据
>get 'users','xiaoming'
2.获取一个rowkey,一个列族的所有数据
>get 'users','xiaoming','info'
3.获取一个rowkey,一个列族中一个列的所有数据
get 'users','xiaoming','info:age'
更新记录
>put 'users','xiaoming','info:age' ,'29'
>get 'users','xiaoming','info:age'
>put 'users','xiaoming','info:age' ,'30'
>get 'users','xiaoming','info:age'
添加不同的version,查询只会查到最新的结果
获取单元格数据的版本数据
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>1}
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>2}
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>3}
获取单元格数据的某个版本数据
〉get 'users','xiaoming',{COLUMN=>'info:age',TIMESTAMP=>1364874937056}
全表扫描
>scan 'users'
删除xiaoming值的'info:age'字段
>delete 'users','xiaoming','info:age'
>get 'users','xiaoming'
删除整行
>deleteall 'users','xiaoming'
统计表的行数
>count 'users'
truncate删除
hbase(main):066:0> truncate 'users'
Truncating 'users' table (it may take a while):
- Disabling table...
- Dropping table...
- Creating table...
0 row(s) in 4.2800 seconds