Getting Started
1. Introduction
Quickstart 將先介紹如何部署單HBase實例至單節(jié)點上。
2. Quick Start - Standalone HBase
2.1. JDK Version Requirements
運行HBase需要先安裝JDK镣衡,關(guān)于所支持的JDK版本的信息档悠,請參閱 Java 辖所。
2.2. Get Started with HBase
過程:下載缘回、配置切诀、已Standalone模式啟動HBase
從Apache Download Mirrors列表中選擇一個下載站點幅虑, 單擊頂部推薦的站點鏈接倒庵,將跳轉(zhuǎn)到HBase Releases的鏡像頁面擎宝,單擊名為stable的文件夾绍申,然后將以.tar.gz結(jié)尾的二進制文件下載到本地文件系統(tǒng),暫時不要立即下載以src.tar.gz結(jié)尾的文件涨享。
-
將下載的文件進行解壓縮厕隧,cd到安裝路徑下
$ tar xzvf hbase-3.0.0-SNAPSHOT-bin.tar.gz $ cd hbase-3.0.0-SNAPSHOT/
在啟動HBase之前需要設(shè)置
JAVA_HOME
環(huán)境變量吁讨,您可以通過操作系統(tǒng)來設(shè)置變量建丧,HBase同時也提供了一個統(tǒng)一的環(huán)境變量配置文件conf/hbase-env.sh
, 編輯此文件茶鹃,取消被注釋的以JAVA_HOME
開頭的行闭翩,并將其設(shè)置為正確的jdk安裝目錄疗韵,應將JAVA_HOME
變量設(shè)置為包含可執(zhí)行文件bin/java
的目錄侄非。大多數(shù)現(xiàn)代Linux操作系統(tǒng)都提供了一種機制逞怨,例如RHEL或CentOS上的/usr/bin/alternatives叠赦,用于透明地在不同版本可執(zhí)行文件間進行切換除秀,在這種情況下册踩,您可以將JAVA_HOME
設(shè)置為包含bin/java的符號鏈接的目錄暂吉,通常為/usr。
JAVA_HOME=/usr
- 編輯conf/hbase-site.xml较锡,這個是HBase主要的配置文件盗痒,您需要為HBase和ZooKeeper指定本地文件系統(tǒng)上的路徑,用于寫入數(shù)據(jù)低散,如果不配置俯邓,默認為在/tmp下創(chuàng)建一個新目錄,許多服務器配置為在重啟時刪除/tmp下的內(nèi)容熔号,因此應該將數(shù)據(jù)存儲在其他路徑稽鞭。如下配置,將HBase的數(shù)據(jù)存儲在hbase目錄下引镊,該目錄位于名為
testuser
的用戶的home目錄下朦蕴,將<property>
粘貼在<configuration>
下面弟头,新安裝的HBase該節(jié)點下默認無元素吩抓。
示例 1. Example hbase-site.xml for Standalone HBase
<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>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
<description>
Controls whether HBase will check for stream capabilities (hflush/hsync).
Disable this if you intend to run on LocalFileSystem, denoted by a rootdir
with the 'file://' scheme, but be mindful of the NOTE below.
WARNING: Setting this to false blinds you to potential data loss and
inconsistent system state in the event of process and/or node failures. If
HBase is complaining of an inability to use hsync or hflush it's most
likely not a false positive.
</description>
</property>
</configuration>
不需要手動創(chuàng)建HBase數(shù)據(jù)目錄,HBase會自動創(chuàng)建赴恨,如果已存在目錄疹娶,HBase將嘗試進行遷移,這可能不符合你預期伦连。
上示例配置中的hbase.rootdir
指向了本地文件系統(tǒng)中的路徑雨饺,file://
前綴用于標識本地文件系統(tǒng),您應該將配置示例中WARNING部分牢記于心惑淳。在standalone模式下额港,HBase利用了Apache Hadoop project本地文件系統(tǒng)抽象,本地文件系統(tǒng)無法為HBase安全運行提供持續(xù)性保證歧焦,只適用于本地開發(fā)和測試用例移斩,這樣集群故障的成本能得到很好的控制,但不適合生產(chǎn)部署绢馍,極有可能會導致丟失數(shù)據(jù)叹哭。
在現(xiàn)有的HDFS實例上安裝HBase,將hbase.rootdir
設(shè)置為指向?qū)嵗穆窂剑篹.g. hdfs://namenode.example.org:8020/hbase痕貌,有關(guān)此變體的更多信息风罩,請參閱下面有關(guān)運行Standalone HBase于HDFS的部分。
bin/start-hbase.sh腳本提供啟動HBase的快捷方式舵稠,啟動命令超升,如果一切順利入宦,將在標準輸出中顯示HBase已成功啟動∈易粒可以使用jps
命令驗證是否有一個名為HMaster
的進程正在運行乾闰,在standalone模式下,HBase將所有守護進程運行于一個JVM進程盈滴,包括HMaster涯肩,一個HRegionServer和ZooKeeper,通過http://localhost:16010即可訪問HBase Web UI巢钓。
note: 需要安裝Java并可用病苗,如果有錯誤消息提示未安裝Java,但系統(tǒng)又安裝了java(可能位于非標準位置)症汹,編輯conf/hbase-env.sh文件并修改JAVA_HOME硫朦,指向包含bin/java的路徑。
過程:首次使用HBase
Connect to HBase.
Connect to your running instance of HBase using the hbase shell command, located in the bin/ directory of your HBase install. In this example, some usage and version information that is printed when you start HBase Shell has been omitted. The HBase Shell prompt ends with a > character.
1背镇、連接到HBase咬展。
使用位于HBase安裝目錄bin/下的hbase shell命令連接到正在運行的HBase實例,在此示例中瞒斩,省略了啟動HBase Shell時打印的用法和版本信息破婆,HBase Shell提示符以>字符結(jié)尾。
$ ./bin/hbase shell
hbase(main):001:0>
2胸囱、顯示HBase Shell幫助文檔.
輸入help并按Enter荠割,顯示HBase Shell的一些基本用法信息,以及幾個示例命令旺矾。請注意蔑鹦,表名,行箕宙,列都必須用引號括起來嚎朽。
3、創(chuàng)建一張表柬帕。
使用create
命令創(chuàng)建新表哟忍,必須指定表名和ColumnFamily名稱。
hbase(main):001:0> create 'test', 'cf'
0 row(s) in 0.4170 seconds
=> Hbase::Table - test
4陷寝、列出有關(guān)您的表的信息
使用list
命令確認表是否存在
hbase(main):002:0> list 'test'
TABLE
test
1 row(s) in 0.0180 seconds
=> ["test"]
使用describe
命令查看詳細信息锅很,包括默認配置值
hbase(main):003:0> describe 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE =>
'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'f
alse', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE
=> '65536'}
1 row(s)
Took 0.9998 seconds
5、將數(shù)據(jù)插入表中
使用put命令將數(shù)據(jù)插入表中.
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
我們每次插入一個值凤跑,總共插入三個值爆安,第一個insert 位于row1、列cf:a仔引,值為value1扔仓。HBase中的列由列族前綴組成褐奥,此示例中為cf,后跟冒號翘簇,然后是列限定符后綴撬码,本例中為a.
6、一次掃描表格中的所有數(shù)據(jù)
從HBase獲取數(shù)據(jù)的一種方法是掃描版保,使用scan
命令掃描表中的數(shù)據(jù)呜笑,可以以limit方式scan,如下獲取了全表數(shù)據(jù)彻犁。
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叫胁、獲取單行數(shù)據(jù).
使用get命令一次獲取一行數(shù)據(jù)。
hbase(main):007:0> get 'test', 'row1'
COLUMN CELL
cf:a timestamp=1421762485768, value=value1
1 row(s) in 0.0350 seconds
8袖裕、Disable一張表.
如果要刪除表或修改表配置,以及在某些其他情況下溉瓶,需要先使用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):010:0> disable 'test'
0 row(s) in 1.1820 seconds
hbase(main):011:0> drop 'test'
0 row(s) in 0.1370 seconds
10疾宏、退出HBase Shell.
使用quit命令退出HBase Shell并斷開與群集的連接。HBase實例仍然在后臺運行
過程:關(guān)閉HBase
bin/start-hbase.sh腳本快捷地啟動所有HBase守護進程触创,對應地坎藐,bin/stop-hbase.sh腳本關(guān)閉這些進程。
$ ./bin/stop-hbase.sh
stopping hbase....................
命令執(zhí)行后哼绑,進程可能需要花幾分鐘才能完全關(guān)閉岩馍,使用jps
確保關(guān)閉了HMaster和HRegionServer進程。
上面已經(jīng)展示了如何啟動和停止HBase的standalone實例抖韩。在接下來的部分蛀恩,我們將簡要概述其他hbase部署模式。
2.3 偽分布式本地安裝
偽分布模式意味著HBase仍然在單個主機上運行茂浮,但每個HBase守護程序(HMaster双谆,HRegionServer和ZooKeeper)作為單獨的進程運行,在standalone模式下席揽,所有守護進程都運行在一個jvm實例中顽馋。默認情況下,除非按照快速入門中的說明配置了hbase.rootdir屬性幌羞,否則數(shù)據(jù)仍存儲在/tmp/路徑下寸谜。在本演練中,我們將數(shù)據(jù)存儲在HDFS中属桦,您可以跳過HDFS配置以繼續(xù)將數(shù)據(jù)存儲在本地文件系統(tǒng)中程帕。
Hadoop配置
此過程假定您已在本地系統(tǒng)和/或遠程系統(tǒng)上已安裝配置了Hadoop和HDFS住练,并且它們正在運行且可用,還假設(shè)您正在使用Hadoop 2.x愁拭,Hadoop文檔中Setting up a Single Node Cluster指南可以提供相關(guān)安裝配置指導信息讲逛。
關(guān)閉HBase.
如果HBase在運行,請將其停止岭埠。此過程將創(chuàng)建一個全新的目錄用于HBase存儲數(shù)據(jù)盏混,因此您之前創(chuàng)建的任何數(shù)據(jù)庫都將丟失。-
配置HBase.
編輯hbase-site.xml文件惜论,首先许赃,添加以下屬性,該屬性指示HBase以分布式模式運行馆类,每個守護進程運行于獨立的JVM實例混聊。<property> <name>hbase.cluster.distributed</name> <value>true</value> </property>
接下來,使用hdfs:////
URI語法將hbase.rootdir
路徑由本地文件系統(tǒng)更改為HDFS實例的地址乾巧。在此示例中句喜,HDFS在運行于localhost的8020端口上。請確保刪除了hbase.unsafe.stream.capability.enforce
的配置或?qū)⑵湓O(shè)置為true沟于。
<property> <name>hbase.rootdir</name> <value>hdfs://localhost:8020/hbase</value> </property>
無需在HDFS手動創(chuàng)建目錄咳胃,HBase會自動創(chuàng)建,如果您創(chuàng)建了目錄旷太,HBase將嘗試進行遷移展懈,這可能不是你期望的。
- 啟動HBase
使用bin/start-hbase.sh命令啟動HBase供璧。如果系統(tǒng)配置正確存崖,運行jps命令應能顯示正在運行的HMaster和HRegionServer進程。 - 檢查HDFS中的HBase目錄.
如果一切正常睡毒,HBase會在HDFS中創(chuàng)建文件存儲目錄金句。以上面的配置為例,文件存儲在HDFS上的/hbase/吕嘀,可以在Hadoop的bin/目錄下使用hadoop fs命令列出此目錄违寞。
$ ./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</pre>
創(chuàng)建一張表并用數(shù)據(jù)填充它.
可以使用HBase Shell創(chuàng)建表,用數(shù)據(jù)填充表偶房,掃描并從中獲取數(shù)據(jù)趁曼,參照如 shell exercises。啟動和停止一個備份HBase Master(HMaster)server
在生產(chǎn)環(huán)境中同一硬件上運行多個HMaster實例沒有意義棕洋,就像運行偽分布式集群對生產(chǎn)沒有意義一樣挡闰。此步驟僅用于測試和學習目的。
HMaster server控制整個HBase集群∩忝酰可以啟動最多9個HMaster備實例赞季,加上主HMaser,總共就可以有10個HMaster實例奢驯。要啟動HMaster備實例申钩,使用 local-master-backup.sh
。對于要啟動的每個HMaster備實例瘪阁,添加一個表示該HMaster備實例端口偏移量的參數(shù)撒遣,每個HMaster要用到兩個端口(默認16000和16010),將端口偏移量與默認端口號相加得到備實例真正端口號管跺,所以如使用偏移量2义黎,HMaster備實例將使用端口16002和16012.以下示例命令,分別使用端口16002/16012,16003/16013和16005/16015啟動3個備實例豁跑。
$ ./bin/local-master-backup.sh start 2 3 5
要在不kill整個群集的情況下kill掉HMaster備實例廉涕,需要找到它的進程號(PID)。PID存儲在名為/tmp/hbase-USER-X-master.pid的文件中艇拍。該文件的唯一內(nèi)容是PID狐蜕。可以使用kill -9命令終止該PID淑倾。以下命令將終止端口偏移量為1的HMaster備實例馏鹤,但集群仍能運行:
$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
- 啟動和停止額外的RegionServers
HRegionServer按照HMaster的指令管理其StoreFiles中的數(shù)據(jù)征椒。通常娇哆,集群中每個HRegionServer運行于一個獨立節(jié)點。在同節(jié)點上運行多個HRegionServers勃救,在偽分布式模式下的進行測試是非常有用碍讨。local-regionservers.sh
命令允許您運行多個RegionServers,它的工作方式與local-master-backup.sh命令很類似蒙秒,腳本每個入?yún)⒍即韺嵗亩丝谄屏坎颉C總€RegionServer需要兩個端口,默認端口為16020和16030.自1.1.0版本起晕讲,HMaster不再使用region server端口覆获,這將留下10個端口(16020到16029和16030到16039)給RegionServers。要支持額外更多的RegionServers瓢省,請在運行local-regionservers.sh
腳本前將環(huán)境變量HBASE_RS_BASE_PORT
和HBASE_RS_INFO_BASE_PORT
設(shè)置為適當?shù)闹蹬ⅰ@缭O(shè)置base端口分別為16200和16300,在單服務器上勤婚,可以支持額外99個RegionServers摹量。以下命令啟動四個額外RegionServers,以16022/16032端口號(base端口16020/16030加2)開始、順序遞增的端口上運行
$ .bin/local-regionservers.sh start 2 3 4 5
要手動停止RegionServer缨称,請運行local-regionservers.sh
命令凝果,并傳入stop
參數(shù)和要停止的服務器的偏移量
$ .bin/local-regionservers.sh stop 3
- Stop HBase.
您可以使用bin/stop-hbase.sh命令停止HBase。
2.4. 高級篇-分布式
實際上睦尽,您需要一個完全分布式的配置來測試HBase并在真實場景中使用它器净。 在分布式配置中,群集包含多個節(jié)點骂删,每個節(jié)點運行一個或多個HBase守護進程掌动。這些包括主和備Master實例,多個ZooKeeper節(jié)點和多個RegionServer節(jié)點宁玫。
此高級篇快速入門中粗恢,群集新增加了兩個節(jié)點。 架構(gòu)如下:
Table 1. Distributed Cluster Demo Architecture
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 |
本入門假定每個節(jié)點都是虛擬機欧瘪,并且它們都在同一網(wǎng)絡上眷射,它建立在之前快速入門偽分布式本地安裝的基礎(chǔ)上,假設(shè)您在該過程中配置的節(jié)點現(xiàn)在是node-a
佛掖,在繼續(xù)之前先停止node-a
上的HBase妖碉。
確保所有節(jié)點都具有完全的通信訪問權(quán)限,并且沒有防火墻規(guī)則阻止它們間相互通信芥被。如果您發(fā)現(xiàn)任何錯誤欧宜,例如無主機路由,請檢查您的防火墻拴魄。
過程:配置無密SSH訪問
node-a
需要能夠登錄到node-b
和node-c
(以及自身)才能啟動守護進程冗茸,實現(xiàn)此目的的最簡單方法是在所有主機上使用相同的用戶名,并從node-a
配置無密SSH登錄到其他每個主機匹中。
- 在
node-a
上夏漱,生成密鑰對。
以運行HBase的用戶登錄系統(tǒng)顶捷,使用以下命令生成SSH密鑰對:
$ ssh-keygen -t rsa
如果命令運行成功挂绰,則密鑰對的路徑將被打印到標準輸出,公鑰的默認名稱是id_rsa.pub服赎。
創(chuàng)建目錄葵蒂,用于保存其他節(jié)點的共享秘鑰.
在node-b
和node-c
上,以HBase用戶身份登錄重虑,并在用戶home目錄下創(chuàng)建一個.ssh/目錄(如果該目錄尚不存在)践付。 如果它已存在,請注意它可能已包含其他秘鑰嚎尤。將公鑰復制到其他節(jié)點.
通過使用scp或其他一些安全方法荔仁,將公鑰從node-a
安全地復制到其他每個節(jié)點,在其他每個節(jié)點上,創(chuàng)建一個名為.ssh/authorized_keys的新文件(如果該文件尚不存在)乏梁,并將id_rsa.pub文件的內(nèi)容追加到其末尾次洼。 請注意,您還需要為node-a
本身執(zhí)行此操作遇骑。
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
- 測試無密登錄.
如果您正確執(zhí)行了上述過程卖毁,則當您使用相同的用戶名從node-a
SSH到其他任一節(jié)點時,不會提示您輸入密碼 - 由于
node-b
將運行Master備實例落萎,在node-b
重復上面的過程亥啦,在node-a
的任何地方替換node-b
為即可,請確保不要覆蓋現(xiàn)有的.ssh/authorized_keys文件练链,使用>>運算符而不是>運算符將新密鑰追加到現(xiàn)有文件翔脱。