Apache HBase 入門(mén)
介紹
Quickstart 將使您運(yùn)行一個(gè)單節(jié)點(diǎn),獨(dú)立的 HBase 實(shí)例。
這一節(jié)描述了單節(jié)點(diǎn)獨(dú)立 HBase 的設(shè)置。 獨(dú)立的 實(shí)例具有所有的 HBase 守護(hù)進(jìn)程 —— Master,RegionServers,和 ZooKeeper —— 運(yùn)行于一個(gè)單獨(dú)的JVM 持久化到本地文件系統(tǒng)。它是我們的大多數(shù)基本部署配置文件。我們將向你展示如何使用 hbase shell CLI 在 HBase 中創(chuàng)建一個(gè)表,向表中插入行,對(duì)表執(zhí)行 put 和 scan 操作,啟用或禁用表,以及啟動(dòng)和停止 HBase。
除了下載 HBase,這個(gè)過(guò)程應(yīng)該耗費(fèi)不超過(guò) 10 分鐘。
在 0.94.x 之前,HBase 期望環(huán)回 IP 地址是 127.0.0.1 。Ubuntu 和 其它一些發(fā)行版默認(rèn)為 127.0.1.1 ,而這將導(dǎo)致一些問(wèn)題。參考 HBase 為什么關(guān)心 /etc/hosts ? 一文來(lái)了解更多信息。
在 Ubuntu 上,對(duì)于 0.94.x 和之前的版本,下面的 /etc/hosts 可以工作。如果遇到了問(wèn)題,可以使用這個(gè)作為模板。
- 127.0.0.1 localhost
- 127.0.0.1 ubuntu.ubuntu-domain ubuntu
這個(gè)問(wèn)題已經(jīng)在 hbase-0.96.0 及之后的版本中修復(fù)了。
JDK 版本要求
HBase 要求安裝 JDK。參考 Java 來(lái)了解關(guān)于支持的 JDK 版本的信息。
HBase 入門(mén)
過(guò)程:下載,配置,以獨(dú)立模式啟動(dòng) HBase
1.在 Apache下載鏡像 的列表中選擇一個(gè)下載站點(diǎn)。點(diǎn)擊頂部的建議鏈接。這將帶你到一個(gè) HBase Release 鏡像。點(diǎn)擊名為 stable 的目錄,然后下載以 .tar.gz 結(jié)尾的二進(jìn)制文件到你的本地文件系統(tǒng)。目前先不要下載以 src.tar.gz 結(jié)尾的文件。
2.解壓縮下載的文件,然后進(jìn)入新創(chuàng)鍵的文件夾。
- $ tar xzvf hbase-1.2.4-bin.tar.gz
- $ cd hbase-1.2.4
3.你需要在啟動(dòng) HBase 之前設(shè)置 JAVA_HOME 環(huán)境變量。你可以通過(guò)你的操作系統(tǒng)的常用機(jī)制設(shè)置環(huán)境變量,但是 HBase 提供了一個(gè)中心機(jī)制, conf/hbase-env.sh 。編輯這個(gè)文件,取消注釋以 JAVA_HOME 開(kāi)頭的行,并將它設(shè)置為你的操作系統(tǒng)的適當(dāng)位置。 JAVA_HOME 環(huán)境變量應(yīng)該被設(shè)置為包含可執(zhí)行文件 bin/java 的文件夾。大多數(shù)現(xiàn)代 Linux 操作系統(tǒng)提供了某種機(jī)制,比如 RHEL 或 CentOS 上的 /usr/bin/alternatives ,來(lái)透明地在 Java 這樣的可執(zhí)行文件的不同版本間進(jìn)行切換。在這種情況下,你可以將 JAVA_HOME 設(shè)置為包含到 bin/java 的符號(hào)鏈接的目錄,通常是 /usr 。
- JAVA_HOME=/usr
編輯 conf/hbase-site.xml ,它是主 HBase 配置文件。此時(shí),你只需要指定本地文件系統(tǒng)中 HBase 和 ZooKeeper 寫(xiě)數(shù)據(jù)的文件夾。默認(rèn)情況下,將在 /tmp 下創(chuàng)建一個(gè)新的文件夾。許多服務(wù)器被配置為在重啟之后刪除 tmp 下的內(nèi)容,因而你應(yīng)該將數(shù)據(jù)存儲(chǔ)在其它地方。下面的配置將把 HBase 的數(shù)據(jù)存儲(chǔ)在 hbase 目錄下,在名為 testuser 的用戶的主目錄下。粘貼 <configuration> 標(biāo)簽下的 <property> 標(biāo)簽,在新的 HBase 安裝中它應(yīng)該是空的。
示例1. 獨(dú)立 HBase 的 hbase-site.xml 示例
- <configuration>
- <property>
- <name>hbase.rootdir</name>
- <value>file:///home/testuser/hbase</value>
- </property>
- <property>
- <name>hbase.zookeeper.property.dataDir</name>
- <value>/home/testuser/zookeeper</value>
- </property>
- </configuration>
你無(wú)需創(chuàng)建 HBase 數(shù)據(jù)文件夾。HBase 將為你做這些。如果你創(chuàng)建了目錄,HBase 將嘗試執(zhí)行遷移,這不是你想要的。
上面例子中的 hbase.rootdir 指向 本地文件系統(tǒng) 中的目錄。’file:/‘ 前綴是我們?nèi)绾伪硎颈镜匚募到y(tǒng)的方式。要將 HBase 放置于已有 HDFS 實(shí)例上,則設(shè)置 hbase.rootdir 指向你的實(shí)例上的目錄:比如, hdfs://namenode.example.org:8020/hbase 。更多關(guān)于這一變體的信息,參考下面關(guān)于 基于 HDFS 的獨(dú)立 HBase 的小節(jié)。
1.HBase 提供了一種方便的方式,即 bin/start-hbase.sh 腳本來(lái)啟動(dòng)HBase。發(fā)出命令,如果一切正常,將有一條消息打印到標(biāo)準(zhǔn)輸出顯示 HBase 啟動(dòng)成功。你可以使用 jps 命令來(lái)驗(yàn)證你有一個(gè)稱(chēng)為 HMaster 的運(yùn)行進(jìn)程。在獨(dú)立模式 HBase 在這個(gè)單獨(dú)的 JVM 內(nèi)運(yùn)行所有的守護(hù)進(jìn)程,比如,HMaster,一個(gè)單獨(dú)的 HRegionServer,和 ZooKeeper 守護(hù)進(jìn)程。進(jìn)入 http://localhost:16010 來(lái)查看 HBase Web UI。
- $ bin/start-hbase.sh
- starting master, logging to /media/data/dev_tools/hbase-1.2.4/bin/../logs/hbase-hanpfei0306-master-ThundeRobot.out
- OpenJDK 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
- OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
- Could not start ZK at requested port of 2181. ZK was started at port: 2182. Aborting as clients (e.g. shell) will not be able to find this ZK quorum.
需要安裝 Java 且其處于可用狀態(tài)。如果你遇到了一個(gè)錯(cuò)誤,指示 Java 沒(méi)有安裝,但它已經(jīng)在你的系統(tǒng)中了,則可能位于非標(biāo)準(zhǔn)位置,編輯 conf/hbase-env.sh 文件并修改 JAVA_HOME 設(shè)置,使其指向包含了你的系統(tǒng)的 bin/java 的目錄。
過(guò)程:首次使用 HBase
1.連接 HBase
使用 hbase shell 命令連接運(yùn)行中的 HBase 實(shí)例,它位于你的 HBase 安裝的 bin/ 目錄下。在本示例中,省略了一些啟動(dòng) HBase Shell 時(shí)打印的用法和版本信息。HBase Shell 提示以一個(gè) > 字符結(jié)尾。
- $ bin/hbase shell
- hbase(main):001:0>
2.顯示 HBase Shell 幫助文本
鍵入 help 并按回車(chē),來(lái)顯示一些 HBase Shell 基本的用法信息,以及一些命令示例。注意所有的表名,行,列必須用單引號(hào)字符引起來(lái)。
3.創(chuàng)建表
使用 create 命令創(chuàng)建一個(gè)新表。你必須指定表名和 ColumnFamily 名。
- hbase(main):002:0> create 'test', 'cf'
- 0 row(s) in 1.3540 seconds
- => Hbase::Table - test
列出關(guān)于表的信息
使用 list 命令來(lái)做到這一點(diǎn):
- => Hbase::Table - test
- hbase(main):003:0> list
- TABLE
- test
- 1 row(s) in 0.0150 seconds
- => ["test"]
1.向表中放入數(shù)據(jù)
要向表中放入數(shù)據(jù),使用 put 命令。
- hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1'
- 0 row(s) in 0.0990 seconds
- hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2'
- 0 row(s) in 0.0080 seconds
- hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3'
- 0 row(s) in 0.0050 seconds
這里,我們插入了三個(gè)值,每次一個(gè)。第一次插入在 row1 ,列 cf:a ,值為 value1 。HBase中的列由列族前綴,本示例中是 cf ,后跟一個(gè)逗號(hào),及列限定符后綴,本示例中是 a 組成。
1.一次掃描表的所有數(shù)據(jù)
從 HBase 獲取數(shù)據(jù)的一種方式是掃描。使用 scan 命令掃描表的數(shù)據(jù)。你可以限定你的掃描,但現(xiàn)在,獲取所有數(shù)據(jù)。
- hbase(main):008:0> scan 'test'
- ROW COLUMN+CELL
- row1 column=cf:a, timestamp=1488785612445, value=value1
- row2 column=cf:b, timestamp=1488785622781, value=value2
- row3 column=cf:c, timestamp=1488785633890, value=value3
- 3 row(s) in 0.0220 seconds
1.獲得單行數(shù)據(jù)
要一次獲得單行數(shù)據(jù),使用 get 命令。
- hbase(main):009:0> get 'test', 'row1'
- COLUMN CELL
- cf:a timestamp=1488785612445, value=value1
- 1 row(s) in 0.0160 seconds
1.禁用表
如果你想要?jiǎng)h除表或修改它的設(shè)置,以及一些其它情形,你需要先禁用表,使用 disable 命令。你可以使用 enable 命令重新啟用它。
- hbase(main):010:0> disable 'test'
- 0 row(s) in 2.2380 seconds
- hbase(main):011:0> enable 'test'
- 0 row(s) in 1.2260 seconds
如果你測(cè)試上面的 enable 命令則再次禁用表:
- hbase(main):012:0> disable 'test'
- 0 row(s) in 2.2200 seconds
1.丟棄表
要丟棄(刪除)表,則使用 drop 命令。
- hbase(main):013:0> drop 'test'
- 0 row(s) in 1.2280 seconds
1.退出 HBase Shell
要退出 HBase Shell 并從你的集群斷開(kāi),使用 quit 命令。HBase 依然在后臺(tái)運(yùn)行。
過(guò)程:停止 HBase
1.與提供 bin/start-hbase.sh 腳本來(lái)方便地啟動(dòng) 所有 HBase 守護(hù)進(jìn)程的方式相同, bin/stop-hbase.sh 腳本用來(lái)停止它們。
- $ ./bin/stop-hbase.sh
- stopping hbase................
- $
1.發(fā)起了這個(gè)命令之后,它可能花費(fèi)幾分鐘來(lái)執(zhí)行關(guān)閉。使用 jps 來(lái)確保 HMaster 和 HRegionServer 進(jìn)程的關(guān)閉。
上文已經(jīng)向你展示了如何啟動(dòng)和停止一個(gè)獨(dú)立的 HBase 實(shí)例。下一節(jié)我們給出 hbase 部署的其它模式的快速概述。
偽分布式本地安裝
在學(xué)習(xí)了快速啟動(dòng)獨(dú)立模式的工作后,你可以重新配置 HBase 以偽分布式模式運(yùn)行。偽分布式模式意味著 HBase 依然完全運(yùn)行于單獨(dú)的主機(jī)上,但每個(gè) HBase 守護(hù)進(jìn)程(HMaster,HRegionServer,和 ZooKeeper )運(yùn)行于分開(kāi)的進(jìn)程中:在獨(dú)立模式下所有的守護(hù)進(jìn)程運(yùn)行于一個(gè) jvm 進(jìn)程/實(shí)例中。默認(rèn)情況下,除非像 快速開(kāi)始 一節(jié)所述那樣配置了 hbase.rootdir 屬性,你的數(shù)據(jù)依然存儲(chǔ)于 /tmp 下面。在本文的稍后部分,我們將把你的數(shù)據(jù)存儲(chǔ)于 HDFS 上,假設(shè)你有 HDFS 可用。你可以跳過(guò) HDFS 配置來(lái)繼續(xù)將數(shù)據(jù)存儲(chǔ)在本地文件系統(tǒng)。
Hadoop配置
這個(gè)過(guò)程假設(shè)你已經(jīng)在你的本地系統(tǒng)和/或遠(yuǎn)程系統(tǒng)中,配置好了 Hadoop 和 HDFS,它們正在運(yùn)行且可訪問(wèn)。它還假設(shè)你在使用 Hadoop 2.Hadoop 文檔中關(guān)于 設(shè)置單節(jié)點(diǎn)集群 的指南是一個(gè)很好的起點(diǎn)。
1.如果正在運(yùn)行的話就停止 HBase
如果你已經(jīng)學(xué)完了 快速開(kāi)始 且 HBase 依然處于運(yùn)行狀態(tài),則停止它。本過(guò)程將創(chuàng)建一個(gè)全新的 HBase 存儲(chǔ)數(shù)據(jù)目錄,因此你之前創(chuàng)建的任何數(shù)據(jù)庫(kù)都會(huì)丟失。
2.配置 HBase
編輯 hbase-site.xml 配置。首先,添加下面的屬性,它指導(dǎo) HBase 運(yùn)行于分布式模式,每個(gè)守護(hù)進(jìn)程一個(gè) JVM 實(shí)例。
- <property>
- <name>hbase.cluster.distributed</name>
- <value>true</value>
- </property>
接下來(lái),將 hbase.rootdir 從本地文件系統(tǒng)修改為你的 HDFS 實(shí)例,使用 hdfs://// URI 語(yǔ)法。在本例中,HDFS 運(yùn)行于 localhost 的端口 8020。
- <property>
- <name>hbase.rootdir</name>
- <value>hdfs://localhost:8020/hbase</value>
- </property>
你無(wú)需在 HDFS 下創(chuàng)建目錄。HBase 將為你做這些。如果你創(chuàng)建了目錄,HBase 將嘗試執(zhí)行遷移,這不是你想要的。
1.啟動(dòng) HBase
使用 bin/start-hbase.sh 命令啟動(dòng) HBase。如果你的系統(tǒng)配置正確,則 jps 命令應(yīng)該顯示 HMaster 和 HRegionServer 進(jìn)程正在運(yùn)行。
2.檢查 HDFS 中的 HBase 目錄
如果一切進(jìn)展順利,HBase 已經(jīng)在 HDFS 中創(chuàng)建了它的目錄。在上面的配置中,它被存儲(chǔ)在了 HDFS 上的 /hbase/ 。你可以使用 Hadoop 的 bin/ 目錄下的 hadoop fs 命令列出這個(gè)目錄。
- $ ./bin/hadoop fs -ls /hbase
- Found 7 items
- drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/.tmp
- drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/WALs
- drwxr-xr-x - hbase users 0 2014-06-25 18:48 /hbase/corrupt
- drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/data
- -rw-r--r-- 3 hbase users 42 2014-06-25 18:41 /hbase/hbase.id
- -rw-r--r-- 3 hbase users 7 2014-06-25 18:41 /hbase/hbase.version
- drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/oldWALs
3.創(chuàng)建表并用數(shù)據(jù)填充
你可以使用 HBase Shell 創(chuàng)建表,填充數(shù)據(jù),掃描并從中獲取值,使用與 shell 練習(xí)中相同的過(guò)程。
4.啟動(dòng)和停止備份 HBase Master(HMaster)服務(wù)器
在生產(chǎn)環(huán)境中,在相同的硬件上運(yùn)行多個(gè) HMaster 實(shí)例沒(méi)有意義,以運(yùn)行偽分布式集群那樣的方式對(duì)于生產(chǎn)環(huán)境同樣沒(méi)有意義。這個(gè)步驟只是為了測(cè)試和學(xué)習(xí)目的而提供。
HMaster 服務(wù)器控制 HBase 集群。你可以啟動(dòng)最多 9 個(gè)備份 HMaster 服務(wù)器,這將有總共 10 個(gè) HMaster,算上主要的那個(gè)。要啟動(dòng)一個(gè)備份 HMaster,使用 local-master-backup.sh 。對(duì)于每個(gè)你想要啟動(dòng)的備份master,添加一個(gè)參數(shù)來(lái)表示那個(gè) master 的端口偏移。每個(gè) HMaster 使用三個(gè)端口(默認(rèn)是16010,16020,16030)。端口偏移會(huì)加到這些端口上,因此,使用 2 作為偏移量的話,備份 HMaster 將使用 16012,16022, 和16032。下面的命令啟動(dòng) 3 個(gè)備份服務(wù)器,使用端口 16012/16022/16032,16013/16023/16033,和 16015/16025/16035。
- $ ./bin/local-master-backup.sh 2 3 5
要?dú)⑺纻浞?master,而不殺死整個(gè)集群,你需要找到它的進(jìn)程 ID(PID)。PID 存儲(chǔ)在一個(gè)名字類(lèi)似于 /tmp/hbase-USER-X-master.pid 的文件中。文件僅有的內(nèi)容是 PID。你可以使用 kill -9 命令來(lái)殺死那個(gè) PID。下面的命令將殺死端口偏移為 1 的 master,但集群依然在運(yùn)行:
- $ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
1.啟動(dòng)和停止額外的 RegionServers
HRegionServer 按照 HMaster 的指示管理在它的 StoreFiles 中的數(shù)據(jù)。通常,集群中的每個(gè)節(jié)點(diǎn)運(yùn)行一個(gè) HRegionServer 。在相同的系統(tǒng)上運(yùn)行多個(gè) HRegionServers 可能對(duì)于在偽分布式模式中的測(cè)試比較有用。 local-regionservers.sh 命令允許你運(yùn)行多個(gè) RegionServers 。它與 local-master-backup.sh
命令的工作方式類(lèi)似,在那種情況下你提供的每個(gè)參數(shù)表示一個(gè)實(shí)例的端口偏移。每個(gè) RegionServer 需要兩個(gè)端口,默認(rèn)端口是 16020 和 16030。然而,額外的 RegionServers 的基端口不是默認(rèn)端口,因?yàn)槟J(rèn)端口已經(jīng)被 HMaster 占用了,自 HBaser 版本 1.0.0 開(kāi)始,它也是一個(gè) RegionServer。使用端口 16200 和 16300 來(lái)代替。你可以在一個(gè)服務(wù)器上運(yùn)行 99 個(gè)額外的非 HMaster 或 備份 HMaster 的 RegionServers。下面的命令啟動(dòng)四個(gè)額外 RegionServers,運(yùn)行在從16202/16302開(kāi)始的順序端口(基本端口16200/16300加2)。
- $ .bin/local-regionservers.sh start 2 3 4 5
要手動(dòng)地停止一個(gè) RegionServer,使用 local-regionservers.sh 命令并傳入 stop 參數(shù)和要停止的服務(wù)器的偏移。
- $ .bin/local-regionservers.sh stop 3
1.停止 HBase
捏可以使用與 快速開(kāi)始 中介紹的相同的方法停止 HBase,使用 bin/stop-hbase.sh 命令。
高級(jí) - 完全分布式
事實(shí)上,你需要一個(gè)完全分布式的配置來(lái)完整測(cè)試 HBase 并在真實(shí)世界的場(chǎng)景中使用它。在一個(gè)分布式的配置中,集群包含多個(gè)節(jié)點(diǎn),它們中的每個(gè)都運(yùn)行一個(gè)或多個(gè) HBase 守護(hù)進(jìn)程。這些包括主和備份 Master 實(shí)例,多個(gè) ZooKeeper 節(jié)點(diǎn),和多個(gè) RegionServer 節(jié)點(diǎn)。
這個(gè)高級(jí)的 快速開(kāi)始 為你的集群添加兩個(gè)額外的節(jié)點(diǎn)。架構(gòu)將像下面這樣:
表 1. 分布式集群 Demo 架構(gòu)
Node Name | Master | ZooKeeper | RegionServer |
---|---|---|---|
node-a.example.com | yes | yes | no |
node-b.example.com | backup | yes | yes |
node-c.example.com | no | yes | yes |
這個(gè) 快速開(kāi)始 假設(shè)每個(gè)節(jié)點(diǎn)是一個(gè)虛擬機(jī),且它們都在相同的網(wǎng)絡(luò)上。它基于前面的 快速開(kāi)始 構(gòu)建, 偽分布式本地安裝 ,假設(shè)在那個(gè)過(guò)程里你配置的系統(tǒng)現(xiàn)在是 node -a 。在繼續(xù)之前停止 node-a 上的 HBase。
確保所有的節(jié)點(diǎn)具有完整的通信權(quán)限,且沒(méi)有防火墻規(guī)則可能阻止它們之間相互對(duì)話。如果你看到了類(lèi)似 no route to host 的錯(cuò)誤提示,則檢查你的防火墻。
過(guò)程:配置無(wú)密碼 SSH 訪問(wèn)
node-a 需要能夠登入 node-b 和 node-c (以及其自身) 來(lái)啟動(dòng)守護(hù)進(jìn)程。完成這一點(diǎn)最簡(jiǎn)單的方式是在所有主機(jī)上使用相同的用戶名,并配置從 node-a 無(wú)密碼 SSH 登錄到其它主機(jī)。
在 node-a 上生成一個(gè)密鑰對(duì)
當(dāng)以運(yùn)行 HBase 的用戶登錄時(shí),生成一個(gè) SSH 密鑰對(duì),使用如下的命令:
- $ ssh-keygen -t rsa
如果命令成功,則密鑰對(duì)的位置將打印到標(biāo)準(zhǔn)輸出。默認(rèn)的公鑰名字是 id_rsa.pub 。
在其它節(jié)點(diǎn)上創(chuàng)建放置共享密鑰的目錄。
在 node-b 和 node-c 上,以 HBase 用戶登錄,并在用戶的主目錄創(chuàng)建一個(gè) .ssh/ 目錄,如果它還沒(méi)有存在的話。如果它已經(jīng)存在了,請(qǐng)注意它可能已經(jīng)包含了其它密鑰。
1.將公鑰拷貝到其它節(jié)點(diǎn)。
安全地將公鑰從 node-a 拷貝到每個(gè)其它節(jié)點(diǎn),通過(guò)使用 scp 或其它安全的方式。在其它的每個(gè)節(jié)點(diǎn)上,創(chuàng)建一個(gè)新的名為 .ssh/authorized_keys 的文件,如果它還沒(méi)有存在的話,并將id_rsa.pub 文件的內(nèi)容添加到它的末尾。注意你也需要對(duì) node-a 自身做這些。
- $ cat id_rsa.pub >>~/.ssh/authorized_keys
2.測(cè)試無(wú)密碼登錄。
如果你正確地執(zhí)行了過(guò)程,如果你從 node-a SSH 到其它的節(jié)點(diǎn),使用相同的用戶名,那么你應(yīng)該不會(huì)再看到輸入密碼的提示符了。
由于 node-b 將運(yùn)行一個(gè)備份 Master,重復(fù)上面的過(guò)程,將你看到的 node-a 的地方替換為 node-b 。確保不要重寫(xiě)了已有的 .ssh/authorized_keys 文件,使用 >> 操作符將新的密鑰附接在已有文件,而不是 > 操作符。
過(guò)程:準(zhǔn)備 node-a
node-a 將運(yùn)行你的主 master 和 ZooKeeper 進(jìn)程,但沒(méi)有 RegionServers。停止在 node-a 上啟動(dòng) RegionServer。
1.編輯 conf/regionservers 并移除包含 localhost 的行。添加包含 node-b 和 node-c 的主機(jī)名和 IP 地址的行。
即使你不想在 node-a 上運(yùn)行 RegionServer,你應(yīng)該通過(guò)其它服務(wù)器將用以與它通信的主機(jī)名引用它。在這個(gè)例子中,那將是 node-a.example.com 。這使您能夠?qū)⑴渲梅职l(fā)到集群的每個(gè)節(jié)點(diǎn),任何主機(jī)名沖突。保存文件。
1.配置 HBase 使用 node-b 作為備份 master。
創(chuàng)建一個(gè)新的文件 conf/ called backup-masters ,添加新的包含 node-b 的主機(jī)名的行。在這個(gè)示例中,主機(jī)名是 node-b.example.com 。
1.配置 ZooKeeper
事實(shí)上,你應(yīng)該小心地考慮你的 ZooKeeper 配置。你可以在 zookeeper 中找到更多關(guān)于配置 ZooKeeper 的東西。這個(gè)配置將指導(dǎo) HBase 在集群的每個(gè)節(jié)點(diǎn)上啟動(dòng)并管理一個(gè) ZooKeeper 實(shí)例。
在 node-a 上,編輯 conf/hbase-site.xml 并添加如下的屬性。
- <property>
- <name>hbase.zookeeper.quorum</name>
- <value>node-a.example.com,node-b.example.com,node-c.example.com</value>
- </property>
- <property>
- <name>hbase.zookeeper.property.dataDir</name>
- <value>/usr/local/zookeeper</value>
- </property>
1.你的配置中其它用 localhost 引用 node-a 的地方,修改引用指向其它節(jié)點(diǎn)將用以引用 node-a 的主機(jī)名。在這些例子中,主機(jī)名是 node-a.example.com 。
過(guò)程:準(zhǔn)備 node-b 和 node-c
node-b 將運(yùn)行一個(gè)備份 master 服務(wù)器和一個(gè) ZooKeeper 實(shí)例。
1.下載并解壓縮 HBase。
下載并解壓縮 HBase 到 node-b ,就像你在 獨(dú)立和偽分布式快速開(kāi)始中做的那樣。
1.將配置文件從 node-a 復(fù)制到 node-b 和 node-c 。
你的集群的每個(gè)節(jié)點(diǎn)需要具有相同的配置信息。復(fù)制 conf/ 目錄的內(nèi)容到 node-b 和 node-c 上的 conf/ 目錄。
過(guò)程:?jiǎn)?dòng)并測(cè)試你的集群
1.確保 HBase 沒(méi)有在任何節(jié)點(diǎn)上運(yùn)行。
如果你忘了在前面的測(cè)試中停止 HBase,你將遇到錯(cuò)誤。使用 jps 命令檢查 HBase 是否在你的任何節(jié)點(diǎn)上運(yùn)行。查找進(jìn)程 HMaster,HRegionServer,和 HQuorumPeer。如果它們存在則殺掉它們。
1.啟動(dòng)集群。
在 node-a 上,發(fā)出 start-hbase.sh 命令。你的輸出將類(lèi)似下面這樣。
- $ bin/start-hbase.sh
- node-c.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-c.example.com.out
- node-a.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-a.example.com.out
- node-b.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-b.example.com.out
- starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-node-a.example.com.out
- node-c.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-c.example.com.out
- node-b.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-b.example.com.out
- node-b.example.com: starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-nodeb.example.com.out
ZooKeeper 先啟動(dòng),然后是 master,接著是 RegionServers,最后是備份 masters。
1.驗(yàn)證進(jìn)程正在運(yùn)行。
在集群的每個(gè)節(jié)點(diǎn)上,運(yùn)行 jps 命令并驗(yàn)證正確的進(jìn)程正在每個(gè)服務(wù)器上運(yùn)行。你也可能看到其它的 Java 進(jìn)程正在你的服務(wù)器上運(yùn)行,如果它們用于其它目的。
實(shí)例 2. node-a jps 輸出
- $ jps
- 20355 Jps
- 20071 HQuorumPeer
- 20137 HMaster
實(shí)例 3. node-b jps 輸出
- $ jps
- 15930 HRegionServer
- 16194 Jps
- 15838 HQuorumPeer
- 16010 HMaster
實(shí)例 4. node-a jps 輸出
- $ jps
- 13901 Jps
- 13639 HQuorumPeer
- 13737 HRegionServer
ZooKeeper 進(jìn)程名
HQuorumPeer 進(jìn)程是由 HBase 控制及啟動(dòng)的 ZooKeeper 實(shí)例。如果你以這種方式使用 ZooKeeper,則每個(gè)集群節(jié)點(diǎn)限制只有一個(gè)實(shí)例,且只有測(cè)試時(shí)才合適。如果 ZooKeeper 不在 HBase 下運(yùn)行,則進(jìn)程名稱(chēng)為 HQuorumPeer 。更多關(guān)于 ZooKeeper 配置的內(nèi)容,包括在 HBase 下使用一個(gè)外部的 ZooKeeper 實(shí)例,請(qǐng)參考 zookeeper 。
1.瀏覽 Web UI。
Web UI 端口改變
Web UI 端口改變
在版本新于 0.98.x 的 HBase 中,HBase Web UI 使用的 HTTP 端口從 Master 采用60010,每個(gè) RegionServer 采用 60030 變?yōu)榱?Master 采用 16010 且 RegionServer 采用 16030。
如果所有的東西都設(shè)置正確,你應(yīng)該能夠連接到 Master 的 UI http://node-a.example.com:16010/ 或從 master 的 http://node-b.example.com:16010/,使用瀏覽器。如果你能夠通過(guò) localhost 連接,但無(wú)法通過(guò)其它主機(jī)名,則檢查你的防火墻規(guī)則。你可以在它們的 IP 地址的端口上 16030 看到每個(gè) RegionServers 的 web UI,或點(diǎn)擊 Master 的 web UI 中它們的鏈接。
當(dāng)節(jié)點(diǎn)或服務(wù)消失時(shí)測(cè)試發(fā)生了什么。
具有三個(gè)節(jié)點(diǎn)的集群,就像你配置的那樣,不是非常有彈性的。當(dāng)主 Master 或 RegionServer 消失時(shí),你依然可以通過(guò)殺掉進(jìn)程或看 logs,測(cè)試發(fā)生了什么。