本篇是對HBase官方參考文檔的大體翻譯,介於本人英文水平實在有限,難免有紕漏之處。本篇不只是對官方文檔的翻譯,還加入了一些本人對HBase的理解。在翻譯過程中,一些沒有營養的廢話,我就忽略了沒有翻譯。本篇按照 2016年 5、6 月 最新版的 http://hbase.apache.org/boo ...
本篇是對HBase官方參考文檔的大體翻譯,介於本人英文水平實在有限,難免有紕漏之處。本篇不只是對官方文檔的翻譯,還加入了一些本人對HBase的理解。在翻譯過程中,一些沒有營養的廢話,我就忽略了沒有翻譯。本篇按照 2016年 5、6 月 最新版的 http://hbase.apache.org/book.html 進行翻譯,此時:
而 stable 文件夾中的內容:
---------------------------------------------------------------------------------------------------------------------------------------------
Getting Started(準備開始)
1、簡介
文檔將帶你搭建和運行一個單節點、單實例的HBase,隨後是一個偽分散式的單機實例,最後是一個完全分散式的集群。
2、快速開始--單機模式HBase
本指南描述的是在本地文件系統中搭建單機模式下的HBase。對於一個HBase生產環境下的實例來說,這是不恰當的配置,但是,在本地測試情況下運行是允許的。本章節將要像你展示使用HBase shell 命令創建一個表,插入數據,對錶進行put和scan操作,enable 或者 disable 表,並且運行和停止HBase。除去下載HBase,整個過程應該不超過十分鐘。
在本地文件系統下使用HBase不保證耐久性。如果文件未正常關閉,本地HDFS文件系統實現將丟失編輯的內容。當你試用新軟體時這是很有可能發生的,經常啟動和停止守護進程通常是並不幹凈的。你需要確保在HDFS運行HBase所有的寫入是已經保存了的。針對本地文件系統的運行能夠讓你快速熟悉怎樣生產系統任務,獲取第一階段的評價。關於本地文件系統上的問題更詳盡的描述,請訪問 HBASE-3696 。
在HBase 0.94.X 版本之前,HBase期望的IP地址是 127.0.0.1。Ubuntu及一些其他分支預設是 127.0.0.1,這將給你帶來麻煩。
*** Example 1. 對於Ubuntu,HBase 0.94.x及早期版本正確的配置如下。如果你陷入困境,請使用如下配置。
127.0.0.1 localhost 127.0.0.1 ubuntu.ubuntu-domain ubuntu
2.1、JDK版本要求
*** HBase 0.98.5 及 更新版本,必須在集群的每一個節點設置JAVA_HOME。hbase-env.sh提供了一個便利的機制。
2.2、開始使用HBase
步驟:下載,配置,啟動。
(1)、從 Apache Download Mirrors 列表中選擇一個下載站。它為你提供HBase發佈版的鏡像。點擊名為“stable”的文件夾,然後下載以“.tar.gz”結尾的二進位文件到本地文件系統。在HBase 1.X版本之前,一定要選擇你可能用到的Hadoop的更遲版本對應的HBase版本(大部分情況下,你應該選擇hadoop 2.X版本的,類似hbase-0.98.13-hadoop2-bin.tar.gz)。暫時不下載以 “src.tar.gz”結尾的文件。
(2)、解壓下載文件,並打開目錄。
$ tar xzvf hbase-<?eval ${project.version}?>-bin.tar.gz $ cd hbase-<?eval ${project.version}?>/
(3)、對於HBase 0.98.5 及之後版本,在啟動HBase前,你需要設置JAVA_HOME環境變數。在HBase 0.98.5之前,如果沒有設置環境變數,HBase嘗試檢測Java的位置。你可以通過操作系統的一般機制來設置環境變數,但HBase提供一個中樞機制 conf/hbase-env.sh 。編輯該文件,取消 JAVA_HOME 前的註釋符,並設置你本機適當的位置。
*** 這個指令假設集群的每個節點都採用同樣的配置。如果不一致,你需要單獨設置每個節點。
(4)、編輯 conf/hbase-site.xml 這個HBase主配置文件。這時候,你僅需要指定本地文件系統中HBase和Zookeeper寫數據的目錄即可。預設是在/tmp目錄下新建一個目錄。許多機器在重啟後是會刪除/tmp目錄內容的,所以你需要存儲數據到別處。下麵的配置將存儲HBase的數據在testuser用戶主目錄下的hbase目錄。在標簽<configuration>下粘貼<property>標簽,在一個新安裝的HBase中這應該是個空的。你不要創建HBase數據目錄。HBase會為你這麼做。如果你創建了目錄,HBase會遷移,而這不是你想要的。
*** Example 2. 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>
(5)、bin/start-hbase.sh 此腳本為啟動HBase提供了方便的途徑。執行命令,在標準輸出的日誌里可以看到HBase啟動成功的消息。你可以使用 jps 命令來確認你有一個正在運行的進行 HMaster。在 HBase 的單例模式中,所有的服務都運行在同一JVM中,如 HMaster,單例的 HRegionServer 和 ZooKeeper 的守護進程。
步驟:使用HBase
1)、連接HBase。
在HBase安裝目錄下bin/ 目錄下使用 hbase shell 命令連接正在運行的HBase實例。在下麵這個例子中,當你啟動HBase Shell 並忽略列印的一些用法和版本信息後,HBase Shell 是以字元‘>’結尾。
$ ./bin/hbase shell hbase(main):001:0>
2)、預覽 HBase Shell 的幫助文本。
輸入 help 並點擊回車,可以看到一些基本的HBase Shell 用法信息,以及一些示例命令。
3)、創建一個表。
使用 create 命令創建一個表,你必須執行一個表名和列族名。
hbase(main):001:0> create 'test', 'cf' 0 row(s) in 0.4170 seconds => Hbase::Table - test
4)、關於你的表的列表信息。
使用 list 命令:
hbase(main):002:0> list 'test' TABLE test 1 row(s) in 0.0180 seconds => ["test"]
5)、插入數據到表中。
使用 put 命令插入數據。
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1' 0 row(s) in 0.0850 seconds hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2' 0 row(s) in 0.0110 seconds hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3' 0 row(s) in 0.0100 seconds
在這裡,我們往 test 表中依次插入了三條數據。首先插入了一條rowkey為row1、列為 cf:a、值為 value1 的數據。HBase中的列是包含列族首碼的,在這個例子中,冒號前的為列族 cf ,冒號後的為列限定符 a 。
6)、掃描表的全部數據。
從HBase獲取數據的途徑之一就是 scan 。使用 scan 命令掃描表數據。你可以對掃描做限制,不過現在,獲取全部的數據。
hbase(main):006:0> scan 'test' ROW COLUMN+CELL row1 column=cf:a, timestamp=1421762485768, value=value1 row2 column=cf:b, timestamp=1421762491785, value=value2 row3 column=cf:c, timestamp=1421762496210, value=value3 3 row(s) in 0.0230 seconds
7)、獲取一條數據。
使用 get 命令一次獲取一條數據。
hbase(main):007:0> get 'test', 'row1' COLUMN CELL cf:a timestamp=1421762485768, value=value1 1 row(s) in 0.0350 seconds
8)、禁用一個表。
如果你想刪除一個表或者改變表的設置,以及一些其他的場景,首先你需要使用 disable 命令禁用表。你可以使用 enable 命令“反禁用”即啟用表。
hbase(main):008:0> disable 'test' 0 row(s) in 1.1820 seconds hbase(main):009:0> enable 'test' 0 row(s) in 0.1770 seconds
9)、刪除表。
使用 drop 命令刪除一個表。
hbase(main):011:0> drop 'test' 0 row(s) in 0.1370 seconds
10)、退出。
使用 quit 命令退出命令行並從集群斷開連接。HBase 仍然在後臺運行。
步驟:停止HBase。
1)、bin/start-hbase.sh 這個腳本提供了便利的啟動所有 HBase 服務,同樣地,bin/stop-hbase.sh 腳本用來停止所有HBase服務。
$ ./bin/stop-hbase.sh stopping hbase....................
2)、在使用這個命令後,它可能需要過幾分鐘才能停掉服務進程。使用 jps 命令來確認 HMaster 和 HRegionServer 進程是否關閉。
2.3 中級 ----- 本地偽分散式安裝
在你學習過前面內容後,你要重新配置 HBase 來運行偽分散式模式。偽分散式模式的意思是 HBase 仍然在一臺機器上完整的運行,不過,每個HBase 服務(HMaster,HRegionServer,Zookeeper)是在單獨的一個進程中運行。預設的,如果你像上面描述的一樣沒有配置 hbase.rootdir ,你的數據仍然存儲在 /tmp 目錄下。在本文的稍後部分中,假設你有可用的HDFS,我們存儲數據在HDFS。你可以略過HDFS配置繼續存儲你的數據在本地文件系統。
(1)、如果正在運行,請先停掉HBase。
如果你完成了單例模式的HBase並且正在運行,請停掉它。這個步驟將完全的創建一個存儲HBase數據的新目錄,所以之前你創建的資料庫將丟失。
(2)、配置HBase。
編輯 hbase-site.xml 進行配置。首先,添加 property,使 HBase 以分散式模式運行,並且一個 JVM 實例化一個守護進程。
<property> <name>hbase.cluster.distributed</name> <value>true</value> </property>
接下來,把 hbase.rootdir 的配置從本地文件系統改為你的HDFS實例的地址,並使用 hdfs:// 開頭的 URL 語法。下麵這個例子中,HDFS是運行在本地埠 8020。
<property> <name>hbase.rootdir</name> <value>hdfs://localhost:8020/hbase</value> </property>
你不需要在HDFS中創建 /hbase 目錄,HBase會自動創建。不過,如果你創建了 /hbase 目錄,HBase會嘗試移動,而這不是你想要的。
(3)、啟動HBase。
使用 bin/start-hbase.sh 命令啟動HBase。如果你配置得當,使用 jps 命令可以查看到 HMaster 和 HRegionServer 進程正在運行。
(4)、檢查 HDFS 中 HBase 目錄。
如果一切正常,HBase 會在 HDFS 創建目錄。在配置文件中,是存儲在HDFS的 /hbase 目錄。你可以使用 hadoop fs 命令查看這個目錄。
$ 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
(5)、創建一個表,並插入數據。
你可以使用 HBase Shell 創建一個表,插入數據,並 scan 和 get 數據,使用方法和上面一樣。
(6)、啟動和停止一個 HMaster 備份伺服器。
對於生產環境而言在同一個機器上運行多個 HMaster 實例是沒有意義的,同樣的,在生產環境上運行偽分散式模式也是沒有意義的。
HMaster 伺服器用來管理HBase集群。你可以弄10個 HMaster,其中9個做備份 HMaster 伺服器。使用 local-master-backup.sh 啟動備份HMaster 。對於每個你想要啟動的 master,可以添加一個參數代表這個 master 的埠。每個HMaster使用三個埠,預設是16010,16020,16030 。埠偏移量添加到這些埠,所以偏移量為2 ,備份HMaster會使用16012/16022/16032 的埠。以下命令使用 16012/16022/16032, 16013/16023/16033, 和16015/16025/16035 作為埠號。
$ ./bin/local-master-backup.sh 2 3 5
從整個集群中移除某一個備份 master ,你需要找到進程ID(PID)。PID存儲在名稱類似於 /tmp/hbase-USER-X-master.pid 的文件中。你可以使用 kill -9 命令來殺死這個PID。下麵的命令將從正在運行的集群中移除一個埠偏移量為1的 master。
$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
(7)、啟動和停止附加的 RegionServer 。
HRegionServer 在 HMaster 的指導下管理 storefile 中的數據。一般的,一個 HRegionServer 在集群的每個節點上運行。偽分散式模式下在一個系統中運行多個HRegionServer 對於測試是有用的。local-regionservers.sh 命令允許你運行多個 RegionServer。它的工作原理類似於 local-master-backup.sh 命令,你提供的參數代表實例埠偏移量。每個 RegionServer 需要兩個埠,預設的是16020和16030 。無論怎樣,附件的 RegionServer 的基本埠不能使用預設的,因為預設埠被HMaster 埠占用,這也是 HBase 1.0.0 版本 RegionServer 的一個使用。基本埠用16200和16300替代。在同一臺機器上,你可以運行99個附加的RegionServer,不是HMaster或者備份HMaster。下麵這個命令啟動4個附件的 RegionServer ,運行在從 16202/16302 開始連續的埠(16200/16300 埠每次加2)。
$ .bin/local-regionservers.sh start 2 3 4 5
使用 local-regionservers.sh 命令加上 stop 參數及伺服器埠偏移量手動地停止一個RegionServer
$ .bin/local-regionservers.sh stop 3
2.4 高級 ----- 完全分散式
實際上,你需要一個完全分散式配置並且使用真實情景去完全的測試HBase。在一個分散式配置中,一個集群包含多個節點,每個節點運行一個或者多個 HBase 守護進程。他們包含主 HMaster 和備份 HMaster 實例,多個 Zookeeper 節點,和多個 RegionServer 節點。
添加大於兩個的節點到你的集群,實例如下:
表1. 分散式集群樣例模板
這個示例採取每個節點是在同一網段的虛擬機。分散式模式的搭建是根據之前的偽分散式的搭建,假設之前的配置步驟是在現在的 node-a 節點。停止掉 HBase 後再繼續。
!請確保每個節點的防火牆關閉。
步驟:配置SSH互信
(略過,請自行 Google 或者某度!)
步驟:準備節點 node-a
node-a 節點用來運行主 master 和 Zookeeper 進程,不過沒有 RegeionServer 。
(1)、編輯 cong/regionservers ,並且移除 lcoalhost 行。然後添加 node-b 和 node-c 的主機名或者IP地址。
如果你想要在節點 node-a 節點運行 RegionServer ,你應該確保各主機間能夠相互通信。這使你可以配置分發到任何主機衝突的節點。保存文件。
(2)、配置 HBase 使 node-b 節點作為備份 master。
創建一個新的文件 conf/backup-masters ,並添加新的一行主機名--node-b。在本例中,主機名是 node-b.example.com。
(3)、配置 Zookeeper。
實際上,你需要小心的考慮 Zookeeper 的配置。關於 Zookeeper的更多配置,下麵有專門解釋。
在節點 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>
步驟:準備 node-c 和 node-b
node-c 上將要運行備份 master 和 一個 Zookeeper 實例。
(1)、下載和解壓 HBase
下載和解壓 HBase 到 node-b ,就像之前單機模式和為分散式模式一樣。
(2)、從 node-a 節點複製配置文件到 node-b 和 node-c。
集群上每個節點都應該保持同樣的配置。複製目錄 conf/ 內容到 node-b 和 node-c 目錄下。
步驟:啟動和測試你的集群
(1)、在各節點上確認HBase沒有運行。
如果之前測試的時候你忘記停掉 HBase,你將要報錯的。使用 jps 命令檢驗每台機器上的 HBase 是否運行。看下是否存在進程 HMaster、HRegionServer、HQuorumPeer,如果存在,kill 掉。
(2)、啟動集群。
在節點 node-a 上,執行 start-hbase.sh 命令。你將看到和下麵相似的輸出。
$ bin/start-hbase.sh node-c.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-h buser-zookeeper-node-c.example.com.out node-a.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-h buser-zookeeper-node-a.example.com.out node-b.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-h buser-zookeeper-node-b.example.com.out starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-node-a.exa mple.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-hbus er-master-nodeb.example.com.out
首先啟動 Zookeeper ,然後是 master ,然後是 RegionServer, 最後是 備份 master。
(3)、檢驗進程是否運行。
在每台節點上運行 jps 命令,檢驗每個機器上的相應進程是否運行。
Example 3. node-a jps Output
$ jps 20355 Jps 20071 HQuorumPeer 20137 HMaster
Example 4. node-b jps Output
$ jps 15930 HRegionServer 16194 Jps 15838 HQuorumPeer 16010 HMaster
Example 5. node-a jps Output
$ jps 13901 Jps 13639 HQuorumPeer 13737 HRegionServer
!Zookeeper 進程名
HQuorumPeer 進程是用來管理和啟動HBase的 Zookeeper 實例。如果你按照這種方式使用 Zookeeper,那麼他將被限制在集群每個節點上運行一個實例,這隻是適用於測試。如果 Zookeeper 是運行在 HBase 外,進程名即是 QuorumPeer 。
(4)、瀏覽器 WEB UI
在 HBase 0.98.X 更高版本,HBase Web 界面的 HTTP 埠從 Master 的 60010 和 每個 RegionServer 的 60030 改變為 Master 的 16010 和 RegionServer 的16030 。
如果一切準備妥當,你應該能夠使用 web 瀏覽器連接到 Master http://node-a.example.com:16010/ 和第二Master 的 http://node-b.example.com:16010/。如果你可以通過 localhost 連接,但不能從其他主機連接,請檢查你的防火牆配置。
(5)、測試節點或者伺服器消失會發生什麼。
如上配置的三個節點的集群,並不是有彈性的。儘管如此,你仍然可以測試當主 Master 或者 RegionServer消失發生什麼,殺死進程並查看日誌。
3、下一站
下一章節,將要講述關於 HBase 相關的信息,關於不同 HBase 的運行模式,HBase的運行時系統配置,一個分散式 HBase 集群的臨界配置區域。