一、伪分布模式
修改参数:1) 配置conf/hbase-env.sh文件
#vi hbase-env.sh
29行: export JAVA_HOME=/usr/java/jdk1.8.0_144
123行: export HBASE_MANAGES_ZK=true #因为HBase自带了一个ZK
2) 配置conf/hbase-site.xml文件
#vi hbase-site.xml文件
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.73.132:9000/hbase</value>
<description>保存数据到HDFS的hbase目录下</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>表示现在的HDFS是否为分布上环境? (伪分布式也属于分布式)</description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.73.132</value>
<description>表示ZK所在的主机</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>冗余度,数据复制份数</description>
</property>
3) 配置conf/regionservers
#vi regionservers
192.168.73.132
4) 启动Hadoop
#./start-all.sh
5) 启动HBase
#./start-hbase.sh
#hbash shell
6) HBase Web Console 控制台
http://192.168.73.132:60010
7) Hive是一个数据仓库(了解)
二、 HBase 常用命令
1) 显示所有Table与查看HBase 表结构, 在HBase中没有数据类型, 都是二进制SHELL> list
SHELL> describe 'student'
2) put 插入数据
向student表中插入信息,row key为stu001,列族info中添加name列标示符,值为zhangsan
SHELL> put 'student', 'stu001', 'info:name', 'zhangsan'
向student表中插入信息,row key为stu001,列族info中添加gender列标示符,值为female
SHELL> put 'student', 'stu001', 'info:gender', 'female'
向student表中插入信息,row key为stu001,列族info中添加age列标示符,值为20
SHELL> put 'student', 'stu001', 'info:age', 203) get 查看字段版本
SHELL> put 'student', 'stu001', 'info:name', 'zhangsan2'
SHELL> put 'student', 'stu001', 'info:name', 'zhangsan3'
SHELL> get 'user','rk0001',{COLUMN=>'info',VERSIONS=>3}
输出结果:
COLUMN CELL
info:chinese timestamp=1504169617567, value=80
info:gender timestamp=1504170735091, value=female
info:name timestamp=1504170619059, value=lisi
3 row(s) in 0.0340 seconds
4) get 获取指定行的数据 得指定行
SHELL> get 'student','stu001','info'
5) 查看指定列族 指定字段的消息
SHELL> get 'student', 'stu001', 'info:age'
6) 查看一段时间里的记录 通过时间戳范围查找
SHELL> get 'student', 'stu001',{COLUMN=>'info',VERSIONS=>3,TIMERANGE=>[1477654000000],[1477654111111]}
7) 查看指定行中 字段名称中含有 a的字段
SHELL> get 'student', 'stu001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
8) 返回字段的value值是指定的值的字段
SHELL> get 'student', 'stu001', {FILTER => "ValueFilter(=, 'binary:zhangsan3')"}
9) scan 查询表中的所有消息
SHELL> scan 'student'
10) 查询列族为info,查询指定的rowkey范围
SHELL> scan 'student', {COLUMN=>'info', STARTROW=>'stu001', ENDROW=>'stud003'}
11) 查询表中一 rk 开头的行
SHELL> scan 'student', {FILTER=>"PrefixFilter('stu')"}
12) delete 删除指定对象的值(可以为表,行,列,对应的值,另外也可以指定时间戳的值)
(a) 删除指定字段的值
SHELL> delete 'student','stu001','info:age'
(b) 通过时间戳删除指定的版本
SHELL> delete 'student', 'stu001', 'info:name', 1504170735091
(c) 向表中添加列族
SHELL> alter 'student', 'data'
(d) 删除列族
SHELL> alter 'student', 'delete'=>'data'
同等
SHELL> alter 'student',{NAME=>'data',METHOD=>'delete'}
(e) 清空表中数据
SHELL> truncate 'student'
(f) 删除表, 删除表之前必须先禁用
SHELL> disable 'student'
SHELL> drop 'student'
三、简单写一个Java程序
@Test
public void testScan() throws Exception {
System.setProperty("hadoop.home.dir", "E:\\Program Files\\hadoop-2.7.0");
// 指定HBase的HMaster地址 ----> Zookeeper地址
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "192.168.73.132");
// 获取HBase客户端 ----> HTable
HTable table = new HTable(conf, "student");
// 创建一个扫描器
Scan scan = new Scan();
// scan.setFilter(filter); -----> 指定Filter过滤器
// 相当于: JDBC: ResultSet 一个集合
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
String name = Bytes.toString(r.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")));
System.out.println(name);
}
table.close();
}