Hadoop權威指南 HDFS 資料流

2022-05-22 15:33:11 字數 1906 閱讀 6931

目錄剖析檔案寫入

一致模型

客戶端通過呼叫filesystem物件的open()方法來開啟希望讀取的檔案,對於hdfs來說, 這個物件是分布式檔案系統的乙個例項

distributedfiltsystem通過使用rpc來呼叫namenode,以確定檔案起始塊的位置.

接著, 客戶端對這個輸入流呼叫read()方法

儲存著檔案起始幾個塊的datanode位址的dfsinputstream隨即連線距離最近的datanode, 通過對資料流反覆呼叫read()方法, 可以將資料從datanode傳輸到客戶端

到達塊的末端時,dfsinputstream關閉與該datanode的連線, 然後尋找下乙個塊的最佳datanode

客戶端只需要讀取連續的流,並且對於客戶端都是透明的

客戶端從流中讀取資料時,塊是按照開啟dfsinputstreamdatanode新建連線的順序讀取的.一旦客戶端完成讀取,就對fsdatainputstream呼叫cloase()方法

客戶端通過對distributedfilesystem物件呼叫create()函式來新建檔案

distributedfilesystemnamenode建立乙個rpc呼叫, 在檔案系統的命名空間中新建乙個檔案, 此時該檔案中還沒有相應的資料塊

namenode檢查檔案是否存在及客戶端是否有該檔案的許可權

distributedfilesystem向客戶端返回乙個fsdataoutputstream物件,由此客戶端可以開始寫入資料

fsdataoutputstream封裝乙個dfsoutputstream物件, 該物件負責處理datanodenamenode之間的通訊

在客戶端寫入資料時,dfsoutputstream將它分成乙個個的資料報, 並寫入內部佇列, 稱為 "資料佇列".datastreamer處理資料佇列,它的責任是根據datanode列表來要求namenode分配適合的新塊來儲存資料副本

客戶端完成資料的寫入後, 對資料流呼叫close()方法,該操作將剩餘的所有資料報寫入datanode管線,並在聯絡到namenode且傳送檔案寫入完成訊號之前,等待確認

namenode已經知道檔案由哪些塊組成(通過datastreamer請求分配資料塊),所以它在返回成功前只需等待資料塊進行最小量複製

檔案系統的一致模型(coherency model)描述了檔案讀寫的資料可見性,hdfs為效能犧牲了一些posix要求

path p = new path("p");

fsdataoutputstream out = fs.create(p);

out.write("content".getbytes("utf-8"));

out.flush();

out.sync();

如果不呼叫sync()方法,在客戶端或系統發生故障時可能還丟失資料塊

Hadoop 權威指南

rpm包和deb包是兩種linux系統下最常見的安裝包格式,在安裝一些軟體或服務的時候免不了要和它們打交道。rpm包主要應用在redhat系列包括 fedora等發行版的linux系統上,deb包主要應用於debian系列包括現在比較流行的ubuntu等發行版上。yum可以用於運作rpm包,例如在f...

《hadoop權威指南》筆記一 走進hdfs

基於 hadoop權威指南 第四版 hadoop分布式檔案系統 hdfs 被設計成適合執行在通用硬體 commodity hardware 上的分布式檔案系統。hdfs是apache hadoop core專案的一部分。hdfs本身為高吞吐而優化 思考 為何基於hdfs實現的hbase可以滿足低延遲...

hadoop 權威指南 HBase

hbase原理 基本概念 基本架構 應用將資料儲存在帶標籤的表中,表的單元格是行和列座標的座標交集,他們有版本號。在預設情況下版本號是單元格插入時hbase自動分配的時間戳。表的單元格內容是乙個未解釋的位元組陣列 錶行的鍵也是位元組陣列。行鍵是表的主鍵,被用來對錶行進行排序。錶行的列分組,形成列族 ...