2021年大数据Hadoop(十):HDFS的数据读写流程
2021大數據領域優質創作博客,帶你從入門到精通,該博客每天更新,逐漸完善大數據各個知識體系的文章,幫助大家更高效學習。
有對大數據感興趣的可以關注微信公眾號:三幫大數據
目錄
HDFS的數據讀寫流程
HDFS寫數據流程
HDFS讀數據流程
HDFS的數據讀寫流程
HDFS寫數據流程
詳細步驟解析:
1、client發起文件上傳請求,通過RPC與NameNode建立通訊,NameNode檢查目標文件是否已存在,父目錄是否存在,返回是否可以上傳;
2、client請求第一個 block該傳輸到哪些DataNode服務器上;
3、NameNode根據配置文件中指定的備份數量及副本放置策略進行文件分配,返回可用的DataNode的地址,如:A,B,C;
4、client請求3臺DataNode中的一臺A上傳數據(本質上是一個RPC調用,建立pipeline),A收到請求會繼續調用B,然后B調用C,將整個pipeline建立完成,后逐級返回client;
5、client開始往A上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位(默認64K),A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答。
6、數據被分割成一個個packet數據包在pipeline上依次傳輸,在pipeline反方向上,逐個發送ack(命令正確應答),最終由pipeline中第一個DataNode節點A將pipeline ack發送給client;
7、當一個block傳輸完成之后,client再次請求NameNode上傳第二個block到服務器。
詳細步驟圖:
HDFS讀數據流程
詳細步驟解析:
1、Client向NameNode發起RPC請求,來確定請求文件block所在的位置;
2、NameNode會視情況返回文件的部分或者全部block列表,對于每個block,NameNode都會返回含有該block副本的DataNode地址;
3、這些返回的DN地址,會按照集群拓撲結構得出DataNode與客戶端的距離,然后進行排序,排序兩個規則:網絡拓撲結構中距離Client近的排靠前;心跳機制中超時匯報的DN狀態為STALE,這樣的排靠后;
4、Client選取排序靠前的DataNode來讀取block,如果客戶端本身就是DataNode,那么將從本地直接獲取數據;底層上本質是建立Socket Stream(FSDataInputStream),重復的調用父類DataInputStream的read方法,直到這個塊上的數據讀取完畢;
5、當讀完列表的block后,若文件讀取還沒有結束,客戶端會繼續向NameNode獲取下一批的block列表;
6、讀取完一個block都會進行checksum驗證,如果讀取DataNode時出現錯誤,客戶端會通知NameNode,然后再從下一個擁有該block副本的DataNode繼續讀。
7、read方法是并行的讀取block信息,不是一塊一塊的讀取;NameNode只是返回Client請求包含塊的DataNode地址,并不是返回請求塊的數據;
最終讀取來所有的block會合并成一個完整的最終文件。
詳細步驟圖:
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
總結
以上是生活随笔為你收集整理的2021年大数据Hadoop(十):HDFS的数据读写流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Hadoop(九):HD
- 下一篇: 2021年大数据Hadoop(十一):H