在Windows上裝hadoop生态元件是一件麻煩事,但是HBase的安裝卻可以非常簡單。目前主流的安裝文檔都需要裝Hadoop,這裡介紹一個簡單的單機版安裝方法,适合用來學習。
1. 下載下傳HBASE,以及Hadoop模拟工具winutils.exe
下載下傳位址都不發了,還是很容易找到的,而winutils.exe是用來模拟Hadoop的,隻要有這個檔案就可以了,這個也可以找得到,例如這個部落格下面的留言就有。注意要把winutils.exe放在bin目錄裡。後面HADOOP_HOME不要指向bin,而是指向bin的上一層。
最後需要注意的是HBASE和Hadoop的版本對應關系,也很容找到,或者可以看這裡。我用的是HBASE-1.2.6和Hadoop-2.5.1
2. 修改兩個配置:hbase.cmd和hbase-site.xml
前者是環境資訊,加入JAVA_HOME, HADOOP_HOME, HBASE_MANAGES_ZK。 前兩個是Java位址和Hadoop位址,路徑可以直接用\ ,也無需配到環境變量裡。例如下面的:
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121
set HADOOP_HOME=D:\hadoop-2.7.1
set HBASE_MANAGES_ZK=false
後者是HBASE服務的資訊,這裡盡量少配,其實甚至資料目錄可以不配,它會自己找使用者目錄某個位置存。配了5個:
<property>
<name>hbase.tmp.dir</name>
<value>/D:/hbase-1.2.6/data/tmp</value>
</property>
<!-- hdfs URI 要使用localhost, 不能使用127.0.0.1 -->
<property>
<name>hbase.rootdir</name>
<value>file:///D:/hbase-1.2.6/root</value>
</property>
<!-- Windows不支援true, 隻能填寫false,設定成false之後, HBase将啟動内置Zookeeper
填寫true => error message: This is not implemented yet. Stay tuned. -->
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/D:/hbase-1.2.6/data/zoo</value>
</property>
3. 啟動HBASE:運作start-hbase.cmd
執行以後,會彈出一個框,分别啟動HMaster,RegionServer,Zookeeper三個服務,大概也要10多秒才能啟動好。用jps檢視,隻有一個HMaster程序,說明另外兩個服務并不是獨立啟動的,也就是僞分布式。
關閉HBASE直接運作stop-hbase.cmd即可,原來彈出的指令行會不斷列印出關閉資訊。
4. 驗證安裝成功
可以通過web檢視HBASE資訊,http://localhost:16010/master-status, 即可看到
另外通過shell操作一下HBASE,指令:hbase.cmd shell
5. 踩坑處理
本來上面三步在我自己電腦就成功了,但是我在某個機房裡hbase-site配成那樣無法啟動HBASE,錯誤顯示HMaster無法bind端口。但是一看IP明顯擷取不對,于是找了很半天,找到了2個配置來解決,顯然是指定HMaster和RegionServer的綁定IP:
<property>
<name>hbase.master.ipc.address</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hbase.regionserver.ipc.address</name>
<value>0.0.0.0</value>
</property>
但是依舊報了另外的錯誤,大意是RegionServer上報HMaster狀态時候,沒連上HMaster。這不合理啊不是已經指定了HMaster啟動位址了嗎,但是錯誤資訊裡顯示RegionServer去連的IP确又是個錯誤的IP。後來又找了半天,抱着嘗試的心态試了一下居然成功了:
<property>
<name>hbase.master.hostname</name>
<value>localhost</value>
</property>
<property>
<name>hbase.regionserver.hostname</name>
<value>localhost</value>
</property>
從查到的各種資料綜合看,應該是HBASE啟動擷取主機名和IP位址問題,兩個元件是以要配4個項,也許是1.2.6版本的問題吧。
參考資料:
http://www.voidcn.com/article/p-mvlopatx-bus.html
https://www.jianshu.com/p/dae6337790da
https://blog.csdn.net/l1028386804/article/details/88696276
http://www.voidcn.com/article/p-mvlopatx-bus.html