前言
如果我身份證的父親欄是寫"鍋台名", 我還會晚上不睡覺在研究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~~跟大家共勉之。