亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

2、Hdfs架構設計與原理詳解

發布時間:2020-06-02 17:00:03 來源:網絡 閱讀:2198 作者:victor19901114 欄目:大數據

@[TOC]

1.Hadoop架構

Hadoop由三個模塊組成:分布式存儲HDFS、分布式計算MapReduce、資源調度引擎Yarn

2.HDFS體系架構

2.1NameNode

???NameNode負責:文件元數據信息的操作以及處理客戶端的請求
???NameNode管理:HDFS文件系統的命名空間NameSpace。
???NameNode維護:文件系統樹(FileSystem)以及文件樹中所有的文件和文件夾的元數據信息(matedata)維護文件到塊的對應關系和塊到節點的對應關系
???NameNode文件:namespace鏡像文件(fsimage),操作日志文件(edit log)這些信息被Cache在RAM中,當然這兩個文件也會被持久化存儲在本地硬盤。
???NameNode記錄:每個文件中各個塊所在的數據節點的位置信息。但它并不永久保存塊的位置信息,因為這些信息在系統啟動時由數據節點重建。從數據節點重建:在nameNode啟動時,DataNode向NameNode進行注冊時發送給NameNode

2.1.1元數據信息

???文件名,文件目錄結構,文件屬性(生成時間,副本數,權限)每個文件的塊列表。
以及列表中的塊與塊所在的DataNode之間的地址映射關系 在內存中加載文件系統中每個文件和每個數據塊的引用關系(文件、block、datanode之間的映射信息) 數據會定期保存到本地磁盤,但不保存block的位置信息而是由DataNode注冊時上報和在運行時維護

2.1.2NameNode文件操作

NameNode負責文件元數據的操作 ,DataNode負責處理文件內容的讀寫請求,數據流不經過NameNode,會詢問它跟那個DataNode聯系

2.1.3NameNode副本

文件數據塊到底存放到哪些DataNode上,是由NameNode決定的,NN根據全局情況做出放置副本的決定
讀取文件的時候,NN盡量讓client讀取離它最近的datanode上的副本,降低帶寬消耗和讀取時延

2.1.4NameNode心跳機制

全權管理數據塊的復制,周期性的接受心跳和塊的狀態報告信息(包含該DataNode上所有數據塊的列表)
若接受到心跳信息,NN認為DN工作正常,如果在10分鐘后還接受到不到DN的心跳,那么NN認為DN已經宕機 這時候NN準備要把DN上的數據塊進行重新的復制。 塊的狀態報告包含了一個DN上所有數據塊的列表,blocks report 每個1小時發送一次

2.1.5NameNode容錯機制

????沒有Namenode,HDFS就不能工作。事實上,如果運行namenode的機器壞掉的話,系統中的文件將會完全丟失,因為沒有其他方法能夠將位于不同datanode上的文件塊(blocks)重建文件。因此,namenode的容錯機制非常重要,Hadoop提供了兩種機制。
????第一種方式是將持久化存儲在本地硬盤的文件系統元數據備份。Hadoop可以通過配置來讓Namenode將他的持久化狀態文件寫到不同的文件系統中。這種寫操作是同步并且是原子化的。比較常見的配置是在將持久化狀態寫到本地硬盤的同時,也寫入到一個遠程掛載的網絡文件系統(NFS)。
????第二種方式是運行一個輔助的Namenode(SecondaryNamenode)。 事實上SecondaryNamenode并不能被用作Namenode它的主要作用是定期的將Namespace鏡像與操作日志文件(edit log)合并,以防止操作日志文件(edit log)變得過大。通常,SecondaryNamenode 運行在一個單獨的物理機上,因為合并操作需要占用大量的CPU時間以及和Namenode相當的內存。輔助Namenode保存著合并后的Namespace鏡像的一個備份,萬一哪天Namenode宕機了,這個備份就可以用上了。
????但是輔助Namenode總是落后于主Namenode,所以在Namenode宕機時,數據丟失是不可避免的。在這種情況下,一般的,要結合第一種方式中提到的遠程掛載的網絡文件系統(NFS)中的Namenode的元數據文件來使用,把NFS中的Namenode元數據文件,拷貝到輔助Namenode,并把輔助Namenode作為主Namenode來運行。

2.1.6NameNode物理結構

2、Hdfs架構設計與原理詳解
2、Hdfs架構設計與原理詳解
2、Hdfs架構設計與原理詳解

2.1.7NameNode文件結構

2、Hdfs架構設計與原理詳解
NameNode的存儲目錄
2、Hdfs架構設計與原理詳解

2.2DataNode

????一個集群可能包含上千個DataNode節點,這些DataNode定時和NameNode進行通信,接受NameNode的指令 為了減輕NameNode的負擔,NameNode上并不永久保存哪個DataNode上有哪些數據塊的信息,而是通過DataNode啟動時的上報來更新NameNode上的映射表。
????根據客戶端或者是namenode的調度存儲和檢索數據,并且定期向namenode發送所存儲的塊(block)的列表,數據塊在DataNode進程所在的節點上以文件的形式存儲在本地磁盤上 ,一個是數據本身 ,一個是元數據(數據塊的長度,塊數據的校驗和,以及時間戳),維護blockid與DataNode之間的映射信息(元信息)

2.2.1DataNode工作機制

????datanode啟動時,每個datanode對本地磁盤進行掃描,將本datanode上保存的block信息匯報給namenode namenode在接收到的block信息以及該block所在的datanode信息等保存在內存中。
DataNode啟動后向NameNode注冊,通過后周期性(1小時)的向NameNode上報所有的塊信息.
????(1)通過向NameNode發送心跳保持與其聯系(3秒一次),心跳返回結果帶有NN的命令 ,返回的命令為:如塊的復制,刪除某個數據塊…..
????(2)如果10分鐘沒有收到DataNode的心跳,則認為其已經lost,并copy其上的block到其它DataNode
????(3)DN在其文件創建后三周進行驗證其checkSum的值是否和文件創建時的checkSum值一致

2.2.2DataNode讀寫操作

????集群中的每個服務器都運行一個DataNode后臺程序,這個后臺程序負責把HDFS數據塊讀寫到本地的文件系統。 當需要通過客戶端讀/寫某個數據時,先由NameNode告訴客戶端去哪個DataNode進行具體的讀/寫操作 然后,客戶端直接與這個DataNode服務器上的后臺程序進行通信,并且對相關的數據塊進行讀/寫操作。

2.3SecondaryNameNode

????SecondaryNameNode是HDFS架構中的一個組成部分,但是經常由于名字而被人誤解它真正的用途,其實它真正的用途,是用來保存namenode中對HDFS metadata的信息的備份,并減少namenode重啟的時間。對于hadoop進程中,要配置好并正確的使用snn,還是需要做一些工作的。hadoop的默認配置中讓snn進程默認運行在了namenode的那臺機器上,但是這樣的話,如果這臺機器出錯,宕機,對恢復HDFS文件系統是很大的災難,更好的方式是:將snn的進程配置在另外一臺機器上運行。
????在hadoop中,namenode負責對HDFS的metadata的持久化存儲,并且處理來自客戶端的對HDFS的各種操作的交互反饋。為了保證交互速度,HDFS文件系統的metadata是被load到namenode機器的內存中的,并且會將內存中的這些數據保存到磁盤進行持久化存儲。為了保證這個持久化過程不會成為HDFS操作的瓶頸,hadoop采取的方式是:沒有對任何一次的當前文件系統的snapshot進行持久化,對HDFS最近一段時間的操作list會被保存到namenode中的一個叫Editlog的文件中去。當重啟namenode時,除了load fslmage意外,還會對這個Editlog文件中記錄的HDFS操作進行replay,以恢復HDFS重啟之前的最終狀態。
????而SecondaryNameNode,會周期性的將Editlog中記錄的對HDFS的操作合并到一個checkpoint中,然后清空Editlog。所以namenode的重啟就會Load最新的一個checkpoint,并重現Editlog中記錄的hdfs操作,由于Editlog中記錄的是從上一次checkpoint以后到現在的操作列表,所以就會比較小。如果沒有SecondaryNameNode的這個周期性的合并過程,那么當每次重啟namenode的時候,就會花費很長的時間。而這樣周期性的合并就能減少重啟的時間。同時也能保證HDFS系統的完整性。
????這就是SecondaryNameNode所做的事情。所以snn并不能分擔namenode上對HDFS交互性操作的壓力。盡管如此,當namenode機器宕機或者namenode進程出問題時,namenode的daemon進程可以通過人工的方式從snn上拷貝一份metadata來恢復HDFS文件系統。
至于為什么要將snn進程運行在一臺非NameNode的機器上,這主要出于兩點考慮:
????1、可擴展性:創建一個新的HDFS的snapshot(快照)需要將namenode中load到內存的metadata信息全部拷貝一遍,這樣的操作需要的內存和namenode占用的內存一樣,由于分配給namenode進程的內存其實是對HDFS文件系統的限制,如果分布式文件系統非常的大,那么namenode那臺機器的內存就可能會被namenode進程全部占據。
????2、容錯性:當snn創建一個checkpoint的時候,它會將checkpoint拷貝成metadata的幾個拷貝。將這個操作運行到另外一臺機器,還可以提供分布式文件系統的容錯性。
SECONDARYNAMENODE工作原理

2.3.1SecondaryNameNode日志與鏡像合并步驟

日志與鏡像的定期合并總共分五步:
????1、SecondaryNameNode通知NameNode準備提交edits文件,此時主節點產生edits.new
????2、SecondaryNameNode通過http get方式獲取NameNode的fsimage與edits文件(在SecondaryNameNode的current同級目錄下可見到 temp.check-point或者previous-checkpoint目錄,這些目錄中存儲著從namenode拷貝來的鏡像文件)
????3、SecondaryNameNode開始合并獲取的上述兩個文件,產生一個新的fsimage文件fsimage.ckpt
????4、SecondaryNameNode用http post方式發送fsimage.ckpt至NameNode
????5、NameNode將fsimage.ckpt與edits.new文件分別重命名為fsimage與edits,然后更新fstime,整個checkpoint過程到此結束。 在新版本的hadoop中(hadoop0.21.0),SecondaryNameNode兩個作用被兩個節點替換, checkpoint node與backup node. SecondaryNameNode備份由三個參數控制fs.checkpoint.period控制周期,fs.checkpoint.size控制日志文件超過多少大小時合并, dfs.http.address表示http地址,這個參數在SecondaryNameNode為單獨節點時需要設置。
2、Hdfs架構設計與原理詳解

3.HDFS機制

3.1心跳機制

工作原理:

  1. master啟動的時候,會開一個ipc server在那里。
  2. slave啟動,連接master,每隔3秒鐘向master發送一個“心跳”,攜帶狀態信息;
  3. master通過這個心跳的返回值,向slave節點傳達指令
    作用:
  4. Namenode全權管理數據塊的復制,它周期性地從集群中的每個Datanode接收心跳信號和塊狀態報告
    (Blockreport)。接收到心跳信號意味著該Datanode節點工作正常。塊狀態報告包含了一個該 Datanode上所
    有數據塊的列表
  5. DataNode啟動后向NameNode注冊,通過后,周期性(1小時)的向 NameNode上報所有的塊的列表;
    每3秒向NamNode發一次心跳,返回NameNode給該DataNode的命令;如復制塊數據到另一臺機器,或刪
    除某個數據塊。如果NameNode超過10分鐘沒有收 到某個DataNode 的心跳,則認為該節點不可用。
  6. hadoop集群剛開始啟動時,會進入安全模式(99.9%),就用到了心跳機制

3.2負載均衡

????Hadoop的HDFS集群非常容易出現機器與機器之間磁盤利用率不平衡的情況,例如:當集群內新增、刪除節點,或者某個節點機器內硬盤存儲達到飽和值。當數據不平衡時,Map任務可能會分配到沒有存儲數據的機器,這將導致網絡帶寬的消耗,也無法很好的進行本地計算。
當HDFS負載不均衡時,需要對HDFS進行數據的負載均衡調整,即對各節點機器上數據的存儲分布進行調整。從而,讓數據均勻的分布在各個DataNode上,均衡IO性能,防止熱點的發生。進行數據的負載均衡調整,必須要滿足如下原則:
c(1)數據平衡不能導致數據塊減少,數據塊備份丟失
????(2)管理員可以中止數據平衡進程
????(3)每次移動的數據量以及占用的網絡資源,必須是可控的
????(4)數據均衡過程,不能影響namenode的正常工作
負載均衡原理如下:
2、Hdfs架構設計與原理詳解
步驟分析如下:
????(1)數據均衡服務(Rebalancing Server)首先要求 NameNode 生成 DataNode 數據分布分析報告,獲取每個DataNode磁盤使用情況
????(2)Rebalancing Server匯總需要移動的數據分布情況,計算具體數據塊遷移路線圖。數據塊遷移路線圖,確保網絡內最短路徑
????(3)開始數據塊遷移任務,Proxy Source Data Node復制一塊需要移動數據塊
????(4)將復制的數據塊復制到目標DataNode上
????(5)刪除原始數據塊
????(6)目標DataNode向Proxy Source Data Node確認該數據塊遷移完成
????(7)Proxy Source Data Node向Rebalancing Server確認本次數據塊遷移完成。然后繼續執行這個過程,直至集群達到數據均衡標準

4.HDFS讀寫流程

????在了解讀寫過程之前先了了解基本的概念:
????在DFSClient寫HDFS的過程中,有三個需要搞清楚的單位:block、packet與chunk;
????block是最大的一個單位,它是最終存儲于DataNode上的數據粒度,由dfs.block.size參數決定,默認是64M;注:這個參數由客戶端配置決定;
????packet是中等的一個單位,它是數據由DFSClient流向DataNode的粒度,以dfs.write.packet.size參數為參考值,默認是64K;注:這個參數為參考值,是指真正在進行數據傳輸時,會以它為基準進行調整,調整的原因是一個packet有特定的結構,調整的目標是這個packet的大小剛好包含結構中的所有成員,同時也保證寫到DataNode后當前block的大小不超過設定值;
????chunk是最小的一個單位,它是DFSClient到DataNode數據傳輸中進行數據校驗的粒度,由io.bytes.per.checksum參數決定,默認是512B;
????注:事實上一個chunk還包含4B的校驗值,因而chunk寫入packet時是516B;數據與檢驗值的比值為128:1,所以對于一個128M的block會有一個1M的校驗文件與之對應;

4.1數據讀流程

2、Hdfs架構設計與原理詳解
????1、客戶端調用FileSystem 實例的open 方法,獲得這個文件對應的輸入流InputStream。
????2、通過RPC 遠程調用NameNode ,獲得NameNode 中此文件對應的數據塊保存位置,包括這個文件的副本的保存位置( 主要是各DataNode的地址) 。
????3、獲得輸入流之后,客戶端調用read 方法讀取數據。選擇最近的DataNode 建立連接并讀取數據。
????4、如果客戶端和其中一個DataNode 位于同一機器(比如MapReduce 過程中的mapper 和reducer),那么就會直接從本地讀取數據。
????5、到達數據塊末端,關閉與這個DataNode 的連接,然后重新查找下一個數據塊。
????6、不斷執行第2 - 5 步直到數據全部讀完。
????7、客戶端調用close ,關閉輸入流DF S InputStream。
????在讀的過程中如何保證數據的完整性:
????通過校驗和。因為每個chunk中都有一個校驗位,一個個chunk構成packet,一個個packet最終形成block,故可在block上求校驗和。HDFS 的client端即實現了對 HDFS 文件內容的校驗和 (checksum) 檢查。當客戶端創建一個新的HDFS文件時候,分塊后會計算這個文件每個數據塊的校驗和,此校驗和會以一個隱藏文件形式保存在同一個 HDFS 命名空間下。當client端從HDFS中讀取文件內容后,它會檢查分塊時候計算出的校驗和(隱藏文件里)和讀取到的文件塊中校驗和是否匹配,如果不匹配,客戶端可以選擇從其他 Datanode 獲取該數據塊的副本。

4.2數據寫流程

2、Hdfs架構設計與原理詳解
2、Hdfs架構設計與原理詳解
????1、使用 HDFS 提供的客戶端 Client,向遠程的 namenode 發起 RPC 請求
????2、namenode 會檢查要創建的文件是否已經存在,創建者是否有權限進行操作,成功則會 為文件創建一個記錄,否則會讓客戶端拋出異常;
????3、當客戶端開始寫入文件的時候,客戶端會將文件切分成多個 packets,并在內部以數據隊列“data queue(數據隊列)”的形式管理這些 packets,并向 namenode 申請 blocks,獲 取用來存儲 replicas 的合適的 datanode 列表,列表的大小根據 namenode 中 replication 的設定而定;
????4、開始以 pipeline(管道)的形式將 packet 寫入所有的 replicas 中。客戶端把 packet 以流的 方式寫入第一個 datanode,該 datanode 把該 packet 存儲之后,再將其傳遞給在此 pipeline 中的下一個 datanode,直到最后一個 datanode,這種寫數據的方式呈流水線的形式。
????5、最后一個 datanode 成功存儲之后會返回一個 ack packet(確認隊列),在 pipeline 里傳遞 至客戶端,在客戶端的開發庫內部維護著"ack queue",成功收到 datanode 返回的 ack packet 后會從"data queue"移除相應的 packet。
????6、如果傳輸過程中,有某個 datanode 出現了故障,那么當前的 pipeline 會被關閉,出現故 障的 datanode 會從當前的 pipeline 中移除,剩余的 block 會繼續剩下的 datanode 中繼續 以 pipeline 的形式傳輸,同時 namenode 會分配一個新的 datanode,保持 replicas 設定的 數量。
????7、客戶端完成數據的寫入后,會對數據流調用 close()方法,關閉數據流;
????8、只要寫入了 dfs.replication.min(最小寫入成功的副本數)的復本數(默認為 1),寫操作 就會成功,并且這個塊可以在集群中異步復制,直到達到其目標復本數(dfs.replication 的默認值為 3),因為 namenode 已經知道文件由哪些塊組成,所以它在返回成功前只需 要等待數據塊進行最小量的復制。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁晋县| 贵州省| 江西省| 南岸区| 蓬安县| 和林格尔县| 车险| 灌阳县| 辽阳县| 贞丰县| 巍山| 兴和县| 鄂伦春自治旗| 罗定市| 内江市| 江达县| 库车县| 玛多县| 江川县| 喜德县| 百色市| 铁力市| 游戏| 湟中县| 丰顺县| 蒙阴县| 峡江县| 廊坊市| 江达县| 肇州县| 景谷| 盱眙县| 堆龙德庆县| 江山市| 镇远县| 兴安县| 永靖县| 垣曲县| 靖西县| 昆明市| 白朗县|