HDFS的上傳流程以及windows-idea操作文件上傳的注意


HDFS的上傳流程

命令:hdfs dfs -put  xxx.wmv   /hdfs的文件夾

image


cd進入到要上傳文件的當前目錄,再輸入hdfs命令上傳,注意-put后tab可以自動補全, 最后加上你要上傳到hdfs的NN文件路徑,/表示根目錄。


image

步驟1:

client接受到Linux操作命令,要求上傳文件到hdfs的存儲空間中,將關於文件的元數據信息發送到NameNode.

步驟2:

NN對上傳文件進行校驗,文件夾是否存在等;計算出需要分為幾個block塊存儲,分別幾個副本因子,存儲到哪幾個服務器.

計算出要上傳的文件需要幾個block,以及對應幾個副本
block0 128M [dn11,dn12,dn13]
block1 128M [dn11,dn12,dn13]
block2 44M [dn11,dn12,dn13]

步驟3:

將計算結果返回給客戶端(操作發送文件的Linux系統),需要分塊的切block塊,不需要的直接發送數據給DataNode(DN可能有多個,按照實現規定好的放在哪個datanode下,從頭到尾依次拷貝,拷貝好的數據塊會應答發送的數據塊)
image

副本存放機制—機架感知(rack-aware):
考慮要素:

  1. HDFS集群的DN有很多台節點。
  2. 節點內部的網絡數據傳輸, 速度最快.
  3. 機架內可以安裝多台服務器, 節點之間網絡帶寬, 由於機架之間的網絡帶寬.

機架感知-副本存放策略(hadoop2.7.6以前)--舊版本

  1. 第一個block副本放在客戶端所在的服務器的datanode中。
  2. 第二個block副本放置在本機架內的其它數據節點datanode上
  3. 第三個block副本放置在不同機架的隨機某個節點上。(防止某個機架數據丟失)

image

副本存放策略(hadoop2.8.4以后)--新版本

  1. 第一個block副本,放在client所在的節點
  2. 第二個block副本,放在另一個機架上的某個節點上。
  3. 第三個block副本,放在第二個機架的不同節點上。

image

步驟4/存儲后期:

最后DN正常對NN發送六個小時一次的塊匯報以及三秒一次的心跳(NN對DN的管理)
塊匯報(block report):dn保存block塊,同時保存block的數字指紋,定期計算數字指紋與保存的數字指紋是否一致,內容不一致就不一樣,來判斷是否被篡改損壞.如果損壞,不再發送塊報告(六小時一次),NN發掘沒有匯報后,刪除損壞的block,從已有副本因子進行數據同步給該損壞區域.
心跳:接收dn的磁盤信息,硬盤健康狀況.較為頻繁,默認三秒.


image

windows-idea操作注意:

@Test
public void test1() throws IOException {
// 1. 初始化配置
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop10:9000");
// 2. 獲得操作hdfs的客戶端。
FileSystem fs = FileSystem.get(conf);
// 使用客戶端的方法(命令),操作hdfs
fs.copyFromLocalFile(new Path("D:/xxx.txt"), new Path("/data"));
// 3. 關閉資源。
if (fs != null) {
fs.close();
}
}

windows需要配置hadoop環境變量|改hosts ip映射文件 | 引入hadoop依賴 |

以及需要注意的這一個異常: Permission denied: user=Administrator,access=WRITE,inode="/hdfs":root:supergroup:drwxr-xr-x
解決辦法: 為上傳的hfds目錄添加寫w權限 hdfs dfs -chmod 777 /hdfs目錄


補充:

image

個人隨筆,轉載注明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM