1. 程式人生 > >Hbase分散式搭建之Hbase搭建

Hbase分散式搭建之Hbase搭建

在安裝之前先介紹下Hbase,Hadoop生態系統中HBase所處位置,實現的功能,解決的問題。

HBase – Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。

HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作為其檔案儲存系統,HBase利用Hadoop HDFS作為其檔案儲存系統;Google執行MapReduce來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。HBase是Google Bigtable的開源實現,它利用Hadoop HDFS作為其檔案儲存系統,利用Hadoop MapReduce來處理HBase中的海量資料,利用Zookeeper作為協同服務。

圖2-1 EcoSystem生態系統構建

上圖描述了Hadoop EcoSystem中的各層系統,其中HBase位於結構化儲存層,Hadoop HDFS為HBase提供了高可靠性的底層儲存支援,Hadoop MapReduce為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。
此外,Pig和Hive還為HBase提供了高層語言支援,使得在HBase上進行資料統計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS資料匯入功能,使得傳統資料庫資料向HBase中遷移變的非常方便。
HBase具有以下特性:

  • 線性及模組可擴充套件性。
  • 嚴格一致讀寫性。
  • 可配置的表自動分割策略。
  • RegionServer自動故障恢復。
  • 便利地備份MapReduce作業的基類。
  • 便於客戶端訪問的Java API
  • 為實時查詢提供了塊快取和Bloom Filter。
  • 可通過伺服器端的過濾器進行查詢下推預測。
  • 提供XML、Protobuf及二進位制編碼的Thrift網管和REST-ful網路服務。
  • 可擴充套件的JIRB(jruby-based)shell
  • 支援通過Hadoop或JMX將度量標準倒出到檔案或Ganglia中。

一、實驗環境

虛擬機器數量:3臺
作業系統:Ubuntu 14.04
實驗環境及版本:
Hadoop:Hadoop 2.2.0
Java:java version “1.7.0_51”
HBase:hbase-0.96.0.tar.gz
Zookeeper:zookeeper-3.4.5.tar.gz

Hbase安裝包:https://download.csdn.net/download/leoe_/10292264


二、實驗內容及步驟

1、準備工作

(1)SSH無密驗證雙向互通:
要達到雙向無密碼互通我們只需要將每臺機器的公鑰均寫入到同一個授權檔案,然後將授權檔案複製到每臺機器上即可(具體公鑰寫入授權檔案的方法參考Hadoop完全分散式的安裝試驗)。這樣就可以達到雙向無密碼互通。這樣Hadoop的指令碼才可以遠端操控其他的Hadoop和HBase程序。
(2)Hadoop完全分散式的安裝:
必須可以正常啟動 HDFS 系統,確保HDFS能夠上傳和讀寫檔案。

(3) Zookeeper分散式的安裝:
分散式HBase安裝依賴於正在執行的ZooKeeper叢集。Apache HBase預設情況下為您管理ZooKeeper“叢集”。它將啟動和停止ZooKeeper集合作為HBase啟動/停止過程的一部分。你還可以獨立於HBase管理ZooKeeper叢集,只需要在Hbase的配置檔案hbase-env.sh中做一些設定即可。

2、ntp時間同步伺服器搭建與使用

查詢jdk版本Ntp時間同步伺服器安裝配置:
叢集的時鐘要保證基本的一致。稍有不一致是可以容忍的,但是很大的不一致會 造成奇怪的行為。執行 NTP 或者其他什麼東西來同步你的時間。下面對Ntp時間同步伺服器NTP安裝配置步驟如下:


2.1 服務端(master)
安裝ntp服務,程式碼如下:

# apt-get install ntp

安裝後預設啟動服務,如果沒有啟動,啟動之。

# /etc/init.d/ntp start

圖2-1 啟動服務

# vim  /etc/ntp.conf 

修改為如下:

圖2-2 修改配置檔案

重啟ntp服務

# /etc/init.d/ntp restart

2.2 客戶端(slaver1、slaver2)
1)使用ntpdate命令,如果不存在這個命令,則先安裝apt-get install ntp
2)同步時間

# /usr/sbin/ntpdate 192.168.60.190 //即使用ip為192.168.60.190的ntp伺服器同步時間

3)設定定時同步

    vim /etc/crontab

圖2-3 修改配置檔案

系統便會在每天早上1點30分自動將系統時間同步到ntp伺服器的時間,當然這裡crontab的時間是指客戶端的時間,同步後等同於ntp伺服器的時間。


2.3 ulimit 和 nproc設定(叢集均配置)

HBase是資料庫,會在同一時間使用很多的檔案控制代碼。大多數Ubuntu系統使用的預設值1024是不能滿足的,所以你需要修改你的最大檔案控制代碼限制。可以設定到10k. 你還需要修改 hbase 使用者的 nproc,如果過低會造成 OutOfMemoryError異常。
需要澄清的,這兩個設定是針對作業系統的,不是Hbase本身的。有一個常見的錯誤是Hbase執行的使用者,和設定最大值的使用者不是一個使用者。在Hbase啟動的時候,第一行日誌會現在ulimit資訊,所以你最好檢查一下。
(1)limits.conf檔案

# vim /etc/security/limits.conf 

新增如下內容:
圖2-4 修改配置檔案

(2)common-session檔案

# vim /etc/pam.d/common-session 

加上這一行:

session required  pam_limits.so

如下:

圖2-5 修改配置檔案

否則在/etc/security/limits.conf上的配置不會生效.
還有登出再登入,這些配置才能生效。

(3)檔案中修改內容解釋:
在/etc/security/limits.conf

root  -       nofile  65536   root最大能開啟的檔案數不超過65536
root   hard    nproc   16384  root使用者最大能開啟的程序數不超過16384

在/etc/pam.d/common-session
pam_limits.so模組可以使用在對一般應用程式使用的資源限制方面。如果需要在SSH伺服器上對來自不同使用者的ssh訪問進行限制,就可以呼叫該模組來實現相關功能。當需要限制使用者admin登入到SSH伺服器時的最大連線數(防止同一個使用者開啟過多的登入程序),就可以在/etc/pam.d/sshd檔案中增加一行對pam_limits.so模組的呼叫。


3、HBase的安裝和配置

解壓縮:

# tar -zxvf hbase-0.96.0.tar.gz

更改名字為hbase:mv hbase-0.96.0 hbase

3.1 配置conf/hbase-env.sh

export JAVA_HOME==/usr/lib/jvm/jdk1.7.0_51
export HBASE_CLASSPATH=~/u/etc/hadoop
export HBASE_PID_DIR=/soft/hbase/pids
修改:
export HBASE_MANAGES_ZK=false

圖4-1 配置HBase配置檔案
圖4-2 配置HBase配置檔案

解釋:一個分散式執行的Hbase依賴一個zookeeper叢集。所有的節點和客戶端都必須能夠訪問zookeeper。預設的情況下Hbase會管理一個zookeep叢集,即Hbase預設自帶一個zookeep叢集。這個叢集會隨著Hbase的啟動而啟動。而在實際的商業專案中通常自己管理一個zookeeper叢集更便於優化配置提高叢集工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh裡面的HBASE_MANAGES_ZK 來切換。這個值預設是true的,作用是讓Hbase啟動的時候同時也啟動zookeeper.在本實驗中,我們採用獨立執行zookeeper叢集的方式,故將其屬性值改為false。


3.2 配置conf/hbase-site.xml

配置效果圖如下:

圖4-3 hbase-site.xml配置檔案

解釋:要想執行完全分散式模式,加一個屬性 hbase.cluster.distributed 設定為 true 然後把 hbase.rootdir 設定為HDFS的NameNode的位置

hbase.rootdir:這個目錄是region server的共享目錄,用來持久化Hbase。URL需要是’完全正確’的,還要包含檔案系統的scheme

hbase.cluster.distributed :Hbase的執行模式。false是單機模式,true是分散式模式。若為false,Hbase和Zookeeper會執行在同一個JVM裡面。在hbase-site.xml配置zookeeper:當Hbase管理zookeeper的時候,你可以通過修改zoo.cfg來配置zookeeper,對於zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具體的欄位是 hbase.zookeeper.quorum.在這裡列出Zookeeper叢集的地址列表,用逗號分割。

hbase.zookeeper.property.clientPort:ZooKeeper的zoo.conf中的配置,客戶端連線的埠。

hbase.zookeeper.property.dataDir:ZooKeeper的zoo.conf中的配置。對於獨立的Zookeeper,要指明Zookeeper的host和埠。需要在 hbase-site.xml中設定。


3.3 配置conf/regionservers

寫入:slaver1、slaver2

圖4-4 配置叢集資訊

在這裡列出了你希望執行的全部 HRegionServer,一行寫一個host (就像Hadoop裡面的 slaver 一樣). 列在這裡的server會隨著叢集的啟動而啟動,叢集的停止而停止。


3.4 hadoop配置檔案拷入

# cp ~/u/etc/hadoop/hdfs-site.xml /soft/hbase/conf
# cp ~/u/etc/hadoop/core-site.xml /soft/hbase/conf

3.5 分發hbase

# scp  -r  /soft/hbase slaver1:/soft/hbase
# scp  -r  /soft/hbase slaver2:/soft/hbase

3.6 執行和測試

在master上執行:
(1)# start-dfs.sh
(2)# start-yarn.sh
(3)# zkServer.sh start(各個節點均執行)
(4)# start-hbase.sh (直接執行這個命令需要將HBASE的bin目錄也加入到/etc/environment中)

使用jps檢視程序:

master程序列表
這裡寫圖片描述

從節點1程序列表
這裡寫圖片描述

從節點2程序列表
這裡寫圖片描述

通過瀏覽器檢視60010,60030埠檢視
http://192.168.60.190:60010/

圖4-8 瀏覽器主節點資訊

http://192.168.60.199:60030/rs-status

圖4-9 瀏覽器從節點資訊

4.7 多節點啟動HMaster

root@master:/soft/hbase/bin# hbase-daemon.sh start master

在其他子節點同時啟動HMaster,可以做等待備份作用;


5、HBase簡單操作

Hbase指令碼
啟動:hbase shell

圖5-1 啟動HBase

(1) status命令

hbase(main):008:0> status
1 servers, 0 dead, 3.0000 average load

(2) version命令

hbase(main):007:0> version
0.94.12, r1524863, Fri Sep 20 00:25:45 UTC 2013

(3) create 命令
建立一個名為 test 的表,這個表只有一個列為 cf。其中表名、列都要用單引號括起來,並以逗號隔開。

hbase(main):001:0> create 'test', 'cf'
0 row(s) in 10.3830 seconds

(4) list 命令
檢視當前 HBase 中具有哪些表。

hbase(main):009:0> list
TABLE                                                                           
test                                                                            
1 row(s) in 0.3590 seconds

6、備註

問題解決:
1、在安裝完HBase後,啟動hbase時會報slf4j-log4j的錯誤,這是因為hadoop的slf4j-log4j與HBase中的slf4j-log4j啟衝突。
2、在web上檢視HBase時,之前用的時:

http://master:60010/
http://slaver1:60030/

但是存在問題,不能開啟頁面進行檢視HBase裡邊的資訊。是因為在HBase1.X之後的版本中埠號改成了16010和16030。