1. 程式人生 > >Hadoop基本知識,(以及MR程式設計原理)

Hadoop基本知識,(以及MR程式設計原理)

hadoop核心是:MapReduceHDFS(對應著job執行(程式)和檔案儲存系統(資料的輸入和輸出))

CRC32作資料交驗:在檔案Block寫入的時候除了寫入資料還會寫入交驗資訊,在讀取的時候需要交驗後再讀入。

安全模式:不能寫或刪檔案。系統啟動時檢查各個DataNode上資料塊的有效性,同時根據策略必要的複製或者刪除部分資料塊。

Map之後還會有Shuffle(混合)的過程:對於提高Reduce的效率以及減小資料傳輸的壓力有很大的幫助

mde排程,定期心跳監測

NameNode節點:管理HDFS檔案系統的名稱空間,維護著文

apreduce的原理

MapReduce就是任務的分解與結果的彙總

,來自Google的一篇論文。MapReduce是使用簡易的軟體框架,把輸入的資料集切分為若干獨立的資料塊,由map任務(task)並行處理。框架對map的輸出排序後傳給reduce任務。計算節點和儲存節點通常在一起。

       MapReduce框架由一個masterJobTracker和叢集中每個節點slave TaskTracker組成,整個框架負責排程任務和監控,每個slave上執行任務,master監控所有任務的執行以及重啟失敗任務。

HDFS的三個實體:

資料塊:預設為64MB(map的資料大小)HDFS的檔案劃分為塊大小。

DataNode節點:儲存並檢索資料塊的工作節點,受

NameNo件系統樹及整棵樹的所有的檔案及目錄。檔案會以兩個形式永久儲存在本地磁碟上(名稱空間映象檔案和編輯日誌檔案)NameNode記錄著檔案的各個塊所在的datanode資訊。但並不永久儲存這些塊的位置資訊,因為在系統啟動時datanode會重建這些資訊。

沒有NameNode,檔案系統將無法使用。NameNode損壞,則檔案系統的所有檔案丟失,因為不能根據DataNode的塊來重建檔案。所以NameNode的容錯非常重要。

第一種機制:備份那些組成檔案系統元資料持久狀態的檔案.通過配置使NameNode在多個檔案系統上儲存元資料的持久狀態或將資料寫入本地磁碟的同時,寫入一個遠端掛載的網路檔案系統

.當然這些操作都是原子操作.

第二種機制:執行一個輔助的NameNodesecondarynamenode)儲存合併後的名稱空間映象的副本。但secondarynamenod儲存狀態會滯後一些,所以Name/Node發生故障時難免丟失資料。一般把儲存在遠端掛載的網路檔案系統的資料複製到secondarynamenod並作為新NameNode執行

hadoop中Combiner的作用

1combiner實現本地key聚合:對map輸出的key排序,value組成列表進行迭代。

2combiner還具有類似本地reduce功能,對keyvalue列表直接合併成統計值。如hadoopwordcount例子和找出value的最大值的程式,combinerreduce完全一致。

使用combiner,則map先本地聚合,提升效率。當value是數字列表時,則可以直接合並統計,而不必等到所有map結束再reduce合併統計。

combiner使用合適,可提升速度,如果不合適,則會導致出錯。

Hadoop執行問題

執行的job分為map和reduce的任務task,由jobtracker監控,tasktracker在datanode上執行。詳細介紹可以參考:

http://hi.baidu.com/fengvsjinglove/item/7e78060ff64f5c1a3b53ee7c

1.一個map可能在多個節點上執行:

如果map執行過慢,就會在別的節點上重開一個,兩個誰先跑完就取誰的結果,然後殺掉另一個。

2.上百個節點左右的叢集做hadoop版本升級:

升級一般都要一起升,因為是跨版本,如1.0升到2.0,則需要停叢集。不同版本很多東西不相容。如果是不跨版本,比如1.x中各版本之間升級則可以不用。

3.叢集中分配給各節點的block塊數越均衡效能越好:

一個DataNode上的Block是唯一的,多個DataNode可能有相同的Block。關於其通訊機制參考http://blog.csdn.net/longshenlmj/article/details/16341315

4.每一個datanode會在每一個namenode裡面去註冊

datanode負責向namenode定時傳送心跳。這樣就解決了節點之間的單點故障,而jobtracker也根據它的資源管理和job生命週期管理,被拆分了,分別叫ResourceManagerApplicationMaster

ResourceManager 負責管理全域性的資源和任務的分配。

ApplicationMaster負責管理任務的執行和協調。