天天看點

《HBase實戰》一導讀

《HBase實戰》一導讀

hbase實戰

2008年秋季我開始和hbase結緣,當時它還是一個新生項目,一年前剛剛釋出。早期版本出來時,hbase表現很不錯,但是也不是沒有令人尴尬的缺陷。hbase項目當時有近10個軟體commiffer,作為一個apache子項目還算不錯。接下來是nosql宣傳的高潮。當時專有名詞nosql還沒有出現,但是随後的一年這個術語變成了通俗用語。沒有人能夠說清楚為什麼nosql重要,隻知道它就是重要,反正資料領域開源社群的每個人都對這個概念很着迷。社群中有兩種聲音,有人批評關系型資料庫,批評它愚不可及的嚴謹;有人嘲笑新技術,嘲笑它不夠成熟。

大部分探索新技術的人來自于網際網路公司,當時我就在一家緻力于社交媒體内容分析的創業公司工作。那時候facebook仍在強調隐私政策,而twitter還不夠大,其著名的報錯頁面“失敗的鲸魚”(fail whale)還沒有問世。當時我們的興趣點主要在部落格上。在此前一家公司我花了3年好時光專注于層次型資料庫引擎。我們廣泛使用了berkeley db,是以我熟悉不使用sql引擎的資料技術。在這家公司我加入了一個小團隊,任務是建構一個新型資料管理平台。我們有一個ms sql資料庫,已經塞滿了部落格文章和評論。當我們的日常分析作業耗時達到18小時時,我們都知道這個系統時日不多了。

在收集了基本需求後,我們着手尋找新型資料技術。我們的團隊不大,一邊維護現有系統,一邊花了數月時間評估不同的選擇。我們試驗了不同的方法,并親身感受了對資料手工分區的痛苦。我們研究了cap定理和最終一緻性,最後的結論是妥協。盡管hbase有缺點,我們還是決定選擇它,我們認為開源技術的潛在好處超過了它的風險,并且說服了經理。

我在家裡玩過hadoop,但是從沒有寫過真正的mapreduce作業。我聽說過hbase,但在這份新工作之前也沒有特别關注過。随着時間推移,我們已經開始行動。我們申請了一些空閑機器和幾個機架,然後就開工了。這家公司是.net的地盤,我們得不到運維支援,是以我們學着使用bash和rsync,自己管理整個叢集。

我加入了郵件清單和irc頻道,開始提問題。就在那個時候,我認識了amandeep。他在忙于碩士論文,嘗試把hbase運作到hadoop以外的系統上。不久他完成學業,加入amazon,搬到西雅圖。在這個充滿微軟痕迹的城市中,我們兩個是少有的hbase粉絲。随後兩年很快過去了……

2010年秋季,第一次提出讓我們寫《hbase實戰》。在我們看來,這很搞笑。為什麼是我們這兩個社群會員來寫這本書?内部來看,這是一塊難啃的骨頭。《hbase權威指南》正在進展中,我們認識它的作者,我們深知在他面前的挑戰。外部來看,我認為hbase隻是一個“簡單的鍵值資料庫”。api隻有5個基本概念,都不複雜。我們不想再寫一本類似于《hbase權威指南》那樣介紹内部機制的書,我也不相信應用開發人員從這類書中可以得到足夠有價值的東西。

我們開始做頭腦風暴,事情很快清楚了,我是錯的。不僅可以找到足夠的資料幫助使用者,而且社群會員的角色使得我們成為寫這本書的最佳人選。我們開始分門别類整理多年來我們使用這門技術累積下來的知識。這本書是我們8年來使用hbase實踐經驗的升華。它面向hbase的全新使用者,可以指導大家躍過我們自己當年遇到過的障礙。我們盡可能多地收集和編篡了散布在社群裡的内部知識。對于模糊的建議我們盡可能給出清晰的指導。我們希望你能發現這本書是一個完整的手冊,可以幫助你順利開始使用hbase,而不隻是一個簡單的問答清單。

hbase現在逐漸穩定了。我們開始時遇到過的大部分缺陷已經被解決、打上更新檔、或者完全修改了架構。hbase正在接近1.0版本,在這個裡程碑時刻我們很自豪自已是社群的一部分。我們很自豪把這份書稿送出給社群,希望它可以鼓舞和幫助下一代hbase使用者。hbase最強大之處就是興旺的社群,我們希望你加入到社群來,幫助社群在資料系統新時代繼續創新。

nick dimiduk

當你看到這裡的時候,你大概很想知道我是怎樣進入hbase世界的。首先我要感謝你選擇這本書來學習hbase,學習怎樣使用hbase作為存儲系統來搭建應用系統。希望你能找到有用的東西和實用技巧,以便更好地搭建應用系統,祝你成功。

我曾經在加州大學聖克魯茲分校進行大學學習,當時我在思科公司找了一份兼職研究員的工作,專注于分布式系統。我所工作的團隊當時在搭建一個資料內建架構,這個架構可以對數百種資料存儲(包括但不限于大型關系型資料庫管理系統)上的資料進行內建、索引和研究。我們開始尋找可以解決問題的系統和解決方案。我們評估了許多系統,從對象資料庫到圖形資料庫,最後我們考慮基于berkeley db建構一個定制的分布式資料存儲。顯而易見的一個關鍵需求是可擴充性,但是我們并不想從頭開始建構一個分布式系統。想想看,如果你為某個機構工作,打算建構一個定制的分布式資料庫或者檔案系統,最好先看看有沒有現成的解決方案可以解決你的一部分問題。

基于這個原則,我們認為從頭開始搭建新系統是不明智的,我們希望使用已有的技術。随後我們開始使用hadoop系列産品,嘗試了很多元件,在hbase上為資料內建系統搭建了概念驗證原型系統。系統工作良好,擴充性也不錯。hbase很适合解決這類問題,但是當時它們都是新生項目,能夠保證我們成功的一個重要因素是它們的社群。hbase有着一個最熱情的、最有活力的開源社群;當時社群規模要小得多,但是迄今為止其核心理念一直沒有變化。

後來資料內建項目成了我的研究所學生論文。這個項目用hbase作為核心,是以我也越來越深入地參與到社群中。在郵件清單裡和irc頻道裡,開始我是問别人問題,後來我也回答别人的問題。在這段時間裡我認識了nick并了解了他在做什麼。在為這個項目工作的過程中,我對這個技術和開源社群的興趣和熱愛與日俱增,我希望一直參與下去。

完成研究所學生學習後,我加入了位于西雅圖的amazon,開始做後端分布式系統項目的工作。我的大部分時間花在elastic mapreduce團隊那裡,我們搭建了hbase托管服務的第一個版本。nick也生活在西雅圖,我們經常見面,讨論工作中的項目情況。2010年底,manning出版社提出寫《hbase實戰》這本書。開始的時候我們覺得這個想法很搞笑,我記得對nick說過:“不就是上傳、下載下傳和掃描嗎?hbase的用戶端隻做這幾件事情。你想寫一本介紹3個api 調用的書嗎?”

但是深入思考之後,我們意識到建構hbase應用系統很有挑戰,而市面上缺乏足夠的資料可供啟蒙。這種情況限制了hbase的發展。我們決定收集更多如何有效使用hbase的資料,來幫助大家建構滿足需要的系統。我們花了一些時間整理資料,2011年秋季,我們開始了這本書的寫作。

那段時間,我搬家到了舊金山,加入了cloudera公司,接觸到很多搭建在hadoop和hbase上的應用系統。我盡力結合我所知道的以及過去多年在hbase相關工作中和研究所學生學習中得到的,提取精華寫到你現在讀的這本書中。多年來hbase走了很長的路,許多大公司使用它作為核心系統。它比以往更加穩定、快速和易于維護,1.0版本也接近釋出了。

我們寫這本書的目的就是希望學習hbase可以更加有章可循,更加容易,更加有趣。等你進一步了解hbase以後,我們鼓勵你參與到社群中來,你可以學到更多在這本書中沒有講到的。你可以發表部落格,貢獻代碼,分享經驗,讓我們一起推動這個偉大的項目向各種可能的方向走得更遠。打開書,開始閱讀,歡迎來到hbase世界!

第3章 分布式的hbase、hdfs和mapreduce

第二部分 進階概念

第4章 hbase表設計

第5章 使用協處理器擴充hbase

第6章 其他的hbase用戶端選擇

第三部分 應用系統執行個體

第7章 通過執行個體學習hbase:opentsdb

第8章 在hbase上查詢地理資訊系統

第四部分 讓hbase運轉起來

第9章 部署hbase

第10章 運維