2012年9月11日 星期二

哪天忘記怎麼裝Hbase時可以來這邊找

前言
如果我身份證的父親欄是寫"鍋台名", 我還會晚上不睡覺在研究Hbase怎麼裝嗎?
Hbase是一個"欄導向"(column-orinted)的分散式資料庫, 建構於HDFS之上當你要即時讀寫或隨機存取big data時, 就適合使用Hbase這個Hadoop應用。剩下的廢話就去看Hadoop技術手冊第二版 Chapter13。或是好兄弟Google會告訴你

看到好文補充一下:
HBase的伺服器體系架構是遵從簡單的主從伺服器架構, 他由HRegion Server群以及HBase Master伺服器構成HBase Master伺服器負責管理所有的HReion Server,而HBase中所有的伺服器都是透過ZooKeeper來進行協調的,並處理HBase伺服器在執行期間可能遇到的錯誤
HBase Master Server本身並不儲存HBase中的任何資料,Hbase邏輯上的表可能會被劃分成多個HRegion,然後儲存到HRegion Server群中HBase Master Server本身儲存的是資料到HRegion Server群的映射路徑


環境
這篇一樣
特別註明:HBase的版本跟Hadoop的版本會妖精打架, 我目前使用的Hadoop-1.0.3跟Hbase-0.94.1還算處得來, 或許玩的不夠深入還沒被蟲咬到

實作
服用本篇前一定要確認Hadoop環境是可以正常啟動的
本人大膽的假設各位看官們都已經啟動了HDP141, HDP142, HDP143這三台電腦。(還沒啟動Hadoop)
話說阿~~安裝Hbase也分成單機, 偽分散, 完全分散。看過我之前網誌的人就知道我一定是採用哪一種了,不合口味的就先說聲抱歉, 不送了, 請慢走

在這個當下相信各位已經啟動了VM, 待會要接著啟動Hadoop跟Hbase, 對於營養不良的VM們這又是一場搶奪資源大作戰阿! 讓我不勝噓唏給每一台VM的記憶體只有1G, 卻要起那麼多java process我只能說很多時候系統管理的問題牽涉到資源配置, 大家都在搶資源時, 有些process就會無聲無息的被linux kernel幹掉了。所以進行到這邊的大大們可以的話請先調高你們每一台VM的記憶體吧, 不然等一下最後啟動Hbase時很有可能會看不到HMaster, HRegionServer, HQuorumPeer。~~這是我第一次啟動Hbase時一直遇到的怪問題, 不知我這樣的解讀是否正確, 希望有好心的大大看到有感而發留個言給我, 謝謝囉XD

步驟一
實作以下動作前我們要先在NameNode跟DataNode的${HADOOP_HOME}/conf/hdfs-site.xml加入兩個屬性

 <property>
        <name>dfs.datanode.max.xcievers</name>
        <value>4096</value>
 </property>

沒加的話運行過程會丟出 missing blocks的錯誤

另外有個很玄的東西, Hadoop的文件寫說這是有bug的, 可是Hbase的文件又寫避免資料遺失最好加上這屬性。我也不是很懂,改天研究懂了再來詳細筆記一番(預設是false)

<property>
     <name>dfs.support.append</name>
     <value>true</value>
</property>



步驟二
步驟一都在主戰機實作(Host OS)
先寫個小script(HbaseRsync.sh), 等一下可以一次把安裝檔以及設定檔用scp丟過去, 要一個一個下指令也是可以啦, 因為我懶所以我用script。內容如下:


#!/bin/bash
scp -r hbase-0.94.1 HDP141:
scp -r hbase-0.94.1 HDP142:
scp -r hbase-0.94.1 HDP143:

很明顯的我把script放在家目錄,hbase-0.94.1這資料夾我也是放在家目錄。

接下來hbase-0.94.1/conf裡面有三個要改的, hbase-env.sh, hbase-site.xml, regionservers

1.hbase-env.sh,這檔案主要是配置系統的設定以及環境變數,會被start-hbase.sh啟動
在最下面加入以下幾行字。實際路徑要按照每台機器的來改



PS:一個分散式運行的HBase依賴一個zookeeper集群。所有的節點和客户端都必須能夠訪問zookeeper。默認的情况下HBase會管理一個zookeep集群。這個集群會随著HBase的啟動而啟動。想當然而,你也可以自己管理一個zookeeper集群,但需要配置HBase。你需要修改conf/hbase-env.sh 裡面的HBASE_MANAGES_ZK來切換。這個值默認是true的,作用是讓HBase啟動的時候同時也啟動內建自帶的zookeeper
PS:我自己使用起來自帶的zookeeper不是很穩,目前我是用獨立的zookeeper。
HBASE_MANAGES_ZK=false這樣子就不會使用hbase內建的zookeeper。


2.hbase-site.xml。


hbase.rootdir:要跟${HADOOP_HOME}/conf/core-site.xml的fs.default.name名字一樣,後面再加上/hbase
hbase.zookeeper.qourum這屬性就是列出zookeepr的ensemble servers要運行完全分布式模式, hbase.cluster.distributed這屬性要設為true

3.regionservers(RegionServer的節點)




步驟三
以上比Hadoop配置還要簡單吧,接下來利用HbaseRsync.sh把主戰機的hbase-0.94.1資料夾一次copy到三台datanode裡面去。



按下enter就會看到一直在copy的字跑阿跑的。執行完之後到datanode去看看是不是有這一個資料夾了


步驟四
在每一台機器的.bashrc加入HBASE_HOME, PATH也要記得加上${HBASE_HOME}/bin


以上三步驟都做完後本人習慣是全部重新開機, 然後去補充尼古丁順道思考一下有沒有落掉的東西XD

步驟四

這步驟稍微說明一下啟動Hbase以及新增table,寫入資料,刪除table
重新都開機完後, start-all.sh跟start-hbase.sh(停止是stop-hbase.sh)給他執行下去, Hadoop跟Hbase都啟動完後用jps看看,像下圖一樣namenode有出現HMaster, datanode有出現HRegionServer跟HQuorumPeer就是成功了

溫馨提醒:預設NameNode會停30秒在Safe Mode太急著start-hbase.sh也許會造成啟動失敗呦!




再用shell連進你的HBase並且隨便create一個table看看

create 'ooxx','ggyy'這段代表建立一個名為ooxx的table, 其中有一個column family名為'ggyy'見下圖

再執行list指令, 會列出Hbase所有用戶空間(user space)的資料表, 會看到有一個ooxx

接著新增(put)三個列和欄進入ooxx這一個column family中, 再列出(scan)資料表內容, 指令見下圖

移除資料表前要先停用(disable)才可以刪除(drop)


呼~~以上,OVER
這篇只是很基本很初階的安裝而已,細節的操作以及運用還要繼續啃書本以及Google, 哪天心血來潮時會陸陸續續再補上

老話一句,我真他媽的想要當富二代,不然哪有勁來研究這些玩意阿!!有錢的男人最帥,不能當富二代就想辦法變成富一代吧XD~~跟大家共勉之

沒有留言:

張貼留言