本節書摘來異步社群《hadoop海量資料處理:技術詳解與項目實戰(第2版)》一書中的第2章,第2.1節,作者: 範東來 責編: 楊海玲,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
作為安裝hadoop的第一步,就是根據實際情況選擇最合适的hadoop版本。而目前由于hadoop的飛速發展,功能更新和錯誤修複在不斷地疊代着,是以hadoop的版本非常多,顯得有些雜亂。對于初學者來說,選擇一個合适的hadoop版本進行學習非常重要,本節主要理清各個hadoop版本之間的關系與不同。
在第1章中曾經提到過,cloudera是一家提供hadoop支援、咨詢和管理工具的公司,在hadoop生态圈具有舉足輕重的地位,它的拳頭産品就是著名的cloudera’s distribution for hadoop,簡稱cdh。該軟體同apache hadoop一樣,都是完全開源的,基于apache軟體許可證,免費為個人和商業使用。cloudera從一個穩定的apache hadoop的版本開始,連續不斷地釋出新版本并為舊版本打上更新檔,為各種不同的生産環境提供安裝檔案,在cloudera的團隊中,有許多apache hadoop的貢獻者,是以cloudera公司的實力毋庸置疑。
使用者一般安裝hadoop時,不僅隻安裝hdfs、mapreduce,還會根據需要安裝hive、hbase、sqoop等。cloudera将這些相關項目都內建在一個cdh的版本裡,目前cdh包括hadoop、hbase、hive、pig、sqoop、flume、zookeeper、oozie、mahout和hue等,幾乎完整覆寫了整個hadoop的生态圈。這樣做的好處是保證了元件之間的相容性,因為這些各個項目之間也存在完全獨立的版本,其各個版本與hadoop之間必然會存在相容性的問題。如果你選擇了cdh,那麼同一個cdh版本的元件之間将完全不存在相容性問題。
在編寫本書時,cdh最新的版本是cdh5,也是目前最主流的版本,它是基于apache hadoop 2.6。cdh還有兩個正式的大版本:cdh3和cdh4(cdh1和cdh2現在早已絕迹,cloudera公司也早已放棄支援),其中cdh3是一個非常經典的版本,它是基于apache hadoop 0.20.2的,這是cdh第一個真正意義上的穩定版,久經生産環境考驗,而cdh4是cdh5的過渡版,沒有真正意義上流行過。
cdh也會以壓縮包的形式釋出,可以在其官網下載下傳,cdh還提供yum、apt、zypper形式的安裝。
對于任何一個apache項目,所有的基礎特性均被添加到一個稱為“trunk”的主代碼線(main code line),hadoop也不例外。當需要開發某個重要的特性時,會專門從主代碼線中延伸出一個分支(branch),這被稱為一個候選釋出版(candidate release)。該分支将專注于開發該特性而不再添加其他新的特性,待基本bug修複之後,經過相關人士投票便會對外公開成為釋出版(release version),并将該特性合并到主代碼線中。需要注意的是,多個分支可能會同時進行研發,這樣,版本高的分支可能先于版本低的分支釋出。
目前hadoop的版本有如下幾個特性[4]。
(1)append:hdfs append支援對檔案追加,hdfs在設計之初的理念是“一次寫入,多次讀取”,但由于某些具有寫需求的應用使用hdfs作為底層存儲系統,如hbase的預寫日志(wal),是以hdfs加入了這一功能。
(2)security:hadoop缺乏自己的安全機制,該功能可以為hadoop增加基于kerberos和deletion token的安全機制。
(3)symlink:使hdfs支援符号連結,符号連結又叫軟連結,是一類特殊的檔案 ,這個檔案包含了另一個檔案的路徑名(絕對路徑 或者相對路徑 ),在對符号檔案 進行讀操作或寫操作時,系統會自動把該操作轉換為對源檔案 的操作,但删除連結檔案時,系統僅僅删除連結檔案,而不删除源檔案本身。
(4)mrv1:第一代mapreduce計算架構,通過mapreduce思想,将問題轉化為map和reduce兩個階段,基礎服務由jobtracker、tasktracker程序提供。
(5)yarn/mrv2:第一代mapreduce計算架構具有擴充性和多計算架構支援不足的缺點,針對這些,提出了全新的資源管理架構(yet another resource negotiator),通過這個元件,我們可以在共用底層存儲(hdfs)的情況下,計算架構采取可插拔式的配置。在mrv1中的jobtracker的資源管理和作業跟蹤的功能被分拆由resourcemanager和applicationmaster兩個元件來完成,增強了擴充性。
(6)namenode federation:在hadoop中,namenode儲存了所有檔案的中繼資料,是以其性能制約了整個hdfs叢集的擴充。基于此,namenode federation将namenode橫向擴充,每一個namenode儲存一部分中繼資料,即将中繼資料水準切分,彼此之間互相隔離,但共享底層的datanode存儲。
(7)namenode ha:在hadoop中,namenode還存在單點故障問題,當namenode出現故障時,叢集必須停止工作。namenode采取共享存儲的方案解決namenode的高可用性問題。
基于以上hadoop的特性衍生出的hadoop版本令人眼花缭亂,這也是由于功能更新和錯誤修複在不斷進行中。圖2-1所示為hadoop不同的版本分支。
(1)0.20.0~0.20.2:hadoop的0.20分支非常穩定,雖然看起來有些落後,但是經過生産環境考驗,是hadoop曆史上生命周期最長的一個分支,cdh3、cdh4雖然包含了0.21和0.22分支的新功能和更新檔,但都是基于此分支。
(2)0.20-append:0.20-append支援hdfs追加,由于該功能被認為是一個不穩定的潛在因素,是以它被單獨新開了一個分支,并且沒有任何新的hadoop的正式版基于此分支釋出。
(3)0.20-security:該分支基于0.20并支援kerberos認證。
(4)0.20.203~0.20.205:這些版本包括了security分支所帶功能,并且還包括錯誤修複和0.20分支的線上開發的改進。
(5)0.21.0:0.21是一個預研性質的版本,目的是強調那段時間開發的一些新功能,沒有security功能,但有append功能,不建議部署在生産環境。
(6)0.22.0:0.22.0包括hdfs的安全功能,并且更新不大。
(7)0.23.0:在2011年11月,hadoop 0.23釋出了,包括了append、security、yarn和hdfs federation功能,該版本被認為是2.0.0的預覽版本。
(8)1.0.0:1.0.0版本是基于0.20.205版本釋出,包括了security功能,是一個值得部署的穩定版本。但是從上面可以看出,1.0.0并不是包含了所有分支。
(9)2.0.0:2012年5月,基于0.23.0分支的2.0.0版本釋出,它包含了yarn,但移除了mrv1,相容了mrv1的api,但底層實作有明顯不同,需要經過大量測試才能被用于生産環境。cdh4是基于此版本,但cdh4還提供了mrv1的實作。
在本書第1版問世的時候,hadoop的版本還比較亂,各種分支、新特性各自為政,現在已經由cdh5統一了局面,目前國内大多采用cloudera的cdh5作為生産環境的hadoop版本,但每個版本各自的特性和功能還是有必要提一下的,如表2-1所示。
選擇hadoop的版本取決于使用者想要的功能和是否穩定,對于穩定的需求,一般就考慮cloudera的cdh。cdh有很多的更新檔和更新,穩定性很不錯。對于功能的需求,cdh幾乎包含了整個hadoop生态圈,能夠很好地為業務提供支援。cdh5是目前最穩定也是功能最全的cdh版本。
cdh5還包括了hive、hbase、sqoop等的cdh版,具體版本号如表2-2所示。表2-2的第二列前面的數字是社群版版本号,後面的數字是cdh的版本号。