目錄剖析檔案寫入
一致模型
客戶端通過呼叫filesystem
物件的open()
方法來開啟希望讀取的檔案,對於hdfs來說, 這個物件是分布式檔案系統的乙個例項
distributedfiltsystem
通過使用rpc來呼叫namenode
,以確定檔案起始塊的位置.
接著, 客戶端對這個輸入流呼叫read()方法
儲存著檔案起始幾個塊的datanode
位址的dfsinputstream
隨即連線距離最近的datanode
, 通過對資料流反覆呼叫read()
方法, 可以將資料從datanode
傳輸到客戶端
到達塊的末端時,dfsinputstream
關閉與該datanode
的連線, 然後尋找下乙個塊的最佳datanode
客戶端只需要讀取連續的流,並且對於客戶端都是透明的
客戶端從流中讀取資料時,塊是按照開啟dfsinputstream
與datanode
新建連線的順序讀取的.一旦客戶端完成讀取,就對fsdatainputstream
呼叫cloase()
方法
客戶端通過對distributedfilesystem
物件呼叫create()
函式來新建檔案
distributedfilesystem
對namenode
建立乙個rpc呼叫, 在檔案系統的命名空間中新建乙個檔案, 此時該檔案中還沒有相應的資料塊
namenode
檢查檔案是否存在及客戶端是否有該檔案的許可權
distributedfilesystem
向客戶端返回乙個fsdataoutputstream
物件,由此客戶端可以開始寫入資料
fsdataoutputstream封裝乙個dfsoutputstream物件, 該物件負責處理datanode
和namenode
之間的通訊
在客戶端寫入資料時,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自動分配的時間戳。表的單元格內容是乙個未解釋的位元組陣列 錶行的鍵也是位元組陣列。行鍵是表的主鍵,被用來對錶行進行排序。錶行的列分組,形成列族 ...