1. 程式人生 > >大資料Hadoop:殺雞用的宰牛刀

大資料Hadoop:殺雞用的宰牛刀

Hadoop是個龐大的重型解決方案,它的設計目標本來就是大規模甚至超大規模的叢集,面對的是上百甚至上千個節點,這樣就會帶來兩個問題:

自動化管理管任務分配機制:這樣規模的叢集,顯然不大可能針對每個節點提供個性化的管理控制,否則工作量會大到累死人,必須採用自動化的管理和任務分配手段,而這並不是件簡單的事情。

強容錯能力:大規模叢集在某個任務執行週期內,也就是幾小時之內,都有可能發生裝置故障。如果沒有強容錯能力可能任何任務都無法執行出來。而容錯同樣並不容易實現,同樣非常消耗計算和儲存資源。

而且,Hadoop的產品線豐富,這本來是好事情,但要把這些模組都放在一個平臺上執行,還要梳理好各個模組之間的相互依賴性,就需要一個包羅永珍的複雜框架,這也使得Hadoop體系顯得很沉重。

但是,很多情況下,使用者的資料並不總會有那麼多。除了一些網際網路巨頭企業和國家級通訊運營商及銀行外,大多數使用者的資料量並沒有大到需要幾百上千個節點才能處理的地步。而且,很多使用者也只是為了常規的結構化資料運算(主要也就是SQL),用不著那麼完整的產品線。

結果,我們經常看到的現象是:使用者上了Hadoop,只有四個或八個節點,多的也就十來個,而且也只是安裝個Hive(或別的類似解決方案)來跑跑SQL。

這就是“殺雞用牛刀了”!

為什麼會這樣?

分享之前我還是要推薦下我自己建立的大資料學習交流Qun531629188
無論是大牛還是想轉行想學習的大學生
小編我都挺歡迎,今天的已經資訊上傳到群檔案,不定期分享乾貨,包括我自己整理的一份最新的適合2018年學習的大資料教程,歡迎初學和進階中的小夥伴。

道理很簡單。現在大資料平臺是個業界趨勢,而經過幾年的宣傳,使用者都覺得傳統關係資料庫不再是未來的方向,即使現在還能用,但總覺得繼續投資在關係資料庫上就有被時代甩下的風險,於是都想去嘗試新技術。但找來找去,也只有Hadoop勉強可用了,選擇Hadoop變成一個政治正確的事情了。

那麼,選用Hadoop有什麼不好呢?牛刀就牛刀,牛刀也可以用來殺雞,反正它開源不要錢,

不是這樣的。雖然Hadoop軟體本身是開源免費的(其實很多使用者上的是商業公司的產品,本來也並不便宜),但因為它的複雜性,想配置用好它並不容易,維護支援的成本一點也不低。Hadoop事實上是個高階產品,並不很適合資料量規模沒有大到需要上百節點的中小使用者。

大叢集和小叢集的實現技術是完全不一樣的,Hadoop為了解決大叢集問題而付出的努力並不是沒有成本的。

統一的自動化管理機制固然讓管理工作變簡單了,但也限制了程式設計師的靈活性。開發人員只能去適應,難以寫出適合業務和資料特徵的程式碼,這樣無法發揮機器的最大效能。比如想控制HDFS的檔案冗餘方案,讓不同檔案的冗餘數不同,而特定的冗餘方案能有效地減少網路傳輸量從而提高效能。這也許能夠通過修改Hadoop原始碼來實現,但並不輕鬆,而且隨意修改底層原始碼又會影響升級。

對於小規模的叢集,則沒有必要採用統一管理方式,可以針對每個節點進行個性化配置,程式設計師也可以自由決定每個節點的計算任務和資料分佈,這樣可以更有效地利用硬體資源,獲得最高的效能,雖然會需要更細緻的工作,但對於小規模叢集,這增加的工作量仍然是可以接受的。

Hadoop投入了相當多資源來實現超強的容錯,這對於大叢集當然也非常必要的。比如MapReduce為了容錯把任務拆得太碎,而且每次執行結果都會寫盤,以保證任務過程中有節點故障時仍然可以執行下去,這會嚴重影響效能。而且,這種體系也難以直接控制執行次序,在編寫有序有關聯運算時就很困難,需要費勁去繞(這個問題以後還會再談到)。

而對於幾個到十幾個節點的小叢集,就不需要這麼強的容錯能力了。在幾小時的任務週期內,整個叢集所有節點都能正常工作是個大概率事件。對於小叢集,我們只要保證有少數節點故障時整個叢集還能繼續工作以接受新任務,而讓當前正在執行的任務失敗也是可以容忍的,畢竟這並不會經常發生。

複雜的框架本身也會消耗很多資源。小叢集本來就沒有幾個節點,還要把有限的資源花費在這些不實際計算的事情上,顯然是不划算的。在目標任務型別較為單一時,應當選擇更適合的框架,沒必要去追求大而全的東西。

“牛刀”應當去做它適合做的事,也就資料量大但運算簡單的任務,用俗話說就是“傻大笨粗”。真到了幾百個節點的叢集,那還只有Hadoop能做了,而精細的活兒真不合適它來幹。

對於小叢集,我們需要更輕量級的大資料解決方案。

大資料的技術本質是高效能,而提高效能的需求無處不在,並不是只有那種規模的大資料。比即時查詢設計的資料量就不會也不可能太大(否則不可能即時),這種場景會要求有很好的整合性,但Hadoop基本上不可能被嵌到應用程式裡面,它只能在邊上作為一個數據源工作;有些臨時性資料處理時需要隨時使用,也不可能再為之專門建設大資料平臺,比如為了處理一批日誌而搭建一個Hadoop,等環境搭好時任務已經過期了。

有一句話叫做三人行必有我師,其實做為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的大資料交流學習群531629188不管你是小白還是大牛歡迎入駐,正在求職的也可以加入,大家一起交流學習,話糙理不糙,互相學習,共同進步,一起加油吧。