HDFS讀寫理解

2021-09-25 12:22:31 字數 1552 閱讀 5993

block

一般設為128m,hdfs是按塊儲存的

packet

packet是第二大的單位,它是client端向datanode,或者 datanode之間傳輸資料的基本單位,預設是 64k

chunk

chunk是最小的單位,它是client向datanode,或datanode的pipline之間進行資料校驗的基本單位,預設512byte,因為用作校驗,故每個chunk需要帶有4byte的校驗位。所以實際每個chunk寫入packet的大小為516byte。由此可見真實資料與校驗值資料的比值約為128 : 1。(即64*1024 / 512)

1 client向分布式檔案系統傳送寫請求

2  請求發到了nn那裡了,nn做檢查,比如許可權,路徑,是否存在此檔案等等。如果ok,就寫 editlog, 然後才寫入記憶體。寫完了之後,會返回乙個輸出流物件,並且返回乙個datanode的列表。

3 client把檔案按128m切分,然後用得到的輸出流物件寫資料,

4 client把資料分給第乙個datanode,資料塊是由packet組成的,完成乙個packet傳輸之後,根據datanode列表,會依次往下傳送packet包。

5 塊寫完之後,datanode往前匯報。

6 client關閉輸出流

7 client告訴nn完成了上傳任務。如果是強一致性,則是所有節點都有資料了,才通知。如果是最終一致性,則只要有乙個datanode完成了就通知。

1 client發起乙個讀的請求

2 向nn獲取資料的存放位置

3 client找到最近的主機,並且建立輸入流

4 datanode向輸入流來寫入塊的資料,如果有多個塊,就讀多個塊,然後組合在一起

5 關閉流

塊由packet組成,packet由chunk組成,而chunk上由校驗位。所以,塊就能夠做相應的校驗了。

在寫入的時候,client會把這個校驗的乙個值寫在某檔案中,當取出來時,再計算一下,如果和儲存的不一致,就認為資料不對。檔案儲存在 .meta中

$/ ├── current 

│ ├── bp-526805057-127.0.0.1-1411980876842 

│ │ └── current 

│ │ ├── version 

│ │ ├── finalized 

│ │ │ ├── blk_1073741825 

│ │ │ ├── blk_1073741825_1001.meta 

│ │ │ ├── blk_1073741826 

│ │ │ └── blk_1073741826_1002.meta 

│ │ └── rbw 

│ └── version 

└── in_use.lock

--------------------- 

參考了  

hdfs讀寫流程 HDFS 讀寫流程(詳解)

hdfs hadoop distributed file system 是gfs的開源實現。1 優點 因為有多個副本,可以保證資料可靠,容錯性高 計算向資料移動,適用於批處理 適合大資料處理,gb tb pb級資料,百萬以上的檔案,十萬以上的節點 可以構建在廉價機器上,通過多副本提高可靠性 2 缺點...

hdfs讀寫流程 HDFS 檔案讀寫流程

開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...

hdfs讀寫流程

1.client發起檔案上傳請求 通過rpc和namenode建立連線,namenode檢查目標檔案是否存在,檢查父目錄是否存在,檢查使用者是否有許可權,返回是否可以上傳 2.client請求第乙個block該傳輸到那些datanode伺服器上 3.namenode根據配置檔案中指定的備份數量及機架...