HBase是一個開源的非關係型分佈式數據庫(NoSQL),它參考了谷歌的BigTable建模,實現的編程語言爲 Java。它是Apache軟件基金會的Hadoop項目的一部分,運行於HDFS文件系統之上,爲 Hadoop 提供相似於BigTable 規模的服務,能夠存儲海量稀疏的數據,並具有必定的容錯性、高可靠性及伸縮性。主要應用場景是實時隨機讀寫超大規模的數據。java
HBase在列上實現了BigTable論文提到的壓縮算法、內存操做和布隆過濾器。HBase的表可以做爲MapReduce任務的輸入和輸出,能夠經過Java API來存取數據,也能夠經過REST、Avro或者Thrift的API來訪問。算法
HBase不能取代RDBMS,由於兩者的應用場景不一樣。HBase爲了解決海量數據的擴展性,支持簡單的增長節點來實現線性擴展,從而在集羣上管理海量的非結構化或半結構化的稀疏數據。HBase僅能經過主鍵(raw key)或主鍵的range檢索數據,支持單行事務。shell
上圖描述Hadoop EcoSystem中的各層系統。其中,HBase位於結構化存儲層,Hadoop HDFS爲HBase提供了高可靠性的底層存儲支持,Hadoop MapReduce爲HBase提供了高性能的計算能力,Zookeeper爲HBase提供了穩定服務和failover機制。數據庫
此外,Pig和Hive還爲HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的很是簡單。 Sqoop則爲HBase提供了方便的RDBMS數據導入功能,使得傳統數據庫數據向HBase中遷移變的很是方便。apache
在終端輸入 java -version
來查看你機子上的 Java 版本;編程
Hadoop的具體安裝能夠參見咱們之前的課程:Hadoop部署及管理。須要注意的是僞分佈模式下,HBase 的版本須要和 Hadoop版本 匹配
,否則極可能容易出錯。你能夠在HBase的lib目錄下看到對應的Hadoop的Jar文件版本。vim
在這裏,咱們使用了Hadoop V2.4.1版本以及HBase V0.98.11版本。ruby
Hadoop 2.4.1 目錄位置在實驗樓環境中的 /opt/hadoop-2.4.1
。bash
SSH的安裝,在Hadoop部署及管理中也涵蓋了這部份內容。SSH用來管理遠程Hadoop和HBase守護進程。服務器
本實驗環境下,爲了你們的方便,咱們已經爲你們準備好了這些必要條件,你只須要專一於HBase的安裝配置便可。
確認上面的條件咱們都準備好了以後,就能夠開始安裝HBase了。實驗開始前,你應該切換到 hadoop 用戶:
$ su hadoop
HBase的安裝一般分爲3種模式:
單機模式的安裝很是簡單,幾乎不用對安裝文件作什麼修改就可使用。單機模式下,HBase並不使用HDFS,所以將安裝文件解壓後就幾乎能夠直接運行。輸入命令下載HBase:
$ sudo wget http://labfile.oss.aliyuncs.com/hbase-0.98.11-hadoop2-bin.tar.gz
hbase 其餘下載源參考 : https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-1.4.9-bin.tar.gz
hbase 其餘下載源參考 : https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-1.4.9-bin.tar.gz
再將其壓縮包解壓:
$ sudo tar zxvf hbase-0.98.11-hadoop2-bin.tar.gz
因爲解壓出來的文件名可能很長,建議修改成較短文件名,例如:
$ sudo mv hbase-0.98.11-hadoop2 /opt/hbase $ sudo chmod 777 /opt/hbase #授予權限
在運行以前,咱們須要對HBase進行相關配置。建議你們修改 ${HBase-Dir}/conf/hbase-site.xml 文件,由於即便你修改了hbase-default.xml文件,也會被hbase-site.xml中的配置所覆蓋。也就是說,最終是以 hbase-site.xml 中的配置爲準的。咱們作以下修改:
<configuration> <property> <name>hbase.rootdir</name> <value>file:///tmp/hbase-${user.name}/hbase</value> </property> </configuration>
注意:修改 ${user.name}
爲你本身的 hadoop 用戶名
僞分佈模式是一個運行在單臺機器上的分佈式模式。此模式下,HBase全部的守護進程將運行在同一個節點之上,並且須要依賴HDFS,所以在此以前必須保證HDFS已經成功運行,請參考咱們前面的課程:Hadoop僞分佈模式配置部署。確認無誤後,咱們就能夠開始配置HBase的參數了。
(1)配置 hbase-site.xml 文件
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>
hbase.rootdir:該參數制定了HReion服務器的位置,即數據存放的位置。主要端口號要和Hadoop相應配置一致。
hbase.cluster.distributed:HBase的運行模式。false是單機模式,true是分佈式模式。若爲false, HBase和Zookeeper會運行在同一個JVM裏面。默認爲false.
(2)設置環境變量
另外,咱們須要設置一些環境變量。修改HBase下的conf目錄中的hbase-env.sh文件(你的jdk路徑可能不同):
export JAVA_HOME=/usr/local/jdk1.7.0_67 export HBASE_MANAGES_ZK=true
export HBASE_MANAGES_ZK=true
此配置信息,表示設置由hbase本身管理zookeeper,不須要單獨的zookeeper, 本文搭建的 Hbase 用的是自帶的 zookeeper,故設置爲true.
最後修改添加PATH, 則輸入:
$ sudo vim /etc/profile
來修改 /etc/profile 文件:
# set hbase path export HBASE_HOME=/opt/hbase export PATH=$PATH:/opt/hbase/bin
因爲徹底分佈模式須要多臺機器,在這裏咱們就不給出演示了。
正如上面咱們提到的,HBase安裝分爲3個模式,所以HBase的運行天然也分爲一樣的3個模式。
(1)啓動
單機模式下不須要HDFS,所以不須要事先啓動Hadoop,直接啓動HBase便可。終端下輸入命令:./start-hbase.sh
注意:路徑要正確,應爲:$HBASE_HOME/bin 目錄,不然會找不到 start-hbase.sh 這個文件,就會出現錯誤
(2)查看進程
咱們能夠經過 jps
來查看當前 HBase 的進程:
(3)中止 HBase 服務
輸入 ./stop-hbase.sh
(1)啓動和查看進程
前面咱們提到過,僞分佈模式下,必須先確保 HDFS 已經啓動。所以,咱們先啓動 HDFS,輸入命令: ./start-all.sh
使用 jps
查看目前 Hadoop 的進程:
HDFS 成功啓動以後,咱們再啓動 HBase,這裏和單機模式下啓動 HBase 的方法同樣,輸入命令: ./start-hbase.sh
:
此時再使用 jps
查看,能夠看到多了HBase的相關進程:
(2)進入 HBase Shell
經過HBase Shell用戶能夠方便地建立、刪除以及修改表,還能夠向表中添加數據、列出表中的相關相信等。
輸入 help
來查看其所支持的命令,能夠根據本身的須要選擇。
exit
退出shell
(3)中止 HBase
根據依賴關係,咱們須要先關閉HBase, ./stop-hbase.sh
:
經過 jps
能夠看到,HBase相關的進程沒有了:
再關閉HDFS, ./stop-all.sh
.
最後,再經過 jps
發現 HDFS 的進程也沒有了:
實例配置:
[root@hadoop000 conf]# cat hbase-site.xml <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://hadoop000:8020/hbase</value> //這個端口必須與hadoop core-site.xml 配置文件下 端口匹配 </property> <property> <name>hbase.master.info.port</name> <value>60010</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>
[root@hadoop000 conf]# cat hbase-env.sh ***** export JAVA_HOME=/home/JDK/jdk1.8.0_181 export HBASE_MANAGES_ZK=true *****
[root@hadoop000 conf]# cat regionservers hadoop000
成功啓動後 驗證
[root@hadoop000 hadoop]# jps
15760 ResourceManager
19235 Jps
15461 DataNode
18426 HQuorumPeer
15851 NodeManager
15340 NameNode
18493 HMaster
18621 HRegionServer
15614 SecondaryNameNode