一步一步學習hadoop(五)

2022-09-02 15:48:15 字數 1950 閱讀 6636

hadoop分布式檔案系統(hdfs)

首先介紹一下hdfs的特點:

1.擅長處理大檔案,超大檔案。幾十g甚至pb級別的檔案

2.擅長流式資料訪問,一次寫入多次讀取是最高效的訪問模式

3.可以執行在普通的機器上,一般只要求記憶體是ecc記憶體,可以對資料進行糾錯。

4.擅長執行非實時的分析或者是近實時的資料處理,不擅長要求幾十毫秒延遲的資料處理(因為作業下的任務的初始化要消耗時間)

5.不擅長處理包含大量小檔案的資料處理,小檔案很快就會耗光namenode的記憶體

6.不擅長處理多使用者寫入,任意修改檔案,但這個在以後的版本可能會逐步解決。

hdfs的一些基本概念

1.資料塊,其實這不是什麼新鮮的東西,計算機系統中的快取都是使用塊來讀寫資料,並且按照儲存器分層模型,越靠底層的塊越大,主要是為了降低定址或者尋道(對磁碟來說)的時間占用的比例。在hdfs中將這個繼續發揮,設定這個大小為預設64m,這樣就有效降低了尋道時間占用的比例,一般不會超過1%。

同時使用塊對檔案進行抽象,使檔案可以大於任何一台機器的磁碟容量,同時簡化了儲存系統的設計,同時很容易對資料進行容錯處理,只需將塊進行冗餘備份就可以實現資料的容錯。

2.namenode和datanode

hdfs有乙個namenode和多個datanode(這在最新版本中已經開始變化了,最新版允許有多個獨立的namenode),namenode管理檔案系統的命名空間,這些資訊以兩個本地檔案形式儲存在磁碟上,命名空間映象檔案和編輯日誌檔案。namenode也記錄每個檔案中各個塊所在的資料節點資訊,但這些並不儲存在檔案中。

namenode非常重要,一旦namenode資料丟失則所有資料都丟失了,為了資料的安全性,採用兩種方案

1'備份namenode的檔案到nfs中

2'啟動備份namenode即(secondarynamenode),備份namenode是對namenode的乙個延遲備份(一般延遲30分鐘),也就是說如果namenode失敗,可能會丟失半小時的資料。

hdfs檔案讀取工作原理

1.客戶端通過filesystem物件的open方法開啟希望讀取的檔案

2.dfs通過rpc來呼叫namenode,確定檔案起始塊的位置,對於每乙個資料塊namenode返回該塊副本的datanode位置,並根據與客戶端的距離進行排序。dfs返回乙個fsdatainputstream物件給客戶端,作為乙個讀取檔案的**

3.客戶端對fsdatainputstream呼叫read方法,內部查詢距離最近的datanode,讀取資料,讀完乙個資料塊資料,關閉與儲存該資料塊的datanode的連線,然後尋找下一塊資料繼續讀取。

4.客戶端完成讀取後,呼叫fsdatainputstream的close方法關閉連線

如果讀取中遇到讀取失敗,則會嘗試讀取另乙個最鄰近的datanode中的資料塊,同時記錄下這個故障,報告給namenode。

這種設計的優點是namenode只是告訴客戶端每個塊的最佳datanode,客戶端自己去和datanode聯絡,並讀取資料,這就使namenode不會成為乙個效能瓶頸。

hdfs檔案寫入工作原理

1.客戶端通過dfs呼叫create函式來建立檔案

2.dfs對namenode建立乙個rpc呼叫,在檔案系統的命名空間建立乙個新檔案,此時檔案只有名字還沒有內容,返回乙個fsdataoutputstream物件給客戶端

3.客戶端通過fsdataoutputstream在內部將寫入資料分成乙個乙個的資料報,並儲存在內部佇列中,根據datanode列表要求namenode分配合適的新塊來儲存資料,然後資料報流式的傳入管線中,當所有datanode都確認儲存成功後,將該資料報在列表中刪除

如果在寫入中datanode出現故障,首先會將管線關閉,把佇列中的資料都新增到佇列的前端,為已經儲存的資料指定乙個新標識,並報告namenode,以便namenode在空閒時間刪除這個資料。

一步一步學習hadoop(四)

hadoop作業執行的概念介紹 hadoop框架將作業分成若干小任務 task 包括map任務和reduce任務,其中reduce任務由作業提交者明確指定,框架預設為只有乙個reduce任務 hadoop框架通過兩類節點控制作業的執行過程,這兩類節點是jobtracker和tasktracker節點...

一步一步學習IdentityServer3 8

identityserver3結合hangfire及cookies中介軟體實現授權 idr3資料庫token過期管理 globalconfiguration.configuration.usesqlserverstorage hangfire globalconfiguration.configur...

一步一步學習IdentityServer3 4

其實上述例子 很多都很找到 但是在實際生態環境中給例子有很多不一樣的地方 比如自定已登入介面怎麼做?怎麼訪問自己的使用者資料庫實現登入?怎麼在介面中使用,在介面中又怎麼實現與idr3結合授權?等等問題 解下來我會在實際專案中整體一步一步介紹 1 這是我自定義登入的介面 2 在授權同意頁面 3 下圖是...