1. 程式人生 > >【若澤大資料實戰第十二天】HDFS課程 讀流程-寫流程

【若澤大資料實戰第十二天】HDFS課程 讀流程-寫流程

前言:

     上期課程J哥給我們講了很多有關於HDFS內部的namenode,datanode,secondary的各種分析,下面的課程涉及到了讀流程和寫流程。我也將詳細的梳理清楚。

HDFS寫流程

1.檔案寫流程 --> FSDataOutputStream (面試題)

1.1 Client呼叫FileSystem.create(filePath)方法,去NameNode進行rpc通訊,check該路徑的檔案是否存在以及有沒有許可權建立該檔案。假如ok,就建立一個新檔案,但是並不關聯任何block,返回一個FSDataOutputStream物件;(假如not ok,就返回錯誤資訊,所以寫程式碼要try-catch)


1.2 Client呼叫FSDataOutputStream物件的write()方法,會將第一個塊寫入第一個DataNode,第一個DataNode寫完傳給第二個節點,第二個寫完傳給第三節點,當第三個節點寫完返回一個ack packet給第二個節點,第二個返回一個ack packet給第一個節點,第一個節點返回ack packet給FSDataOutputStream物件,意思標識第一個塊寫完,副本數為3;然後剩餘的塊依次這樣寫。(當然寫操作對於Client端也是透明的)

1.3 當向檔案寫入資料完成後,Client呼叫FSDataOutputStream.close()方法,關閉輸出流,flush快取區的資料包;

1.4 再呼叫FileSystem.complete()方法,告訴NameNode節點寫入成功。

hadoop]$ bin/hdfs -dfs -put rzdata.log /xxx001/
put: `/xxx01/': No such file or directory: `hdfs://192.168.137.201:9000/xxx01'
找不到此檔案


要求:
    1、流程要清楚
    2、檔案寫流程 --> FSDataOutputStream
    3、校驗檔案是否存在和許可權問題
    4、最後一步DFS.complete()方法,告訴NN節點寫入成功
https://wenku.baidu.com/view/fabe57b004a1b0717fd5dda5.html

HDFS讀流程

                                                                                                                 HDFS讀流程

2.檔案讀流程 --> FSDataInputStream (面試題)

hadoop]$ bin/hdfs/dfs -cat /test.log

2.1 client通過FileSystem.open(filePath)方法,去與NN進行RPC通訊,返回該檔案的部分或者全部的block塊(也包含該列表各block的分佈在DataNode地址的列表),也就是返回FSDataInputStream物件
2.2 Client呼叫FSDataInputStream物件的read()方法。
    a.去與第一個塊的最近的datanode進行read,讀取完後會check,假如successful會關閉與當前DataNode通訊;(假如check fail會記錄失敗的塊+DataNode資訊,下次就不會讀取,那麼會去該塊的第二個DataNode地址讀取)
    b.然後第二個塊的遜的DataNode上的進行讀取,check後會關閉與DataNode的通訊。
    c.假如block列表讀取完了,檔案還未結束,那麼FileSystem會從NameNode獲取下一批的block的列表。(當然讀操作對於client端是透明的,感覺就是連續的資料流)
2.3 Client呼叫FSDataInputStream.close()方法,關閉輸入流。


要求:
      1.流程要清楚

      2.檔案讀流程 --> FSDataInputStream

HDFS讀和寫,誰用fsdatastream 誰用fsoutputstream

大資料課程推薦: