注:图片代码均来自尚硅谷视频教学
1.Hbase NOSQL
分布式,可扩展,支持海量数据的存储
2.Hbase表结构
RowKey:行键,唯一,不可重复,有序,字典序
Region:一张表的切片,按RowKey划分,将表分为几个部分
Store:真正存储的内容,下图为物理存储结构
列族:把几个列划分为一组形成列族。
Namespace:命名空间相当于数据库的概念
Cloum:由列族和列限定符进行限定
info:name info : age
Cell:数据没有类型,全部是字节码存储,{rowkey, column Family:column Qualifier, time Stamp}唯一确定一个Hbase.
3.架构
4.安装启动
1)HBase-env.sh修改内容:
export JAVA_HOME=/opt/module/jdk1.6.0_144
export HBASE_MANAGES_ZK=false
2)HBase-site.xml修改内容:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:9000/HBase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/zookeeper-3.4.10/zkData</value>
</property>
</configuration>
3)regionservers:
hadoop102
hadoop103
hadoop104
4)软连接hadoop配置文件到HBase:
[atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
/opt/module/HBase/conf/core-site.xml
[atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
/opt/module/HBase/conf/hdfs-site.xml
5)启动
bin/hbase-daemon.sh start master
4.hbase命令行操作
a.列出所有的表
list
list * // 可以根据通配符进行匹配
b.创建表
create 表名 列族名1 列族名2
c.查看表的详细信息
describe 'person' // 描述表
desc "person" // 描述表
d.停用表和启动表
停用表后,可以防止在对表做一些维护时,客户端依然可以持续写入数据到表。一般在删除表前,必须停用表。
在对表中的列族进行修改时,也需要停用表。
disable 'person'
disable_all ‘正则表达式’ 可以使用正则来匹配表名。
is_disabled 可以用来判断表是否被停用。
enable ‘表名’用来启用表。
is_enabled ‘表名’用来判断一个表是否被启用。
enable_all ‘正则表达式’可以通过正则来过滤表,启用复合条件的表。
e.创建命名空间
create_namespace 'liyong'
list_namespace
drop_namespace 'liyong'
注意:删除之间先要disable
f.count
count 'person' // 数据行数
g.获取region数
get_splits 'person'
h.alter
alter命令可以修改表的属性,通常是修改某个列族的属性。
alter ‘表名’, ‘delete’ => ‘列族名’
i.put
put可以新增记录还可以为记录设置属性。
put ‘表名’, ‘行键’, ‘列名’, ‘值’
put ‘表名’, ‘行键’, ‘列名’, ‘值’,时间戳
put ‘表名’, ‘行键’, ‘列名’, ‘值’, { ‘属性名’ => ‘属性值’}
put ‘表名’, ‘行键’, ‘列名’, ‘值’,时间戳, { ‘属性名’ =>‘属性值’}
HBase(main):012:0> put 'student','1001','info:name','Nick'
HBase(main):003:0> put 'student','1001','info:sex','male'
HBase(main):004:0> put 'student','1001','info:age','18'
HBase(main):005:0> put 'student','1002','info:name','Janna'
HBase(main):006:0> put 'student','1002','info:sex','female'
HBase(main):007:0> put 'student','1002','info:age','20'
j.get
HBase(main):014:0> get 'student','1001'
HBase(main):015:0> get 'student','1001','info:name'
k.scan
scan命令可以按照rowkey的字典顺序来遍历指定的表的数据。
scan ‘表名’:默认当前表的所有列族。
scan ‘表名’,{COLUMNS=> [‘列族:列名’],…} : 遍历表的指定列
scan ‘表名’, { STARTROW => ‘起始行键’, ENDROW => ‘结束行键’ }:指定rowkey范围。如果不指定,则会从表的开头一直显示到表的结尾。区间为左闭右开。
scan ‘表名’, { LIMIT => 行数量}: 指定返回的行的数量
scan ‘表名’, {VERSIONS => 版本数}:返回cell的多个版本
scan ‘表名’, { TIMERANGE => [最小时间戳, 最大时间戳]}:指定时间戳范围
注意:此区间是一个左闭右开的区间,因此返回的结果包含最小时间戳的记录,但是不包含最大时间戳记录
scan ‘表名’, { RAW => true, VERSIONS => 版本数}
显示原始单元格记录,在Hbase中,被删掉的记录在HBase被删除掉的记录并不会立即从磁盘上清除,而是先被打上墓碑标记,然后等待下次major compaction的时候再被删除掉。注意RAW参数必须和VERSIONS一起使用,但是不能和COLUMNS参数一起使用。
scan ‘表名’, { FILTER => “过滤器”} and|or { FILTER => “过滤器”}: 使用过滤器扫描
HBase(main):008:0> scan 'student'
HBase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW => '1001'}
HBase(main):010:0> scan 'student',{STARTROW => '1001'}
l.删除数据
删除某rowkey的全部数据:
HBase(main):016:0> deleteall 'student','1001'
删除某rowkey的某一列数据:
HBase(main):017:0> delete 'student','1002','info:sex'
命令操作详细链接:http://c.biancheng.net/view/6537.html