"運行Hadoop"是什麼意思?服務器
這意味着在網絡分佈的不一樣服務器上運行一組守護進程(daemons)。這些守護進程有特殊的角色,一些僅存在於單個服務器上,一些則運行在多個服務器上。網絡
這些角色都有誰?架構
NameNode(名稱節點)分佈式
DataNode(數據節點)oop
Secondary NameNode(次名稱節點)spa
JobTracker(做業跟蹤節點)進程
TaskTracker(任務跟蹤節點)內存
分佈式存儲採用了神馬結構?資源
分佈式存儲系統被稱爲Hadoop文件系統,或簡稱爲HDFS。虛擬機
Hadoop Distribution File System
Hadoop在分佈式計算與分佈式存儲中都採用了主/從(master/slave)結構。
NameNode是什麼,幹啥的?
Hadoop守護進程中最重要的一個。
NameNode位於HDFS的主端,它指導從端的DataNode執行底層的I/O任務。
NamNode跟蹤文件如何被分割成文件塊,而這些塊又被哪些節點存儲,以及分佈式文件系統的總體運行狀態是否正常。
運行NameNode消耗大量的內存和I/O資源。所以,爲了減輕機器的負債,駐留NameNode的服務器一般不會存儲用戶數據或者執行MapReduce程序的計算任務。這意味着NameNode服務器不會同時是DataNode或者TaskTracker
不過NameNode的重要性也帶來了一個負面影響-Hadoop集羣的單點失效。對於任何其餘的守護進程,若是它們所駐留的節點發生軟件或硬件失效,Hadoop集羣極可能還會繼續平穩運行,否則你還能夠快速重啓這個節點。但這樣的方法並不適用於NameNode。
DataNode是什麼,幹啥的?
每一個從節點會駐留一個DataNode守護進程,來執行分佈式文件系統的繁重工做-將HDFS數據塊讀取或者寫入到本地文件系統的實際文件中。
當對HDFS文件進行讀寫時,文件被分割爲多個塊,由NameNode告知客戶端每一個數據塊駐留在哪一個DataNode。客戶端直接與DataNode守護進程通訊,來處理與數據塊相對應的本地文件。然後,DataNode會與其餘DataNode進行通訊,複製這些數據塊以實現冗餘。
NameNode和DataNode交互?
在HDFS中交互,NameNode跟蹤文件的元數據。
NameNode持有的文件的元數據是?
描述系統中所包含的文件以及每一個文件如何被分割爲數據塊。DataNode提供數據塊的備份存儲,並持續不斷地向NameNode報告,以保持元數據爲最新狀態。
DataNode上的文件存儲是怎麼存的?
在HDFS上文件是被分紅數據塊存儲的,默認大小(64MB),由NameNode指定這些文件塊存儲在哪些DataNode中,每一個文件塊默認有3個副本,確保若是一個DataNode垮掉,數據不會丟失。初始化時,每一個DataNode將當前存儲的數據塊告知NameNode,初始化完成以後,DataNode也會不斷的更新本地信息給NameNode,並接收指令。
Secondary NameNode是幹什麼的?
Secondary NameNode (SNN)是一個用於監測HDFS集羣狀態的輔助守護進程。就像NameNode同樣,每一個集羣有一個SNN,它一般也獨佔一臺服務器,該服務器不會運行其餘的DataNode或TaskTacker守護進程。SNN與NameNode的不一樣在於它不接收或記錄HDFS的任何實時變化。相反,它與NameNode通訊,根據集羣所配置的時間間隔獲取HDFS元數據快照。
如前所述,NameNode是Hadoop集羣的單一故障點,而SNN的快照能夠有助於減小停機的時間並下降數據丟失的風險。然而,NameNode的失效處理須要人工干預,即手動地從新配置集羣,將SNN用做主要得NameNode。
JobTracker是什麼?
JobTracker守護進程是應用程序和Hadoop之間的紐帶。
JobTracker作了些什麼?
一旦提交代碼到集羣上,JobTracker就會肯定執行計劃,包括決定處理哪些文件、爲不一樣的任務分配節點以及監控全部任務的運行。若是任務失敗,JobTacker將自動重啓任務,但所分配的節點可能會不一樣,同時受到預約義的重試次數限制。
一個Hadoop集羣有幾個JobTracker的守護進程?
每一個Hadoop集羣只有一個JobTracker守護進程,它一般運行在服務器集羣的主節點上。
TaskTracker是什麼?
與存儲的守護進程同樣,計算的守護進程也遵循主/從架構:JobTracker做爲主節點,檢測MapReduce做業的整個執行過程,同時,TaskTracker管理各個任務在每一個從節點上的執行狀況。
每一個TaskTracker負責執行由JobTracker分配的單項任務。雖然每一個從節點上僅有一個TaskTracker,但每一個TaskTracker能夠生產多個JVM(Java虛擬機)來並行地處理許多map或reduce任務。
TaskTracker的一個職責是持續不斷地與JobTracker通訊。若是JobTracker在指定得時間內沒有收到來自TaskTracker的"心跳",它會假定TaskTracker已經崩潰了,進而從新提交相應的任務到集羣中的其餘節點。
JobTracker是如何調用TaskTracker的?
JobTracker和TaskTracker的交互,當客戶端調用JobTracker來啓動一個數據處理做業時,JobTacker會將工做切分,並分配不一樣的map和reduce任務到集羣中的每一個TaskTracker上。
一個典型的Hadoop拓撲結構特色是?
在主節點上運行NameNode和JobTracker的守護進程,並使用獨立的節點運行SNN以防主節點失效。在小型集羣中,SNN也能夠駐留在某一個從節點上,而在大型集羣中,連NameNode和JobTracker都會分別駐留在兩臺機器上。每一個從節點均駐留一個DataNode和TaskTracker,從而在存儲數據的同一節點上執行任務。