文章插圖

文章插圖
HDFS是一個文件系統 , 用于存儲文件 , 通過統一的命名空間–目錄樹來定位文件;其次 , 它是分布式的 , 由很多服務器聯合起來實現其功能 , 集群中的服務器有各自的角色 。
HDFS設計思想:分而治之:將大文件、大批量文件 , 分布式存放在大量服務器上 , 以便于采取分而治之的方式對海量數據進行運算分析 。?
在大數據系統中作用:為各類分布式運算框架(如:mapreduce,spark,tez,….)提供數據存儲服務? 。
重點概念:文件切塊 , 副本存放 , 元數據 。
HDFS中的文件在物理上是分塊存儲(block) , 塊的大小可以通過配置參數(dfs.blocksize)來規定 , 默認大小在hadoop2.x版本中是128M , 老版本中是64M;HDFS文件系統會給客戶端提供一個統一的抽象目錄樹 , 客戶端通過路徑來訪問文件 , 形如:hdfs://namenode:port/dir-a/dir-b/file.data;目錄結構及文件分塊信息(元數據)的管理由namenode節點承擔——-namenode是HDFS集群主節點 , 負責維護整個hdfs文件系統的目錄樹 , 以及每一個路徑(文件)所對應的block塊信息(block的id 。及所在的datanode服務器);文件的各個block的存儲管理由datanode節點承擔———–namenode是HDFS集群從節點 , 每一個block都可以在多個dataname上存儲多個副本(副本數量也可以通過參數設置dfs.replication);
HDFS是設計成適應一次寫入 , 多次讀出的場景 , 且不支持文件的修改(注:適合用來做數據分析 , 并不適合用來做網盤應用 , 因為 , 不便修改 , 延遲大 , 網絡開銷大 , 成本太高) 。
HDFS原理篇
工作機制:
工作機制的學習主要是為加深對分布式系統的理解 , 以及增強遇到各種問題時的分析解決能力 , 形成一定的集群運維能力 。注:很多不是真正理解hadoop技術體系的人會常常覺得HDFS可用于網盤類應用 , 但實際并非如此 。要想將技術準確用在恰當的地方 , 必須對技術有深刻的理解 。
1 概述
HDFS集群分為兩大角色:NameNode、DataNodeNameNode負責管理整個文件系統的元數據DataNode負責管理用戶的文件數據塊文件會按照固定的大小(blocksize)切成若干塊后分布式存儲在若干臺datanode上每一個文件塊可以有多個副本 , 并存放在不同的datanode上DataNode會==定期==向NameNode匯報自身所保存的文件block信息 , 而namenode則會負責保持文件的副本數量HDFS的內部工作機制對客戶端保持透明 , 客戶端請求訪問HDFS都是通過向namenode申請來進行
2 HDFS寫數據流程
客戶端要向HDFS寫數據 , 首先要跟namenode通信以確認可以寫文件并獲得接收文件block的datanode , 然后客戶端按順序將文件逐個block傳遞給相應datanode , 并由接收到block的datanode負責向其他datanode復制block的副本 。
這里說明文件的切割是在客戶端實現的 , 而不是NameNode 。文件的傳輸也是由客戶端傳到指定datanode上 , 副本由datanode傳給其他datanode 。?
詳細步驟(重要):
跟namenode通信請求上傳文件 , ==namenode檢查目前文件是否已存在 , 父目錄是否存在==namenode返回是否可以上傳client請求第一個block該傳輸到哪些datanode服務器上(副本)namenode返回3個datanode服務器ABC(假如副 本數為3 。優先找同機架的 , 其次不同機架 , 再其次是同機架的再一臺機器 。還會根據服務器的容量 , )client請求3臺datanode中的一臺A上傳數據==(本質上是一個RPC調用 , 建立pipeline)== , A收到請求會繼續調用B , 然后B調用C , 將整個pipeline建立完成 , 逐級返回客戶端client開始往A上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存) , 以packet為單位 , A收到一個packet就會傳給B , B傳給C;A每傳一個packet會放入一個應答隊列等待應答 。當一個block傳輸完成之后 , client再次請求namenode上傳第二個block的服務器 。
3. HDFS讀數據流程
概述:
客戶端將要讀取的文件路徑發給namenode , namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端 , 客戶端根據返回的信息找到相應datanode逐個獲取文件的block并在客戶端進行數據追加合并從而獲得整個文件 。
詳細步驟解析:
跟namenode通信查詢元數據 , 找到文件塊所在的datanoede服務器挑選一臺datanode(就近原則 , 然后隨機)服務器 , 請求建立socket流datanode開始發送數據(從磁盤里面讀取數據放入流 , 以packet為單位來做校驗)客戶端以packet為單位接收 , 先在本地緩存 , 然后寫入目標文件 。?
NAMENODE工作機制
學習目標:理解namenode的工作機制尤其是元數據管理機制 , 以增強對HDFS工作原理的理解 , 及培養hadoop集群運營中”性能調優”、”namenode”故障問題的分析解決能力
職責:
NAMENODE職責:負責客戶端請求的響應元數據的管理(查詢、修改)元數據管理:namenode對數據的管理采用了三種存儲形式:內存元數據(NameSystem)磁盤元數據鏡像文件(fsimage)數據操作日志文件(edits.xml)可通過日志運算出元數據元數據存儲機制(重要):A、內存中有一份完整的元數據(內存meta data)
B、磁盤有一個”準完整”的元數據鏡像(fsimage)文件(在namenode的工作目錄中)
?C、用于銜接內存metadata和持久化元數據鏡像fsimage之間的操作日志(edits文件)
注:當客戶端對hdfs中的文件進行新增或者修改操作 , 操作記錄首先被記入edits日志文件中 , 當客戶端操作完成后 , 相應的元數據會更新到內存meta.data中 。
元數據手動查看
可通過hdfs的一個工具來查看edits中的信息hdfs oev -i edits -o edits.xmlhdfs oiv -i fsimage_0000000087 -p XML -o fsimage.xml
【hadoop 文件上傳 將文件上傳到hadoop集群上去的命令為】inputfile: 要查看的fsimage文件
outputfile:用于保存格式化之后的文件 process: 使用什么進程解碼 , XML|Web|…?Datanode工作職責:
存儲管理用戶的文件塊數據定期向namenode匯報自身所持有的block信息(通過心跳信息上報)(這點很重要 , 因為當集群發生某些block副本失效時 , 集群如何恢復block初始副本數量的
- pdf文件不能打印的原因及解決方法? 打印機pdf能打印文檔不能打印
- 手機相冊文件管理夾在那 手機相冊在哪個文件夾?
- itunes備份文件夾在哪里 itunes文件備份在哪里
- 淘寶采集上傳軟件 采源寶一鍵上傳淘寶
- 文件服務器管理 文件管理服務器搭建
- idx后綴文件 idx文件怎么生成
- python文件寫入換行符 python寫文件追加 按行追加
- 解壓文件的軟件下載 解壓文件要下載什么軟件
- 手機上exe文件用什么打開 用手機怎么打開exe文件
- ipa文件安裝方法 ipa文件下載怎么安裝
