大資料分享修行寶典 HDFS讀寫兩步教程

2021-09-24 09:45:55 字數 1535 閱讀 3216

程式設計師大資料分享修行寶典-hdfs讀寫兩步教程

一、hdfs讀寫之前提

namenode(元資料節點):存放元資料(命名空間、副本數、許可權、塊列表、集群配置資訊),不包含資料節點。元資料節點將檔案系統元資料儲存在記憶體中。

1.datanode(資料節點):真正儲存資料的地方,以資料塊為單位。預設資料塊大小為128m。資料節點週期性的將所有儲存塊資訊傳送給元資料節點。客戶端通過和namenode節點溝通後,再向資料節點對資料讀出或寫入。

2.secondarynamenode(從元資料節點):並不是元資料節點的備用節點,而是配合元資料節點工作,與元資料節點有不同的工作。secondarynamenode周期性地將元資料節點的命名空間映象檔案和修改日誌合併,幫助元資料節點將記憶體中元資料資訊儲存到磁碟上。

3.client(客戶端):客戶端就是需要獲取hdfs系統中檔案的應用程式和介面,引發hdfs的讀/寫等操作。

值得注意的是:

1.namenode實際客戶端只上傳乙個datanode,其餘兩個是namenode完成的。讓datenote自己複製的。然後複製完成以後逐級返回結果給namenode。如果2,3datanode複製失敗,再有namenode分配新的datanode位址。對於客戶端來說預設上傳乙個datanode就可以了,其餘的由datanode自己複製。

2.datanode切片是由客戶端完成的。datanode第二三個副本的上傳和第乙個上傳是非同步的。

二、hdfs中的寫流程:

1.根namenode通訊請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。

2.namenode返回是否可以上傳。

3.client請求第乙個 block該傳輸到哪些datanode伺服器上。

4.namenode返回3個datanode伺服器abc。

5.client請求3臺dn中的一台a上傳資料(本質上是乙個rpc呼叫,建立pipeline),a收到請求會繼續呼叫b,然後b呼叫c,將真個pipeline建立完成,逐級返回客戶端。

6.client開始往a上傳第乙個block(先從磁碟讀取資料放到乙個本地記憶體快取),以packet為單位,a收到乙個packet就會傳給b,b傳給c;a每傳乙個packet會放入乙個應答佇列等待應答。

7.當乙個block傳輸完成之後,client再次請求namenode上傳第二個block的伺服器。

三、hdfs中的讀流程:

1.跟namenode通訊查詢元資料,找到檔案塊所在的datanode伺服器。

2.挑選一台datanode(就近原則,然後隨機)伺服器,請求建立socket流。

3.datanode開始傳送資料。(從磁碟裡面讀取資料放入流,以packet為單位來做校驗)

4.客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。

推薦閱讀文章

大資料技術盤點

程式設計師大資料培訓分享shell中陣列講解

大資料教程:sparkshell和idea中編寫spark程式

hdfs讀寫流程 大資料實戰之HDFS讀寫流程

hdfs是乙個分布式檔案系統,其中最需要關注的就是讀寫流程了,寫流程比讀流程更快,下面分別講解寫和讀的細節。一.hdfs寫流程 1 首先,客戶端利用hdfs client建立了distributed filesystem例項,再通過 distributed filesystem向namenode發起...

HDFS讀寫資料

一 檔案的開啟 1.1 客戶端 hdfs開啟乙個檔案,需要在客戶端呼叫distributedfilesystem.open path f,int buffersize 其實現為 public fsdatainputstream open path f,int buffersize throws io...

知識積累 大資料旅程 HDFS之讀寫

接入層 匯集層 核心層 接入層 多個接入層接入乙個匯聚層 匯聚層 很多個 client開始請求傳檔案,namenode建立乙個目錄 檢查檔案是否存在 並根據副本建立策略,返回乙個排好序的位置資訊 沒有寫入 開始根據位置資訊開始上傳,當第乙個包 1.x版本是64m 上時,將64m切分成多個小檔案,採用...