hadoop合併日誌 Hadoop學習 一

2021-10-13 19:44:19 字數 3891 閱讀 6376

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...