hadoop 一 深度剖析hdfs原理

2021-08-03 05:02:51 字數 3765 閱讀 5455

在配置hbase集群將 hdfs 掛接到其它映象盤時,有不少困惑的地方,結合以前的資料再次學習;  大資料底層技術的三大基石起源於google在2023年之前的三篇**gfs、map-reduce、 bigtable,其中gfs、map-reduce技術直接支援了apache hadoop專案的誕生,bigtable催生了nosql這個嶄新的資料庫領域,由於map-reduce處理框架高延時的缺陷, google在2023年後推出的dremel促使了實時計算系統的興起,以此引發大資料第二波技術浪潮,一些大資料公司紛紛推出自己的大資料查詢分析產 品,如:cloudera開源了大資料查詢分析引擎impala、hortonworks開源了 stinger、fackbook開源了presto、uc berkeley amplab實驗室開發了spark計算框架,所有這些技術的資料**均基於hdsf, 對於 hdsf 最基本的不外乎就是其讀寫操作

目錄:

hdfs名詞解釋:

乙個檔案被拆成多個block持續化儲存(block size 由配置檔案引數決定)   

思考: 修改 block size 對以前持續化的資料有何影響?

資料通訊過程中乙個 block 被拆成 多個 packet

乙個 packet 包含多個 chunk

hdsf架構:

熱備份:b是a的熱備份,如果a壞掉。那麼b馬上執行代替a的工作

冷備份:b是a的冷備份,如果a壞掉。那麼b不能馬上代替a工作。但是b上儲存a的一些資訊,減少a壞掉之後的損失

元資料與資料分離:檔案本身的屬性(即元資料)與檔案所持有的資料分離

主/從架構:乙個hdfs集群是由乙個namenode和一定數目的datanode組成

一次寫入多次讀取:hdfs中的檔案在任何時間只能有乙個writer。當檔案被建立,接著寫入資料,最後,一旦檔案被關閉,就不能再修改。

移動計算比移動資料更划算:資料運算,越靠近資料,執行運算的效能就越好,由於hdfs資料分布在不同機器上,要讓網路的消耗最低,並提高系統的吞吐量,最佳方式是將運算的執行移到離它要處理的資料更近的地方,而不是移動資料

namenode:

hdfs檔案系統中的檔案目錄樹,以及檔案的資料塊索引,即每個檔案對應的資料塊列表

資料塊和資料節點的對應關係,即某一塊資料塊儲存在哪些資料節點的資訊

-i  (必填引數)  –inputfile 輸入fsimage檔案

-o (必填引數)  –outputfile 輸出轉換後的檔案,如果存在,則會覆蓋

-p (可選引數) –processor 將fsimage檔案轉換成哪種格式: (ls|xml|filedistribution).預設為ls

示例:hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.txt

示例:  hdfs oev -i edits_0000000000000042778-0000000000000042779 -o edits.xml

支援的輸出格式有binary(hadoop使用的二進位制格式)、xml(在不使用引數p時的預設輸出格式)和stats(輸出edits檔案的統計資訊)

小結:

namenode管理著datanode,接收datanode的註冊、心跳、資料塊提交等資訊的上報,並且在心跳中傳送資料塊複製、刪除、恢復等指令;同時,namenode還為客戶端對檔案系統目錄樹的操作和對檔案資料讀寫、對hdfs系統進行管理提供支援

namenode 啟動後會進入乙個稱為安全模式的特殊狀態。處於安全模式 的 namenode 是不會進行資料塊的複製的。 namenode 從所有的 datanode 接收心跳訊號和塊狀態報告。 塊狀態報告包括了某個 datanode 所有的資料 塊列表。每個資料塊都有乙個指定的最小副本數。當 namenode 檢測確認某 個資料塊的副本數目達到這個最小值,那麼該資料塊就會被認為是副本安全 (safely replicated) 的;在一定百分比(這個引數可配置)的資料塊被 namenode 檢測確認是安全之後(加上乙個額外的 30 秒等待時間), namenode 將退出安全模式狀態。接下來它會確定還有哪些資料塊的副本沒 有達到指定數目,並將這些資料塊複製到其他 datanode 上。

secondary namenode:在ha cluster中又稱為standby node

hdfs寫檔案:

client將filea按64m分塊。分成兩塊,block1和block2;

client向namenode傳送寫資料請求,如圖藍色虛線①------>

namenode節點,記錄block資訊。並返回可用的datanode (namenode按什麼規則返回datanode? 參見第三單 hadoop機架感知),如粉色虛線②--------->

client向datanode傳送block1;傳送過程是以流式寫入,流式寫入過程如下:

將64m的block1按64k的packet劃分

然後將第乙個packet傳送給host2

host2接收完後,將第乙個packet傳送給host1,同時client想host2傳送第二個packet

host1接收完第乙個packet後,傳送給host3,同時接收host2發來的第二個packet

以此類推,如圖紅線實線所示,直到將block1傳送完畢

host2,host1,host3向namenode,host2向client傳送通知,說「訊息傳送完了」。如圖粉紅顏色實線所示

client收到host2發來的訊息後,向namenode傳送訊息,說我寫完了。這樣就真完成了。如圖黃色粗實線

傳送完block1後,再向host7,host8,host4傳送block2,如圖藍色實線所示

當客戶端向 hdfs 檔案寫入資料的時候,一開始是寫到本地臨時檔案中。假設該檔案的副 本係數設定為 3 ,當本地臨時檔案累積到乙個資料塊的大小時,客戶端會從 namenode 獲取乙個 datanode 列表用於存放副本。然後客戶端開始向第乙個 datanode 傳輸資料,第乙個 datanode 一小部分一小部分 (4 kb) 地接收資料,將每一部分寫入本地倉庫,並同時傳輸該部分到列表中 第二個 datanode 節點。第二個 datanode 也是這樣,一小部分一小部分地接收資料,寫入本地 倉庫,並同時傳給第三個 datanode 。最後,第三個 datanode 接收資料並儲存在本地。因此, datanode 能流水線式地從前乙個節點接收資料,並在同時**給下乙個節點,資料以流水線的 方式從前乙個 datanode 複製到下乙個

時序圖如下:

寫入的過程,按hdsf預設設定,1t檔案,我們需要3t的儲存,3t的網路流量

在執行讀或寫的過程中,namenode和datanode通過heartbeat進行儲存通訊,確定datanode活著。如果發現datanode死掉了,就將死掉的datanode上的資料,放到其他節點去。讀取時,要讀其他節點去

掛掉乙個節點,沒關係,還有其他節點可以備份;甚至,掛掉某乙個機架,也沒關係;其他機架上,也有備份

hdfs讀檔案:

block持續化結構:

Hadoop系列一HDFS簡介

namenode nn namenode的metadata資訊在啟動後會載入到記憶體中,metadata資訊儲存在磁碟檔案fsimage,edits檔案記錄對metadata的操作日誌,block位置資訊只存在記憶體,不儲存到fsimage。secondarynamenode snn 不是nn的備份...

HADOOP學習筆記(一) HDFS

hdfs,它是乙個檔案系統,用於儲存檔案,通過目錄樹來定位檔案 其次,它是分布式的,由很多伺服器聯合起來實現其功能,集群中的伺服器有各自的角色。hdfs的設計適合一次寫入,多次讀出的場景,且不支援檔案的修改。適合用來做資料分析,並不適合用來做網盤應用。namenode 它維護著整個檔案系統的檔案資料...

HDFS要點剖析

談到大資料,不得不提的乙個名詞是 hdfs 它是一種分布式檔案儲存系統,其系統架構圖如下圖所示 從圖中可以了解到的幾個關鍵概念 從圖中可以了解到的兩個重要元件 需要了解的另乙個元件 簡單地說,namenode 有管理和儲存兩個作用。namenode 管理檔案系統的命名空間,維護檔案系統樹以及樹中的所...