Apache HBase的適用場景 | Ji ZHANG's Blog
http://shzhangji.com/blog/2015/03/08/hbase-dos-and-donts/
原文:http://blog.cloudera.com/blog/2011/04/hbase-dos-and-donts/
最近我在洛杉磯Hadoop用戶組做了一次關(guān)于HBase適用場景的分享蕴轨。在場的聽眾水平都很高评汰,給到了我很多值得深思的反饋蛹尝。主辦方是來自Shopzilla的Jody枪汪,我非常感謝他能給我一個(gè)在60多位Hadoop使用者面前演講的機(jī)會(huì)∈览剑可能一些朋友沒有機(jī)會(huì)來洛杉磯參加這次會(huì)議牺弄,我將分享中的主要內(nèi)容做了一個(gè)整理。如果你沒有時(shí)間閱讀全文宜狐,以下是一些摘要:
HBase很棒,但不是關(guān)系型數(shù)據(jù)庫或HDFS的替代者蛇捌;
配置得當(dāng)才能運(yùn)行良好抚恒;
監(jiān)控,監(jiān)控络拌,監(jiān)控俭驮,重要的事情要說三遍。
Cloudera是HBase的鐵桿粉絲春贸。我們熱愛這項(xiàng)技術(shù)混萝,熱愛這個(gè)社區(qū),發(fā)現(xiàn)它能適用于非常多的應(yīng)用場景萍恕。HBase如今已經(jīng)有很多成功案例逸嘀,所以很多公司也在考慮如何將其應(yīng)用到自己的架構(gòu)中。我做這次分享以及寫這篇文章的動(dòng)因就是希望能列舉出HBase的適用場景允粤,并提醒各位哪些場景是不適用的崭倘,以及如何做好HBase的部署翼岁。
何時(shí)使用HBase
雖然HBase是一種絕佳的工具,但我們一定要記住司光,它并非銀彈琅坡。HBase并不擅長傳統(tǒng)的事務(wù)處理程序或關(guān)聯(lián)分析,它也不能完全替代MapReduce過程中使用到的HDFS残家。從文末的成功案例中你可以大致了解HBase適用于怎樣的應(yīng)用場景榆俺。如果你還有疑問,可以到社區(qū)中提問坞淮,我說過這是一個(gè)非常棒的社區(qū)茴晋。
除去上述限制之外,你為何要選擇HBase呢碾盐?如果你的應(yīng)用程序中晃跺,數(shù)據(jù)表每一行的結(jié)構(gòu)是有差別的,那就可以考慮使用HBase毫玖,比如在標(biāo)準(zhǔn)化建模的過程中使用它掀虎;如果你需要經(jīng)常追加字段,且大部分字段是NULL值的付枫,那可以考慮HBase烹玉;如果你的數(shù)據(jù)(包括元數(shù)據(jù)、消息阐滩、二進(jìn)制數(shù)據(jù)等)都有著同一個(gè)主鍵二打,那就可以使用HBase;如果你需要通過鍵來訪問和修改數(shù)據(jù)掂榔,使用HBase吧继效。
后臺(tái)服務(wù)
如果你已決定嘗試一下HBase,那以下是一些部署過程中的提示装获。HBase會(huì)用到一些后臺(tái)服務(wù)瑞信,這些服務(wù)非常關(guān)鍵。如果你之前沒有了解過ZooKeeper穴豫,那現(xiàn)在是個(gè)好時(shí)候凡简。HBase使用ZooKeeper作為它的分布式協(xié)調(diào)服務(wù),用于選舉Master等精肃。隨著HBase的發(fā)展秤涩,ZooKeeper發(fā)揮的作用越來越重要。另外司抱,你需要搭建合適的網(wǎng)絡(luò)基礎(chǔ)設(shè)施筐眷,如NTP和DNS。HBase要求集群內(nèi)的所有服務(wù)器時(shí)間一致状植,并且能正確地訪問其它服務(wù)器浊竟。正確配置NTP和DNS可以杜絕一些奇怪的問題怨喘,如服務(wù)器A認(rèn)為當(dāng)前是明天,B認(rèn)為當(dāng)前是昨天振定;再如Master要求服務(wù)器C開啟新的Region必怜,而C不知道自己的機(jī)器名,從而無法響應(yīng)后频。NTP和DNS服務(wù)器可以讓你減少很多麻煩梳庆。
我前面提到過,在考慮是否使用HBase時(shí)卑惜,需要針對(duì)你自己的應(yīng)用場景來進(jìn)行判別膏执。而在真正使用HBase時(shí),監(jiān)控則成了第一要?jiǎng)?wù)露久。和大多數(shù)分布式服務(wù)一樣更米,HBase服務(wù)器宕機(jī)會(huì)有多米諾骨牌效應(yīng)。如果一臺(tái)服務(wù)器因內(nèi)存不足開始swap數(shù)據(jù)毫痕,它會(huì)失去和Master的聯(lián)系征峦,這時(shí)Master會(huì)命令其他服務(wù)器接過這部分請(qǐng)求,可能會(huì)導(dǎo)致第二臺(tái)服務(wù)器也發(fā)生宕機(jī)消请。所以栏笆,你需要密切監(jiān)控服務(wù)器的CPU、I/O以及網(wǎng)絡(luò)延遲臊泰,確保每臺(tái)HBase服務(wù)器都在良好地工作蛉加。監(jiān)控對(duì)于維護(hù)HBase集群的健康至關(guān)重要。
HBase架構(gòu)最佳實(shí)踐
當(dāng)你找到了適用場景缸逃,并搭建起一個(gè)健康的HBase集群后针饥,我們來看一些使用過程中的最佳實(shí)踐。鍵的前綴要有良好的分布性需频。如果你使用時(shí)間戳或其他類似的遞增量作為前綴打厘,那就會(huì)讓單個(gè)Region承載所有請(qǐng)求,而不是分布到各個(gè)Region上贺辰。此外,你需要根據(jù)Memstore和內(nèi)存的大小來控制Region的數(shù)量嵌施。RegionServer的JVM堆內(nèi)存應(yīng)該控制在12G以內(nèi)饲化,從而避免過長的GC停頓。舉個(gè)例子吗伤,在一臺(tái)內(nèi)存為36G的服務(wù)器上部署RegionServer吃靠,同時(shí)還運(yùn)行著DataNode,那大約可以提供100個(gè)48M大小的Region足淆。這樣的配置對(duì)HDFS巢块、HBase礁阁、以及Linux本身的文件緩存都是有利的。
其他一些設(shè)置包括禁用自動(dòng)合并機(jī)制(默認(rèn)的合并操作會(huì)在HBase啟動(dòng)后每隔24小時(shí)進(jìn)行)族奢,改為手動(dòng)的方式在低峰期間執(zhí)行姥闭。你還應(yīng)該配置數(shù)據(jù)文件壓縮(如LZO),并將正確的配置文件加入HBase的CLASSPATH中越走。
非適用場景
上文講述了HBase的適用場景和最佳實(shí)踐棚品,以下則是一些需要規(guī)避的問題。比如廊敌,不要期許HBase可以完全替代關(guān)系型數(shù)據(jù)庫——雖然它在許多方面都表現(xiàn)優(yōu)秀铜跑。它不支持SQL,也沒有優(yōu)化器骡澈,更不能支持跨越多條記錄的事務(wù)或關(guān)聯(lián)查詢锅纺。如果你用不到這些特性,那HBase將是你的不二選擇肋殴。
在復(fù)用HBase的服務(wù)器時(shí)有一些注意事項(xiàng)囤锉。如果你需要保證HBase的服務(wù)器質(zhì)量,同時(shí)又想在HBase上運(yùn)行批處理腳本(如使用Pig從HBase中獲取數(shù)據(jù)進(jìn)行處理)疼电,建議還是另搭一套集群嚼锄。HBase在處理大量順序I/O操作時(shí)(如MapReduce),其CPU和內(nèi)存資源將會(huì)十分緊張蔽豺。將這兩類應(yīng)用放置在同一集群上會(huì)造成不可預(yù)估的服務(wù)延遲区丑。此外,共享集群時(shí)還需要調(diào)低任務(wù)槽(task slot)的數(shù)量修陡,至少要留一半的CPU核數(shù)給HBase沧侥。密切關(guān)注內(nèi)存,因?yàn)橐坏┌l(fā)生swap魄鸦,HBase很可能會(huì)停止心跳宴杀,從而被集群判為無效,最終產(chǎn)生一系列宕機(jī)拾因。
總結(jié)
最后要提的一點(diǎn)是旺罢,在加載數(shù)據(jù)到HBase時(shí),應(yīng)該使用MapReduce+HFileOutputFormat來實(shí)現(xiàn)绢记。如果僅使用客戶端API扁达,不僅速度慢,也沒有充分利用HBase的分布式特性蠢熄。
用一句話概述跪解,HBase可以讓你用鍵來存儲(chǔ)和搜索數(shù)據(jù),且無需定義表結(jié)構(gòu)签孔。
使用案例
Apache HBase: Powered By HBase Wiki
Mozilla: Moving Socorro to HBase
Facebook: Facebook’s New Real-Time Messaging System: HBase
StumbleUpon: HBase at StumbleUpon