鍍金池/ 教程/ 大數(shù)據(jù)/ HDFS - 寫文件
YARN - Failover
MapReduce - Shuffle
Hadoop配置
MapReduce - 讀取數(shù)據(jù)
Hadoop - MapReduce
YARN - Container
Hadoop 測(cè)試
MapReduce - Mapper
Hadoop - 參考
YARN - ResourceManager
HDFS - 可靠性
HDFS - 讀文件
Hadoop - 簡(jiǎn)介
YARN - ApplicationMaster
Hadoop - IO
Hadoop 監(jiān)控
MapReduce - 編程
Hadoop - YARN
Hadoop - HDFS
HDFS - 命令工具
HDFS - 寫文件
YARN - NodeManager
Hadoop安裝

HDFS - 寫文件

http://wiki.jikexueyuan.com/project/hadoop/images/hdfs-write.png" alt="" />

1.客戶端將文件寫入本地磁盤的N#x4E34;時(shí)文件中

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

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

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

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

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

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

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

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

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

上一篇:YARN - Failover