雲計算之hadoop生態圈簡介

  早在2011年9月份就開始用了3個月時間學習hadoop、hbase、hive、nutch等東西,但當時沒有明確的想法和充足的時間,後來就沒有繼續深入下去。有幸在今年春節之前的1個月的時間,做了hadoop、hbase相結合的簡單開發,對hadoop相關有更深的理解,特在此補上年前未寫的文章。

 1、hadoop之hdfs: hadoop的底層存儲文件系統協議,是hadoop的兩大核心之一,即分佈式布儲。以冗餘備份、自動負載、自動恢復損壞數據塊著稱,理念很傳統專業,實現的很好,效果很不錯。

    重點說明:

       (1)hadoop hdfs:文件創建後的可見性,只有調用了api中的flush或是close之後纔會使整個集羣可見。

        (2) hadoop hdfs api中的FileSystem對象往往是緩存獲取的,多次get往往只會返回該對象的同一個實例,增加了響應效率,所以在使用時,要是在一個進程中或是多線程中去得到FileSystem對象,不要用完就關閉,否則會報FileSystem is closed等相關錯誤。

        (3)hadoop namenode安全模式:當啓動hadoop集羣時,首先進入安全模式,其實就是進行集羣的塊校驗等操作,並進行校驗後的自動均衡、自動恢復等操作,在此過程中集羣中均爲只讀狀態,不可寫入任何數據。往往在集羣丟掉相關節點後重啓時會陷入很長時間的安全模式中,可以通過hadoop的shell命令離開安全模式,即hadoop dfsadmin -safemode leave。

 2、hadoop之map/reduce,hadoop的分佈式計算的簡稱,是hadoop的兩大核心之一,即分佈式計算。以簡單、靈活著稱。它是將分佈式編程模型再次抽取,抽像爲每個分佈式計算過程,都可以拆分成爲map打散和reduce聚合的過程,當然其中還可能包括combine(合併),partion(分區,即指定哪個map到哪個reduce的映射函數)部分。而以前的分佈式編程模型比之於此,要複雜的多,之前的分佈式並行編程模型對於程序員的控制、開發量太大,並且自己去處理異常錯誤等情況,使得並沒有得到廣泛的認同。而hadoop的map/reduce解決了這一瓶頸,它使得程序員只需要關注具體要處理的數據集和內部業務邏輯上,至於分佈式的存儲、容錯、負載均衡等都由hadoop框架去解決,當然它也提供了個性化的任務優化方案,如塊的切分、map或reduce的任務數量等均可自定義去實現。

    重點說明:

        (1)每個map/reduce任務都是以獨立的子jvm進程存在,而非多線程的模式,故在程序設計時注意變量的可見性。

        (2)其程序的發佈包的分發是由hadoop自身去管理其分發、運行的,故在運行自己的發佈包時,只需要hadoop jar jarName.jar mainClass等命令在主節點上運行即可,其分發過程由hadoop jar這個命令自行完成分發與運行。

        (3)hadoop的輸出目錄總是強制要求不存在,原因在於擔心由於不小心將hdfs中的已存目錄或文件覆蓋掉。

        (4)在map/reduce執行的過程中是允許任務失敗的,失敗之後會自行處理即分發到其它的taskTracker中去運行,因此會出現如map運行50%後突然回到40%的情況,多爲此種情況所致,是正常現象,不會影響程序的最終結果。

3、編寫hadoop程序時,注意程序所需的數據文件的處理,可以做一個驅動類中預處理一下,將數據文件都放到hdfs後再啓動提交job,這樣可以使每個節點均可獲取hdfs中的數據文件或是資源文件。

4、jobtracker、tasktracker是計算節點,namenode是命名空間節點,datanode是數據節點,namenode和jobtracker建議在不同節點上獨立存在,tasktracker和datanode一般是在一個節點上的不同進程存在。


5、hbase:基於hadoop實現的面向列的nosql數據庫,其api操作依賴於zoopkeeper,一般要將hbase的配置文件(其包括zookeeper配置參數)放到要操作hbase的項目中,實現對hbase的簡易操作。

6、hive: 基於hadoop實現的數據倉庫,其命令可轉化爲map/reduce執行,對類sql支持的比較好,有比較簡單實用的shell或是api可用於海量數據分析與統計計算。

7、zookeeper: 集羣協作服務組件,由於主節點的選擇、以及對hbase的操作首要查詢其root和.meta信息。

8、sqoop:作爲數據從sql到nosql遷移的第三方組件出現,如將mysql數據導入到hbase或是hive中,均可用它。


9、hadoop的社區版學習用比較不錯,但實用的話其配置和管理都比較不快捷。目前較爲流行的爲Cloudera公司的CDH版本,像如今的CDH4.x都還不錯,有免費版和商用版,據說除節點個數限制外無其它區別,可以商用。


大概通想到的有如上9條,希望對後來人有幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章