【Hadoop】Hadoop组件 -之 HDFS组件
一、概述
Hadoop作為分布式存儲,分布式計算的大數據生態系統,涵蓋了從數據源到數據采集,數據存儲,數據計算,數據分析,數據應用的各個場景,學習大數據的架構,了解各個組件對地工作原理和運行機制非常關鍵。
Hadoop生態系統以下將從以下幾個有代表性的組件分布介紹工作原理及運行的機制。
二、HDFS組件
HDFS(Hadoop Distributed, Filesystem)大數據分布式的文件存儲系統。
2.1概述
Hadoop作為分布式存儲分布式計算的典范,其也經歷了三個發展階段:
第一階段,集中存,集中算;對于集中算,遇到機器性能的瓶頸。
第二階段,集中存,分開算;分布式計算,需要將任務做拆分到多臺服務器,這時候會需要網絡速度的瓶頸;
第三階段,分開存,分開算;因分布都是采用了廉價的機器進行分布式的存儲,將一個大的任務進行拆分,分開計算也解決了集中計算的痛點。
2.2 HDFS 分布式存儲系統
背景:在現代的企業環境中,單機容量往往無法存儲大量數據,需要跨機器存儲。
定義:統一管理分布在集群上的文件系統稱為分布式文件系統 。
特點:Hadoop 非常適于存儲大型數據 (比如 TB 和 PB), 其就是使用 HDFS 作為存儲系統. HDFS 使用多臺計算機存儲文件, 并且提供統一的訪問接口, 像是訪問一個普通文件系統一樣使用分布式文件系統
2.3 應用場景
適合的場景
1)存儲非常大的文件:這里非常大指的是幾百M,G,或者TB級別,需要高吞吐量,對延時沒有要求。
2)采用流式的數據訪問方式:即一次寫入,多次讀取,數據集經常從數據源生成或者拷貝一次,然后再其上做很多分析工作。
3)運行于商業硬件上:Hadoop不需要特別貴的機器,可運行在普通廉價的機器,可以節約成本。
4)需要高容錯性;
5)為數據存儲提供所需的擴展能力
不適合的場景
1)不適合低延時數據訪問,比如毫秒級的存儲數據,是做不到的 2)?無法高效的對大量小文件進行存儲。 ? - 存儲大量小文件的話,它會占用NameNode大量的內存來存儲文件目錄和塊信息。這樣是不可取的, 因為NameNode的內存總是有限的; ? - 小文件存儲的尋址時間會超過讀取時間,它違反了HDFS的設計目標。 3)?不支持并發寫入、文件隨機修改。 ? - 一個文件只能有一個寫,不允許多個線程同時寫; ? - 僅支持數據append(追加),不支持文件的隨機修改2.4組成架構
?
?
1、NameNode(nn):就是Master,它是一個 主管、管理者。 1)管理HDFS的名稱空間; 2)配置副本策略; 3)管理數據塊(Block)映射信息; 4)處理客戶端讀寫請求。 2、DataNode:就是Slave。NameNode下達命令,DataNode執行實際的操作。 1)存儲實際的數據塊; 2)執行數據塊的讀/寫操作 3、Client:就是客戶端。 1)文件切分。文件上傳HDFS的時候,Client將文件切分成一個一個的Block,然后進行上傳; 2)與NameNode交互,獲取文件的位置信息; 3)與DataNode交互,讀取或者寫入數據; 4)Client提供一些命令來管理HDFS,比如NameNode格式化; 5)Client可以通過一些命令來訪問HDFS,比如對HDFS增刪查改操作; 4、Secondary NameNode:并非NameNode的熱備。當NameNode掛掉的時候,它并不能馬上替換NameNode并 提供服務。 1)輔助NameNode,分擔其工作量,比如定期合并Fsimage和Edits,并推送給NameNode ; 2)在緊急情況下,可輔助恢復NameNode 2.5?Block塊的存放方式及介紹 所有的文件都是以 block 塊的方式存放在 HDFS 文件系統當中,作用如下: 1. 一個文件有可能大于集群中任意一個磁盤,引入塊機制,可以很好的解決這個問題 2. 使用塊作為文件存儲的邏輯單位可以簡化存儲子系統 3. 塊非常適合用于數據備份進而提供數據容錯能力。 在 Hadoop1.x 當中, 文件的 block 塊默認大小是 64M, hadoop2/3.x 當中, 文件的 block 塊大小默認是 128M, block 塊的大小可以通過 hdfs-site.xml 當中的配置文件進行指定 Block大小設置的原理: 1. 如果尋址時間約為10ms,即查找到目標block的時 間為10ms。 2. 尋址時間為傳輸時間的1%時,則為最佳狀態。 (專家)因此,傳輸時間=10ms/0.01=1000ms=1s 3. 而目前磁盤的傳輸速率普遍為100MB/s。 4. block大小=1s*100MB/s=100MB?
思考:為什么塊的大小不能設置太小,也不能設置太大?
1)HDFS的塊設置太小,會增加尋址時間,程序一直在找塊的開始位置; 2)如果塊設置的太大,從磁盤傳輸數據的時間會明顯大于定位這個塊開始位置所需的時間。導致程序 在處理這塊數據時,會非常慢。 總結:HDFS塊的大小設置主要取決于磁盤傳輸速率 2.6?HDFS文件副本與機架感知 副本機制與機架感知: HDFS分布式文件系統的內部有一個副本存放策略:以默認的副 本數=3為例: 1. 第一個副本在Client所處的節點上。如果客戶端在集群外,隨機選一個。 2. 第二個副本在另一個機架的隨機一個節點 3. 第三個副本在第二個副本所在機架的隨機節點 2.7?HDFS安全模式 安全模式是hadoop的一種保護機制,用于保證集群中的數據塊的安全性。當集群啟動的時候,會首先進 入安全模式。當系統處于安全模式時會檢查數據塊的完整性。 假設我們設置的副本數(即參數dfs.replication)是3,那么在datanode上就應該有3個副本存在,假設只 存在2個副本,那么比例就是2/3=0.666。hdfs默認的副本率0.999。我們的副本率0.666明顯小于0.999, 因此系統會自動的復制副本到其他dataNode,使得副本率不小于0.999。如果系統中有5個副本,超過我 們設定的3個副本,那么系統也會刪除多于的2個副本。 在安全模式狀態下,文件系統只接受讀數據請求,而不接受刪除、修改等變更請求。在當整個系統達到安 全標準時,HDFS自動離開安全模式。?
三、HDFS進階理論
3.1 Hadoop寫數據流程
Metadata 元數據,最小的數據單位,這里主要是數據名稱,類型,大小,數據副本,數據地址,擁有者信息等。
?3.2?Hadoop讀數據流程
3.3 NameNode工作機制
1、第一階段:NameNode 啟動 1)第一次啟動 NameNode 格式化后,創建 Fsimage 和 Edits 文件。如果不是第一次啟動,直接加載輯日志和鏡像文件到內存。 2)客戶端對元數據進行增刪改的請求。 3)NameNode 記錄操作日志,更新滾動日志。 4)NameNode 在內存中對元數據進行增刪改。 2)第二階段:Secondary NameNode 工作 1)Secondary NameNode 詢問 NameNode 是否需要 CheckPoint。直接帶回 NameNode是否檢查結果。 2)Secondary NameNode 請求執行 CheckPoint。 3)NameNode 滾動正在寫的 Edits 日志。 4)將滾動前的編輯日志和鏡像文件拷貝到 Secondary NameNode。 5)Secondary NameNode 加載編輯日志和鏡像文件到內存,并合并。 6)生成新的鏡像文件 fsimage.chkpoint。 7)拷貝 fsimage.chkpoint 到 NameNode。 8)NameNode 將 fsimage.chkpoint 重新命名成 fsimage。?
3.4 Fsimage和Edits概念
NameNode被格式化之后,將在$HADOOP_HOME/data/tmp/dfs/name/current目錄中產生如下文件 1)Fsimage文件:HDFS文件系統元數據的一個永久性的檢查點,其中包含HDFS文件系統的所有目錄和文 件inode的序列化信息。 fsimage_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION 2)Edits文件:存放HDFS文件系統的所有更新操作的路徑,文件系統客戶端執行的所有寫操作首先會被記 錄到Edits文件中。 3)seen_txid文件保存的是一個數字,就是最后一個edits_的數字 4)每次NameNode啟動的時候都會將Fsimage文件讀入內存,加載Edits里面的更新操作,保證內存中的元 數據信息是最新的、同步的,可以看成NameNode啟動的時候就將Fsimage和Edits文件進行了合并。3.5 DataNode工作機制
1)一個數據塊在 DataNode 上以文件形式存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包 括數據塊的長度,塊數據的校驗和,以及時間戳。 2)DataNode 啟動后向 NameNode 注冊,通過后,周期性(6 小時)的向 NameNode 上報所有的塊信息。 3)心跳是每 3 秒一次,心跳返回結果帶有 NameNode 給該 DataNode 的命令如復制塊數據到另一臺 機器,或刪除某個數據塊。如果超過 10 分鐘沒有收到某個 DataNode 的心跳, 則認為該節點不可用。 4)集群運行中可以安全加入和退出一些機器。 3.6 數據完整性 DataNode 節點保證數據完整性的方法: 1)當 DataNode 讀取 Block 的時候,它會計算 CheckSum。 2)如果計算后的 CheckSum,與 Block 創建時值不一樣,說明 Block 已經損壞。 3)Client 讀取其他 DataNode 上的 Block。 4)常見的校驗算法 crc(32),md5(128),sha1(160) 5)DataNode 在其文件創建后周期驗證 CheckSum。 3.7?DataNode掉線時參數設置 1)DataNode進程死亡或者網絡故障造成DataNode無法與NameNode通信 2)NameNode不會立即把該節點判定為死亡,要經過一段時間,這段時間暫稱作超 時時長。 3)HDFS默認的超時時長為10分鐘+30秒。 4)如果定義超時時間為TimeOut,則超時時長的計算公式為: TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval。 5)而默認的dfs.namenode.heartbeat.recheck-interval 大小為5分鐘, dfs.heartbeat.interval默認為3秒?
總結
以上是生活随笔為你收集整理的【Hadoop】Hadoop组件 -之 HDFS组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RS232和RS485标准在DB9公/母
- 下一篇: 什么是透明、匿名、高匿代理?详解!