本篇介紹兩種HBase的安裝方式:本地安裝方式和偽分散式安裝方式。
安裝的前提條件是已經安裝成功了hadoop,並且hadoop的版本號要和hbase的版本號相匹配。
我將要安裝的hbase是hbase-0.94.11版本號,須要的hadoop是hadoop-1.2.1版本號。
hbase下載地址:http://mirror.bit.edu.cn/apache/hbase/hbase-0.94.11/
將下載的hbase-0.94.11解壓到對應的資料夾,如/usr/hbase-0.94.11
將hbase-0.90.4重新命名為hbase
mv hbase-0.94.11 hbase
首先須要將hbase下的bin資料夾加入到系統的path中,改動/etc/profile,加入例如以下的內容:
export PATH=$PATH:/usr/hbase/bin
1.單機安裝 改動hbase下的conf資料夾下的配置檔案hbase-env.sh
首先,改動hbase-env.sh中的例如以下屬性:
export JAVA_HOME=/usr/java/jdk1.6 export HBASE_MANAGES_ZK=true //此配置資訊,設定由hbase自己管理zookeeper,不須要單獨的zookeeper。
2.偽分散式安裝 改動hbase-0.90.4下的conf資料夾下的配置檔案hbase-env.sh和hbase-site.xml
首先,改動hbase-env.sh中的例如以下屬性:
export JAVA_HOME=/usr/java/jdk1.6 export HBASE_CLASSPATH=/usr/hadoop/conf export HBASE_MANAGES_ZK=true
然後,改動hbase-site.xml檔案

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.70.130:9000/hbase</value> >//此屬性要依據自己的hadoop的配置資訊進行對應的改動
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property> </configuration>

完畢以上操作,就能夠正常啟動Hbase了,啟動順序:先啟動Hadoop——>再啟動Hbase,關閉順序:先關閉Hbase——>再關閉Hadoop。
首先啟動hadoop,(假設hadoop已經正常啟動能夠不再啟動,直接檢視程序是否正確,假設程序不對,那麼必須又一次除錯hadoop確保hadoop正常執行後再啟動hbase),這裡還要讓HDFS處於非安全模式:bin/hadoop dfsadmin -safemode leave
start-all.sh //啟動hadoop
jps //檢視程序

2564 SecondaryNameNode
2391 DataNode
2808 TaskTracker
2645 JobTracker
4581 Jps
2198 NameNode

啟動hbase:
start-hbase.sh
jps 檢視:

2564 SecondaryNameNode
2391 DataNode
4767 HQuorumPeer
2808 TaskTracker
2645 JobTracker
5118 Jps
4998 HRegionServer
4821 HMaster
2198 NameNode

能夠看到,HBase的相關程序已經啟動了
hbase shell
進入shell模式
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.12, r1524863, Fri Sep 20 00:25:45 UTC 2013 hbase(main):001:0>
通過:http://localhost:60010/master-status ,能夠訪問HBase狀態
ZCG)12J4]Y{K5JIG2.png)
ZCG)12J4]Y{K5JIG2.png)
ZCG)12J4]Y{K5JIG2.png)
停止hbase 假設在操作Hbase的過程中錯誤發生,能夠通過hbase安裝主資料夾下的logs子資料夾檢視錯誤原因
先停止hbase
stop-hbase.sh
再停止hadoop
stop-all.sh
錯誤解決方法:
1.報錯例如以下: localhost: Exception in thread "main" org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 42, server
= 41) 所以假設遇到以上錯誤,就通過替換jar包解決。(一般使用新版本號的hadoop 和 hbase不會出現這樣的錯誤)
替換Hbase中的jar包 須要用{HADOOP_HOME}下的hadoop-1.2.1-core.jar 替換掉{HBASE_HOME}/lib資料夾下的hadoop-1.2.1-append-r1056497.jar 。假設不替換jar檔案Hbase啟動時會由於hadoop和Hbase的client協議不一致而導致HMaster啟動異常。
2.錯誤例如以下:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/........../lib/slf4j-log4j12-1.5.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/........../slf4j-log4j12-1.5.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
:hadoop中lib裡slf4j-api-1.4.3.jar、slf4j-log4j12-1.4.3.jar和hbase中lib裡相應的這兩個jar包版本號不一致導致衝突,把hbase裡的替換成hadoop裡的就能夠了
3.有時候安裝hbase全然分散式時會出現奇怪的問題,先去查下叢集中各個server時間,是否相差太多,最好一致
NTP:叢集的時鐘要保證主要的一致。稍有不一致是能夠容忍的,可是非常大的不一致會 造成奇怪的行為。 執行 NTP 或者其它什麼東西來同步你的時間.
假設你查詢的時候或者是遇到奇怪的故障,能夠檢查一下系統時間是否正確!
設定叢集各個節點時鐘:date -s “2012-02-13 14:00:00”
4.2014-10-09 14:11:53,824 WARN org.apache.hadoop.hbase.master.AssignmentManager: Failed assignment of -ROOT-,,0.70236052 to 127.0.0.1,60020,1412820297393, trying to assign
elsewhere instead; retry=0
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to /127.0.0.1:60020 after attempts=1
at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:242)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1278)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1235)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1222)
at org.apache.hadoop.hbase.master.ServerManager.getServerConnection(ServerManager.java:496)
at org.apache.hadoop.hbase.master.ServerManager.sendRegionOpen(ServerManager.java:429)
at org.apache.hadoop.hbase.master.AssignmentManager.assign(AssignmentManager.java:1592)
at org.apache.hadoop.hbase.master.AssignmentManager.assign(AssignmentManager.java:1329)
at org.apache.hadoop.hbase.master.AssignCallable.call(AssignCallable.java:44)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.ConnectException: Connection refused
解決例如以下:
/etc/hosts裡邊配置出的問題
127.0.1.1 後邊是相應的主機名
將127.0.1.1改為127.0.0.1,問題解決