hadoop組成:
hadoop = hdfs(儲存) + mapreduce(計算) + yarn(資源管理) + common(工具包)
—分布式儲存系統
—提供了高可靠性、高擴充套件性和高吞吐率的資料儲存服務
—分布式計算框架(計算向資料移動)
—具有 易於程式設計、高容錯性和高擴充套件性等優點。
—負責集群資源的管理和排程
如圖所示:hdfs整體架構可分為:客戶端(client)、namenode(簡稱nn)、secondary namenode、datenode四部分!
hdfs儲存模型:位元組
①檔案線性切割成塊(block):偏移量 offset (byte)(b1:0~1000;b2:1001~2000;……);
②block分散儲存在集群節點中;
③單一檔案block大小一致,檔案與檔案可以不一致;
④block可以設定副本數,副本分散在不同節點中,副本數不要超過節點數量;
⑤檔案上傳可以設定block大小和副本數;
⑥已上傳的檔案block副本數可以調整,大小不變;
⑦只支援一次寫入多次讀取,同一時刻只有乙個寫入者;
①接受客戶端的讀/寫服務
②收集datanode匯報的block列表資訊
基於記憶體儲存:不會和磁碟發生交換
①只存在記憶體中
②需要持久化
①檔案owership(歸屬)和permissions(許可權)
②檔案大小,時間
③(block列表:block偏移量)
④位置資訊:block儲存在哪個datanode資訊
注意:以上資訊除了「位置資訊」由datanode啟動時上報,不儲存在磁碟,其他內容都要持久化到磁碟
①namenode的metadate資訊在啟動後會載入到記憶體
②metadata儲存到磁碟檔名為」fsimage」
③block的位置資訊不會儲存到fsimage
④edits記錄對metadata的操作日誌
—fsimage儲存了最新的元資料檢查點,類似快照。
—editslog儲存自最新檢查點後的元資訊變化,從最新檢查點後,hadoop將對每個檔案的操作都儲存在edits中。客戶端修改檔案時候,先寫到editlog,成功後才更新記憶體中的metadata資訊。
metadata = fsimage + editslog
①本地磁碟目錄儲存資料(block),檔案形式
②同時儲存block的元資料(md5值)資訊檔案
③啟動dn程序的時候會向namenode匯報block資訊
④通過向nn傳送心跳保持與其聯絡(3秒一次),如果nn 10分鐘沒有收到dn的心跳,則認為其已經lost,並copy其上的block到其它dn
主要工作:幫助nn合併edits.log檔案,減少nn啟動時間,它不是nn的備份(但可以做備份)。
snn執行合併時間和機制:
a、根據配置檔案設定的時間間隔fs.checkpoint.period 預設3600秒。
b、根據配置檔案設定edits.log大小 fs.checkpoint.size 規定edits檔案的最大值預設是64mb。
首先,nn中的fsimage和edits檔案通過網路拷貝,到達ssn伺服器中,拷貝的同時,使用者運算元據,那麼nn中就會生成乙個新的edits來記錄使用者的操作,而另一邊的snn將拷貝過來的edits和fsimage進行合併,合併之後就替換nn中的fsimage。之後nn根據fsimage進行操作(當然沒隔一段時間就進行替換合併,迴圈)。當然新的edits與合併之後傳輸過來的fsimage會在下一次時間內又進行合併。
①第乙個副本:放置在上傳檔案的dn:如果是集群外提交,則隨機挑選一台磁碟不太滿,cpu不太忙的節點。
②第二個副本:放置在與第乙個副本不同的機架的節點上。
③第三個副本:與第二個副本相同機架的不同節點。
集群內提交:
hdfs寫流程:
①hdfs客戶端根據block的尺寸將檔案切分成乙個個block,並建立dfs物件;
②dfs物件聯絡nn,告訴它要開始儲存檔案,nn返回一批第乙個block的儲存節點dn;
③client得到位址選出最優的dn節點開始write;
④資料寫入dn是以pecket(小包)的形式,第乙個dn節點與其他備份節點串聯保持通訊,第一pecket寫入後,開始備份到其他節點,後續寫入與備份同時進行,整個過程就像乙個管道一樣持續寫入;
⑤當第乙個block全部寫入成功後,dn會想nn和client匯報寫入成功,nn將第二個block的位址給client,開始寫入第二個block,繼續以管道形式寫入,直到所有的block寫入成功,client向nn匯報全部寫入成功。
⑥nn更新fsimage內容。
hdfs讀流程
client:
①和nn獲取一部分block副本位置列表;
②線性和dn獲取block,最終合併為乙個完整檔案
③在block副本列表中按距離擇優選取
①果linux系統使用者zhangsan使用hadoop命令建立乙個檔案,那麼這個檔案在hdfs中owner就是zhangsan。
②hdfs的許可權目的:阻止好人錯錯事,而不是阻止壞人做壞事。hdfs相信,你告訴我你是誰,我就認為你是誰。
①nn啟動的時候,首先將映像檔案(fsimage)載人記憶體,並執行編輯日誌(edits)中的各項操作。
②一旦在記憶體中成功建立檔案系統元資料的對映,則建立乙個新的fsimage檔案(這個操作不需要secondarynamenode)和乙個空的編輯日誌。
③此刻nn執行安全在安全模式。即nn的檔案系統對於客服端來說是唯讀的。
④在此階段namenode收集各個datanode的報告,當資料塊達到最小副本數以上時,會被認為是「安全」的,在一定比例(可設定)的資料塊被確定為「安全」後,再過若干時間,安全模式結束。
⑤當檢測到副本數不足的資料塊時,該塊會被複製直到達到最小副本數,系統中資料塊的位置並不是由namenode維護的,而是以塊列表形式儲存在datanode中。
高容錯性:
①資料自動儲存多個副本
②副本丟失後,自動恢復
適合批處理:
①移動計算而非資料
②資料位置暴露給計算框架(block便宜量)
適合大資料處理:
①gb 、tb 、甚至pb 級資料
②百萬規模以上的檔案數量
③10k+ 節點
可構建在廉價機器上:
①通過多副本提高可靠性
②提供了容錯和恢復機制
低延遲高資料吞吐訪問問題
比如支援秒級別反應,不支援毫秒級
延遲與高吞吐率問題(吞吐量大但有限制於其延遲)
小檔案訪問
占用namenode 大量記憶體
尋道時間超過讀取時間
併發寫入、檔案隨機修改
乙個檔案只能有乙個寫者
Hadoop到底能做什麼?怎麼用hadoop?
調研hadoop頗久,就是想知道hadoop是什麼?hadoop能做什麼?怎麼用hadoop?最主要是這三塊,至於投入和風險也會隨之出來 濃縮了我幾十頁的調研方案啊!hadoop是什麼?hadoop是乙個開源的框架,可編寫和執行分布式應用,處理大規模資料,是專為離線和大規模資料分析而設計的,並不適合...
《Hadoop權威指南》第一章初始Hadoop
我們已經進入了乙個資料大 的時代!有大量資料需要儲存和處理 硬碟儲存容量多年來不斷提公升的同時,訪問速度卻沒有與時俱進。可採用分布式儲存。但是存在兩個問題,1.硬體故障問題。解決辦法 a.冗餘硬碟陣列 raid b.hadoop的檔案系統hdfs。2.多數任務需要某種方式結合大部分資料來共同分析。關...
hadoop 日誌引數
1 mapreduce執行日誌引數 預設設定,訪問在hdfs上,重啟後將丟失,可通過mapred site.xml修改路徑設定 分為歷史日誌引數和執行日誌引數 mapreduce.jobhistory.done dir mapreduce.jobhistory.intermediate done d...