1.1 剖析檔案寫入
1)客戶端向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。
2)namenode返回是否可以上傳。
3)客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。
4)namenode返回3個datanode節點,分別為dn1、dn2、dn3。
5)客戶端請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成
6)dn1、dn2、dn3逐級應答客戶端
7)客戶端開始往dn1上傳第乙個block(先從磁碟讀取資料放到乙個本地記憶體快取),以packet為單位,dn1收到乙個packet就會傳給dn2,dn2傳給dn3;dn1每傳乙個packet會放入乙個應答佇列等待應答
8)當乙個block傳輸完成之後,客戶端再次請求namenode上傳第二個block的伺服器。(重複執行3-7步)
1.2 網路拓撲概念
在本地網路中,兩個節點被稱為「彼此近鄰」是什麼意思?在海量資料處理中,其主要限制因素是節點之間資料的傳輸速率——頻寬很稀缺。這裡的想法是將兩個節點間的頻寬作為距離的衡量標準。
節點距離:兩個節點到達最近的共同祖先的距離總和。
例如,假設有資料中心d1機架r1中的節點n1。該節點可以表示為/d1/r1/n1。利用這種標記,這裡給出四種距離描述。
distance(/d1/r1/n1, /d1/r1/n1)=0(同一節點上的程序)
distance(/d1/r1/n1, /d1/r1/n2)=2(同一機架上的不同節點)
distance(/d1/r1/n1, /d1/r3/n2)=4(同一資料中心不同機架上的節點)
distance(/d1/r1/n1, /d2/r4/n2)=6(不同資料中心的節點)
1.3 機架感知(副本節點擊擇)
1.3.1 官方位址
1.3.2 低版本hadoop複本節點擊擇
1.3.3 hadoop2.7.2副本節點擊擇
1.3.4 自定義機架感知
// 傳遞的是客戶端的ip列表,返回機架感知的路徑列表
public listresolve(listnames) else if (name.startswith("192"))
// 定義機架
if (ip < 104) else
}}
// 把ip位址列印出來
try
fos.close();
} catch (exception e)
return lists;
} } }}
(2)配置core-site.xml
(3)分發core-site.xml
xsync /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
(4)編譯程式,打成jar,分發到所有節點的hadoop的classpath下
cd /opt/module/hadoop-2.7.2/share/hadoop/common/lib
(5)重新啟動集群
(6)在名稱節點hadoop103主機上檢視名稱
(7)檢視結果
2)挑選一台datanode(就近原則,然後隨機)伺服器,請求讀取資料。
3)datanode開始傳輸資料給客戶端(從磁碟裡面讀取資料放入流,以packet為單位來做校驗)。
4)客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。
3.1 debug除錯如下**
@test
public void writefile() throws exception
3.2 總結 Hadoop系列008 HDFS的資料流
1.1 剖析檔案寫入 1 客戶端向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。2 namenode返回是否可以上傳。3 客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。4 namenode返回3個datanode節點,分別為dn1 dn2 ...
Hadoop系列一HDFS簡介
namenode nn namenode的metadata資訊在啟動後會載入到記憶體中,metadata資訊儲存在磁碟檔案fsimage,edits檔案記錄對metadata的操作日誌,block位置資訊只存在記憶體,不儲存到fsimage。secondarynamenode snn 不是nn的備份...
hadoop系列三 HDFS操作
0 檢視hdfs中的目錄資訊 hadoop fs ls hdfs路徑 1 上傳檔案到hdfs中 hadoop fs put 本地檔案 aaa hadoop fs copyfromlocal 本地檔案 hdfs路徑 copyfromlocal等價於 put hadoop fs movefromloca...