《HBase權威指南》讀書筆記:第二章 安裝

基本操作

配上數據儲存目錄,編輯文件conf/hbase-site.xml

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/yourusername/hbase/data</value>
  </property>
</configuration>

啓動HBase。命令爲:bin/start-hbase.sh。命令執行後HBase將在後臺運行。

進入操作終端。bin/hbase shell,通過status命令可以查看服務狀態。

創建表:create 'hello_table','hello_family',得到的結果爲0 row(s) in 1.2280 seconds

添加數據:

put 'hello_table','id-1','hello_family:name','Alice'
put 'hello_table','id-1','hello_family:age','23'
put 'hello_table','id-2','hello_family:name','Bob'
put 'hello_table','id-2','hello_family:age','24'

以上命令創建了這樣的表:

id name age
id-1 Alice 23
id-2 Bob 24

掃描數據:scan 'hello_table',得到的結果如下:

ROW                                           COLUMN+CELL
 id-1                                         column=hello_family:age, timestamp=1496115723729, value=23
 id-1                                         column=hello_family:name, timestamp=1496115723692, value=Alice
 id-2                                         column=hello_family:age, timestamp=1496115723990, value=24
 id-2                                         column=hello_family:name, timestamp=1496115723750, value=Bob
2 row(s) in 0.0170 seconds

取數據:get 'hello_table','id-1',得到的結果如下:

COLUMN                                        CELL
 hello_family:age                             timestamp=1496115723729, value=23
 hello_family:name                            timestamp=1496115723692, value=Alice
2 row(s) in 0.0050 seconds

刪除數據:delete 'hello_table','id-1','name',這樣刪掉了name這一格,age還在。通過scan查看得到結果爲:

ROW                                           COLUMN+CELL
 id-1                                         column=hello_family:age, timestamp=1496115723729, value=23
 id-2                                         column=hello_family:age, timestamp=1496115723990, value=24
 id-2                                         column=hello_family:name, timestamp=1496115723750, value=Bob
2 row(s) in 0.0130 seconds

刪除表:

disable 'hello_table'
drop 'hello_table'

退出終端:exit

停止HBase服務:bin/stop-hbase.sh

硬件配置

CPU要求多核,最好每個硬盤對應有個核。

JVM內存不宜超過16G,避免GC停頓時間過長。

master節點推薦24G、region節點推薦24G以上。

網絡推薦兩個千兆網卡做bond。如有萬兆、或者InfiniBand更好。

服務器推薦用1U的。

網絡,推薦一個機架放兩個交換機,然後核心交換機將機架上的交換機連起來。

軟件

操作系統需要選擇,通常用Linux中的CentOS和RHEL比較好。

文件系統有以下幾種選擇:
- ext3,推薦禁用訪問時間的記錄,因爲HBase不需要記錄訪問時間,這樣節省內核的管理開銷
- ext4,推薦關閉延遲分配策略,延遲分配是指將寫入的數據臨時存放在內存裏,等到flush時再落盤。關掉之後減少數據斷電導致數據丟失的概率
- XFS,優點是格盤很快,缺點是大量刪除文件會涉及元數據的變更,不過HBase一般是大文件存儲,不會出現這個問題。
- ZFS,內置壓縮,支持ZB級別的儲存空間

Java,版本至少1.7以上,比最新版稍舊一些的版本,避免重大BUG。

Hadoop版本,需要支持sync功能,避免數據丟失。HBase中使用的hadoop版本需要與底層hadoop版本一致,需要將底層運行的hadoop的jar包複製到hbase中再啓動。

SSH。建議使用ssh-agent,只需輸入一次密碼即可批量操作。

域名服務。HBase通過本地域名彙報IP地址,因此需要DNS的正向解析和反向解析都能夠正常工作。

同步時間。時間需要保證同步。相差1分鐘以上就會出現奇怪的行爲。比如發生ClockOutOfSyncException

文件數量限制和進程限制。文件數量限制默認1024是不夠用的,至少要10000。進程數量nproc也需要設置。修改之後需要重新登錄才能生效。

DataNode處理線程數。在hdfs-site.xml配置文件中需要設置dfs.datanode.max.xcievers至少設置爲4096。配置完之後需要重啓HDFS集羣。此配置相當於最大文件句柄數。如果太小可能會出現:No live nodes contain current block. Will get new block locations from namenode and retry.

交換分區。必須關掉,否則可能卡死一個region節點。

Windows。HBase不建議在Windows環境運行。

HBase使用的文件系統

HBase常見使用HDFS文件系統。也可以支持別的文件系統,甚至自己實現一種。HBase自身沒有做副本,所以底層的文件系統必須提供副本、容錯、擴展的功能。事實上HBase支持所有實現了Hadoop接口的文件系統,包括HDFS、Amazon S3、Google Cloud、本地文件系統。KFS也是一種高性能文件系統。

  • HDFS的URI格式爲:hdfs://<namenode>:<port>/<path>
  • S3的URL格式爲:s3://<bucket-name>或者s3n://<bucket-name>
  • KFS的URI格式爲:kfs:///<path>

運行模式

分爲單機模式和分佈式模式。一般調試用單機模式或者僞分佈式模式。生產環境用分佈式模式。分佈式模式需要加上如下配置:

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://localhost:9000/hbase</value>
</property>
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>

完全分佈式模式需要增加如下配置:

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

還需要修改conf/regionservers,列出所有region-server節點IP。每個文件獨立一行文件。

Zookeeper安裝。HBase自帶Zookeeper,因此可以跟隨hbase啓動,共用JVM,也可以單獨啓動zookeeper和hbase。(筆者:推薦hbase和zookeeper分別獨立啓動,避免相互影響)

配置

主要的配置有以下幾個:

  • hbase-env.sh,用於設置環境變量。包括JVM堆設置,GC設置等。修改後重啓生效。
  • hbase-site.xml,集羣特有的配置。
  • hbase-default.xml,默認配置,此文件在hbase程序包中。如果配置項在hbase-default.xmlhbase-site.xml,會優先使用hbase-site.xml中的配置。
  • regionserver,region節點的列表
  • log4j.properties,打印日誌的選項

配置完成後需要需要將conf文件夾中的文件都同步到所有節點上。如果配置不一致則會導致問題。

部署

可以通過腳本批量部署hbase,也可以通過Apache Whirr批量部署,也可以用Puppet、Chef批量部署。

操作集羣

web ui,訪問master節點的60010端口可以得到圖形界面。(筆者:新版本端口改成16010了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章