Hadoop 寫文件

2022-02-28 09:24 更新

1.客戶端將文件寫入本地磁盤的 HDFS Client 文件中

2.當(dāng)臨時文件大小達(dá)到一個 block 大小時,HDFS client 通知 NameNode,申請寫入文件

3.NameNode 在 HDFS 的文件系統(tǒng)中創(chuàng)建一個文件,并把該 block id 和要寫入的 DataNode 的列表返回給客戶端

4.客戶端收到這些信息后,將臨時文件寫入 DataNodes

  • 4.1 客戶端將文件內(nèi)容寫入第一個 DataNode(一般以 4kb 為單位進(jìn)行傳輸)
  • 4.2 第一個 DataNode 接收后,將數(shù)據(jù)寫入本地磁盤,同時也傳輸給第二個 DataNode
  • 4.3 依此類推到最后一個 DataNode,數(shù)據(jù)在 DataNode 之間是通過 pipeline 的方式進(jìn)行復(fù)制的
  • 4.4 后面的 DataNode 接收完數(shù)據(jù)后,都會發(fā)送一個確認(rèn)給前一個 DataNode,最終第一個 DataNode 返回確認(rèn)給客戶端
  • 4.5 當(dāng)客戶端接收到整個 block 的確認(rèn)后,會向 NameNode 發(fā)送一個最終的確認(rèn)信息
  • 4.6 如果寫入某個 DataNode 失敗,數(shù)據(jù)會繼續(xù)寫入其他的 DataNode。然后 NameNode 會找另外一個好的 DataNode 繼續(xù)復(fù)制,以保證冗余性
  • 4.7 每個 block 都會有一個校驗(yàn)碼,并存放到獨(dú)立的文件中,以便讀的時候來驗(yàn)證其完整性

5.文件寫完后(客戶端關(guān)閉),NameNode 提交文件(這時文件才可見,如果提交前,NameNode 垮掉,那文件也就丟失了。fsync:只保證數(shù)據(jù)的信息寫到 NameNode 上,但并不保證數(shù)據(jù)已經(jīng)被寫到DataNode 中)

Rack aware(機(jī)架感知)

通過配置文件指定機(jī)架名和 DNS 的對應(yīng)關(guān)系

假設(shè)復(fù)制參數(shù)是3,在寫入文件時,會在本地的機(jī)架保存一份數(shù)據(jù),然后在另外一個機(jī)架內(nèi)保存兩份數(shù)據(jù)(同機(jī)架內(nèi)的傳輸速度快,從而提高性能)

整個 HDFS 的集群,最好是負(fù)載平衡的,這樣才能盡量利用集群的優(yōu)勢


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號