Hadoop三大核心(HDFS,YARN,MapReduce)的理解
一、HDFS
HDFS是分散式檔案系統,有高容錯性的特點,可以部署在價格低廉的伺服器上,主要包含namenode和datanode。
Namenode是hdfs中檔案目錄和檔案分配管理者,它儲存著檔名和資料塊的對映管理,資料塊和datanode列表的對映關係。其中檔名和資料塊的關係儲存在磁碟上,但是namenode上不儲存資料塊和datanode列表的關係,該列表是通過datanode上報建立起來的。
Namenode上的有三種互動,1、client訪問namenode獲取的相關datanode的資訊。2、datanode心跳彙報當前block的情況。3、secondarynamenode做checkpoint互動。
DataNode它負責實際的資料儲存,並將資料息定期彙報給NameNode。DataNode以固定大小的block為基本單位組織檔案內容,預設情況下block大小為128MB。當用戶上傳一個大的檔案到HDFS上時,該檔案會被切分成若干個block,分別儲存到不同的DataNode;同時,為了保證資料可靠,會將同一個block以流水線方式寫到若干個(預設是3,該引數可配置)不同的DataNode上。這種檔案切割後儲存的過程是對使用者透明的。
SecondaryNameNode,用來輔助namenode進行元資料的合併,並且傳回到namenode。
二、YARN
YARN主要包括幾種角色
ResourceManager(RM):主要接收客戶端任務請求,接收和監控NodeManager(NM)的資源情況彙報,負責資源的分配與排程,啟動和監控ApplicationMaster(AM),一個叢集只有一個。
NodeManager:主要是節點上的資源管理,啟動Container執行task計算,上報資源、container情況給RM和任務處理情況給AM,整個叢集有多個。
ApplicationMaster:主要是單個Application(Job)的task管理和排程,向RM進行資源的申請,向NM發出launch Container指令,接收NM的task處理狀態資訊。每個應用有一個。
Container:是YARN中資源的抽象,它封裝了某個節點上一定量的資源(CPU和記憶體兩類資源)。
三、MapReduce
MapReduce是hadoop的一種離線計算框架,適合離線批處理,具有很好的容錯性和擴充套件性,適合簡單的批處理任務。缺點啟動開銷大,任務多使用磁碟效率比較低。
一個MapReduce作業通常會把輸入的資料集切分為若干獨立的資料塊,由map任務(task)以完全並行的方式處理它們。框架會對map的輸出先進行排序,然後把結果輸入給reduce任務。通常作業的輸入和輸出都會被儲存在檔案系統中。整個框架負責任務的排程和監控,以及重新執行已經失敗的任務。通常,MapReduce框架和分散式檔案系統是執行在一組相同的節點上的,計算節點和儲存節點通常在一起。這種配置允許框架在那些已經存好資料的節點上高效地排程任務,這可以使整個叢集的網路頻寬被非常高效地利用。
一個MapReduce任務包含一般會這幾個部分:Map、Shuffle(Sort、Partitioner、Combiner、Merge、Sort)、Reduce。