本博客采用創(chuàng)作共用版權(quán)協(xié)議, 要求署名性昭、非商業(yè)用途和保持一致. 轉(zhuǎn)載本博客文章必須也遵循署名-非商業(yè)用途-保持一致的創(chuàng)作共用協(xié)議.
個(gè)人博客地址: http://andrewliu.tk, 歡迎持續(xù)關(guān)注和友聯(lián).
1. 千篇一律的HBase簡介
HBase是Hadoop的數(shù)據(jù)庫, 而Hive數(shù)據(jù)庫的管理工具, HBase具有分布式, 可擴(kuò)展及面向列存儲
的特點(diǎn)(基于谷歌BigTable). HBase可以使用本地文件系統(tǒng)和HDFS文件存儲系統(tǒng), 存儲的是松散的數(shù)據(jù)(key-value的映射關(guān)系).
HBase位于HDFS的上層, 向下提供存儲, 向上提供運(yùn)算
2. HBase安裝
HBase有單機(jī), 偽分布式, 全分布式運(yùn)行模式
依賴:
- 匹配HBase的Hadoop版本
- Java JDK 1.6+
- SSH
安裝
$ brew install hbase
# 安裝在/usr/local/Cellar/hbase/1.0.0
配置HBase
在conf/hbase-env.sh
設(shè)置JAVA_HOME
$ cd /usr/local/Cellar/hbase/1.0.0/libexec/conf
$ vim hbase-env.sh
export JAVA_HOME="/usr/bin/java"
在conf/hbase-site.xml
設(shè)置HBase的核心配置
$ vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
//這里設(shè)置讓HBase存儲文件的地方
<value>file:///Users/andrew_liu/Downloads/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
//這里設(shè)置讓HBase存儲內(nèi)建zookeeper文件的地方
<value>/Users/andrew_liu/Downloads/zookeeper</value>
</property>
</configuration>
/usr/local/Cellar/hbase/1.0.0/bin/start-hbase.sh
提供HBase的啟動
$ ./start-hbase.sh
starting master, logging to /usr/local/Cellar/hbase/1.0.0/libexec/bin/../logs/hbase-andrew_liu-master-Andrew-liudeMacBook-Pro.local.out
驗(yàn)證是否安裝成功
$ jps
3440 Jps
3362 HMaster # 有HMaster則說明安裝成功
1885
啟動HBase Shell
$ ./bin/hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.0.0, r6c98bff7b719efdb16f71606f3b7d8229445eb81, Sat Feb 14 19:49:22 PST 2015
1.8.7-p357 :001 >
1.8.7-p357 :001 > exit #退出shell
停止HBase運(yùn)行
$ ./bin/stop-hbase.sh
stopping hbase....................
3. 偽分布式模式
必須關(guān)閉HBase
修改hbase-env.sh
HBASE_MANAGE_XK = true
修改hbase-site.xml, 設(shè)置HBase使用分布式模式運(yùn)行
<configuration>
<property>
<name>hbase.rootdir</name>
//Here you have to set the path where you want HBase to store its files.
<value>hdfs://localhost:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
hbase.rootdir
路徑一定要跟hadoop中core-site.xml
中fs.default.name相同
change the hbase.rootdir from the local filesystem to the address of your HDFS instance ---offical quick start
如何兩處設(shè)置不同會引起ERROR: Can't get master address from ZooKeeper; znode data == null錯(cuò)誤錯(cuò)誤
在啟動HBase之前, 請先啟動Hadoop, 使之運(yùn)行
啟動HBase
$ ./start-hbase.sh
$ jps #驗(yàn)證是否啟動成功, 包含HMaster和HRegionServer說明啟動成功
6400 DataNode
7872 Jps
7702 HMaster
7624 HQuorumPeer
6315 NameNode
6508 SecondaryNameNode
6716 NodeManager
7804 HRegionServerHBase
6623 ResourceManager
如果在啟動HBase后, 提示如下
regionserver running as process 4667. Stop it first.
#請執(zhí)行以下操作
$ kill -9 4667 #這里4667是要?dú)⒌舻倪M(jìn)程號
啟動成功HBase會在HDFS下創(chuàng)建/hbase目錄
$ hdfs dfs -ls /hbase
4. HBase Shell
$ hbase shell #啟動HBase Shell
#創(chuàng)建表
> create 'student', 'description', 'course' #創(chuàng)建表名為student的表, 指明兩個(gè)列名, 分別為description和course
#信息明細(xì)
> list 'student' #列出list表信息
#插入數(shù)據(jù)
> put 'student', 'row1', 'description:age', '18' #意思為在student表row1處插入description:age的數(shù)據(jù)為18
> put 'student', 'row1', 'description:name', 'liu'
put 'student', 'row1', 'course:chinese', '100'
#一次掃描所有數(shù)據(jù)
> scan 'student
#使表失效 / 有效
> disable 'student'
> enable 'student'
#刪除表(要先disable)
> drop 'student'
#退出shell
> quit
5. HBase與HDFS
HBase是一個(gè)稀疏的長期存儲的, 多維度的, 排序的映射表, 通過行鍵, 行鍵 + 時(shí)間戳 或 行鍵 + 列(列族: 列修飾符)就可以定位特殊的數(shù)據(jù)
5.1. HBase體系結(jié)構(gòu)
HBase的服務(wù)器體系遵從簡單的主從服務(wù)器架構(gòu), 由HRegion服務(wù)器群
和HBase服務(wù)器構(gòu)成
, Master服務(wù)器負(fù)責(zé)管理所有的HRegion服務(wù)器, 而HBase中所有的服務(wù)器通過ZooKeeper來進(jìn)行協(xié)調(diào)并處理HBase服務(wù)器運(yùn)行期間可能遇到的錯(cuò)誤.
HBase邏輯上的表可能會被劃分為多個(gè)HRegion, 然后存儲在HRegion服務(wù)器上.
- HBase不涉及數(shù)據(jù)的直接刪除和更新, 當(dāng)Store中的Storefile數(shù)量超出閾值會觸發(fā)合并操作
- HMaster的主要任務(wù)是告訴每個(gè)HRegion服務(wù)器它要維護(hù)那些HRegion
- ZooKeeper存儲的是HBase中ROOT表和META表的位置, ZooKeeper還負(fù)責(zé)監(jiān)控各個(gè)機(jī)器的狀態(tài)
元數(shù)據(jù)子表采用三級索引結(jié)構(gòu): 根子表->用戶表的元數(shù)據(jù)表->用戶表
5.2. Java API
- HBaseConfiguration, 通過此類對HBase進(jìn)行配置
- HBaseAdmin, 提供一個(gè)接口來管理HBase數(shù)據(jù)庫的表信息, 提供創(chuàng)建, 刪除表, 列出表項(xiàng),
使表有效或無效
, 以及添加或刪除列族成員 - HTableDescriptor, 包含了表的名字及對應(yīng)表的列族
- HColumnDescriptor, 維護(hù)關(guān)于列族的信息
- HTable, 用來與HBase表進(jìn)行通信
- Put, 用來對單個(gè)行執(zhí)行添加操作
- Get, 用來獲取單個(gè)行的相關(guān)信息
- Result, 存儲Get或者Scan操作后獲取的表的單行值