一、僞分佈模式
修改參數: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();
}