Apache HBase ? 參考指南

Getting Started

1. Introduction

Quickstart 將先介紹如何部署單HBase實例至單節點上。

2. Quick Start - Standalone HBase

2.1. JDK Version Requirements

運行HBase需要先安裝JDK,關于所支持的JDK版本的信息,請參閱 Java

2.2. Get Started with HBase
過程:下載、配置、已Standalone模式啟動HBase
  1. Apache Download Mirrors列表中選擇一個下載站點, 單擊頂部推薦的站點鏈接,將跳轉到HBase Releases的鏡像頁面,單擊名為stable的文件夾,然后將以.tar.gz結尾的二進制文件下載到本地文件系統,暫時不要立即下載以src.tar.gz結尾的文件。

  2. 將下載的文件進行解壓縮,cd到安裝路徑下

    $ tar xzvf hbase-3.0.0-SNAPSHOT-bin.tar.gz
    $ cd hbase-3.0.0-SNAPSHOT/
    
  3. 在啟動HBase之前需要設置JAVA_HOME環境變量,您可以通過操作系統來設置變量,HBase同時也提供了一個統一的環境變量配置文件conf/hbase-env.sh, 編輯此文件,取消被注釋的以JAVA_HOME開頭的行,并將其設置為正確的jdk安裝目錄,應將JAVA_HOME變量設置為包含可執行文件bin/java的目錄。大多數現代Linux操作系統都提供了一種機制,例如RHEL或CentOS上的/usr/bin/alternatives,用于透明地在不同版本可執行文件間進行切換,在這種情況下,您可以將JAVA_HOME設置為包含bin/java的符號鏈接的目錄,通常為/usr

JAVA_HOME=/usr
  1. 編輯conf/hbase-site.xml,這個是HBase主要的配置文件,您需要為HBase和ZooKeeper指定本地文件系統上的路徑,用于寫入數據,如果不配置,默認為在/tmp下創建一個新目錄,許多服務器配置為在重啟時刪除/tmp下的內容,因此應該將數據存儲在其他路徑。如下配置,將HBase的數據存儲在hbase目錄下,該目錄位于名為testuser的用戶的home目錄下,將<property>粘貼在<configuration>下面,新安裝的HBase該節點下默認無元素。

示例 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>

不需要手動創建HBase數據目錄,HBase會自動創建,如果已存在目錄,HBase將嘗試進行遷移,這可能不符合你預期。

上示例配置中的hbase.rootdir指向了本地文件系統中的路徑,file://前綴用于標識本地文件系統,您應該將配置示例中WARNING部分牢記于心。在standalone模式下,HBase利用了Apache Hadoop project本地文件系統抽象,本地文件系統無法為HBase安全運行提供持續性保證,只適用于本地開發和測試用例,這樣集群故障的成本能得到很好的控制,但不適合生產部署,極有可能會導致丟失數據。

在現有的HDFS實例上安裝HBase,將hbase.rootdir設置為指向實例的路徑:e.g. hdfs://namenode.example.org:8020/hbase,有關此變體的更多信息,請參閱下面有關運行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,但系統又安裝了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提示符以>字符結尾。

$ ./bin/hbase shell
hbase(main):001:0>

2、顯示HBase Shell幫助文檔.
輸入help并按Enter,顯示HBase Shell的一些基本用法信息,以及幾個示例命令。請注意,表名,行,列都必須用引號括起來。

3、創建一張表。

使用create命令創建新表,必須指定表名和ColumnFamily名稱。

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"]

使用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、將數據插入表中
使用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

我們每次插入一個值,總共插入三個值,第一個insert 位于row1、列cf:a,值為value1。HBase中的列由列族前綴組成,此示例中為cf,后跟冒號,然后是列限定符后綴,本例中為a.
6、一次掃描表格中的所有數據
從HBase獲取數據的一種方法是掃描,使用scan命令掃描表中的數據,可以以limit方式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一張表.
如果要刪除表或修改表配置,以及在某些其他情況下,需要先使用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實例仍然在后臺運行

過程:關閉HBase

bin/start-hbase.sh腳本快捷地啟動所有HBase守護進程,對應地,bin/stop-hbase.sh腳本關閉這些進程。

$ ./bin/stop-hbase.sh
stopping hbase....................

命令執行后,進程可能需要花幾分鐘才能完全關閉,使用jps確保關閉了HMaster和HRegionServer進程。

上面已經展示了如何啟動和停止HBase的standalone實例。在接下來的部分,我們將簡要概述其他hbase部署模式。

2.3 偽分布式本地安裝

偽分布模式意味著HBase仍然在單個主機上運行,但每個HBase守護程序(HMaster,HRegionServer和ZooKeeper)作為單獨的進程運行,在standalone模式下,所有守護進程都運行在一個jvm實例中。默認情況下,除非按照快速入門中的說明配置了hbase.rootdir屬性,否則數據仍存儲在/tmp/路徑下。在本演練中,我們將數據存儲在HDFS中,您可以跳過HDFS配置以繼續將數據存儲在本地文件系統中。

Hadoop配置
此過程假定您已在本地系統和/或遠程系統上已安裝配置了Hadoop和HDFS,并且它們正在運行且可用,還假設您正在使用Hadoop 2.x,Hadoop文檔中Setting up a Single Node Cluster指南可以提供相關安裝配置指導信息。

  1. 關閉HBase.
    如果HBase在運行,請將其停止。此過程將創建一個全新的目錄用于HBase存儲數據,因此您之前創建的任何數據庫都將丟失。

  2. 配置HBase.
    編輯hbase-site.xml文件,首先,添加以下屬性,該屬性指示HBase以分布式模式運行,每個守護進程運行于獨立的JVM實例。

    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    

接下來,使用hdfs:////URI語法將hbase.rootdir路徑由本地文件系統更改為HDFS實例的地址。在此示例中,HDFS在運行于localhost的8020端口上。請確保刪除了hbase.unsafe.stream.capability.enforce的配置或將其設置為true。
<property> <name>hbase.rootdir</name> <value>hdfs://localhost:8020/hbase</value> </property>
無需在HDFS手動創建目錄,HBase會自動創建,如果您創建了目錄,HBase將嘗試進行遷移,這可能不是你期望的。

  1. 啟動HBase
    使用bin/start-hbase.sh命令啟動HBase。如果系統配置正確,運行jps命令應能顯示正在運行的HMaster和HRegionServer進程。
  2. 檢查HDFS中的HBase目錄.
    如果一切正常,HBase會在HDFS中創建文件存儲目錄。以上面的配置為例,文件存儲在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>
  1. 創建一張表并用數據填充它.
    可以使用HBase Shell創建表,用數據填充表,掃描并從中獲取數據,參照如 shell exercises

  2. 啟動和停止一個備份HBase Master(HMaster)server
    在生產環境中同一硬件上運行多個HMaster實例沒有意義,就像運行偽分布式集群對生產沒有意義一樣。此步驟僅用于測試和學習目的。

HMaster server控制整個HBase集群。可以啟動最多9個HMaster備實例,加上主HMaser,總共就可以有10個HMaster實例。要啟動HMaster備實例,使用 local-master-backup.sh。對于要啟動的每個HMaster備實例,添加一個表示該HMaster備實例端口偏移量的參數,每個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的文件中。該文件的唯一內容是PID。可以使用kill -9命令終止該PID。以下命令將終止端口偏移量為1的HMaster備實例,但集群仍能運行:

$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
  1. 啟動和停止額外的RegionServers
    HRegionServer按照HMaster的指令管理其StoreFiles中的數據。通常,集群中每個HRegionServer運行于一個獨立節點。在同節點上運行多個HRegionServers,在偽分布式模式下的進行測試是非常有用。local-regionservers.sh命令允許您運行多個RegionServers,它的工作方式與local-master-backup.sh命令很類似,腳本每個入參都代表實例的端口偏移量。每個RegionServer需要兩個端口,默認端口為16020和16030.自1.1.0版本起,HMaster不再使用region server端口,這將留下10個端口(16020到16029和16030到16039)給RegionServers。要支持額外更多的RegionServers,請在運行local-regionservers.sh腳本前將環境變量 HBASE_RS_BASE_PORTHBASE_RS_INFO_BASE_PORT設置為適當的值。例如設置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參數和要停止的服務器的偏移量

$ .bin/local-regionservers.sh stop 3
  1. Stop HBase.
    您可以使用bin/stop-hbase.sh命令停止HBase。
2.4. 高級篇-分布式

實際上,您需要一個完全分布式的配置來測試HBase并在真實場景中使用它。 在分布式配置中,群集包含多個節點,每個節點運行一個或多個HBase守護進程。這些包括主和備Master實例,多個ZooKeeper節點和多個RegionServer節點。

此高級篇快速入門中,群集新增加了兩個節點。 架構如下:
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

本入門假定每個節點都是虛擬機,并且它們都在同一網絡上,它建立在之前快速入門偽分布式本地安裝的基礎上,假設您在該過程中配置的節點現在是node-a,在繼續之前先停止node-a上的HBase。

確保所有節點都具有完全的通信訪問權限,并且沒有防火墻規則阻止它們間相互通信。如果您發現任何錯誤,例如無主機路由,請檢查您的防火墻。

過程:配置無密SSH訪問

node-a需要能夠登錄到node-bnode-c(以及自身)才能啟動守護進程,實現此目的的最簡單方法是在所有主機上使用相同的用戶名,并從node-a配置無密SSH登錄到其他每個主機。

  1. node-a上,生成密鑰對。
    以運行HBase的用戶登錄系統,使用以下命令生成SSH密鑰對:
$ ssh-keygen -t rsa

如果命令運行成功,則密鑰對的路徑將被打印到標準輸出,公鑰的默認名稱是id_rsa.pub

  1. 創建目錄,用于保存其他節點的共享秘鑰.
    node-bnode-c上,以HBase用戶身份登錄,并在用戶home目錄下創建一個.ssh/目錄(如果該目錄尚不存在)。 如果它已存在,請注意它可能已包含其他秘鑰。

  2. 將公鑰復制到其他節點.
    通過使用scp或其他一些安全方法,將公鑰從node-a安全地復制到其他每個節點,在其他每個節點上,創建一個名為.ssh/authorized_keys的新文件(如果該文件尚不存在),并將id_rsa.pub文件的內容追加到其末尾。 請注意,您還需要為node-a本身執行此操作。

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
  1. 測試無密登錄.
    如果您正確執行了上述過程,則當您使用相同的用戶名從node-a SSH到其他任一節點時,不會提示您輸入密碼
  2. 由于node-b將運行Master備實例,在node-b重復上面的過程,在node-a的任何地方替換node-b為即可,請確保不要覆蓋現有的.ssh/authorized_keys文件,使用>>運算符而不是>運算符將新密鑰追加到現有文件。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容

  • 入門指南 1. 簡介 Quickstart會讓你啟動和運行一個單節點單機HBase。 2. 快速啟動 – 單點HB...
    和心數據閱讀 4,666評論 1 41
  • 前言 在本節中,你將首先學習單節點、獨立的HBase的設置,并且學會運行單節點、獨立的HBase實例! 在一個獨立...
    步閑閱讀 1,881評論 1 3
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 簡介 HBase是高可靠性,高性能,面向列,可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Serve...
    九世的貓閱讀 2,208評論 1 6
  • 文/以琳_ 夜雨瓢搖叩木欞,無端驅夢喚吾醒。 新詞乍現填遺韻,興喜無眠豎耳聽。 ...
    以琳_閱讀 613評論 0 11