日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDFS体系架构介绍

發布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDFS体系架构介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HDFS體系架構(最全)

參考博客:https://blog.csdn.net/Lord_War/article/details/78727049

匯總:https://www.cnblogs.com/meet/p/5439805.html

NN:http://www.cnblogs.com/zlslch/p/5081112.html

DN:http://www.cnblogs.com/zlslch/p/5081183.html

CLIENT:http://www.cnblogs.com/zlslch/p/5081200.html

輔以:《hadoop中NameNode、DataNode、Secondary、NameNode、ResourceManager、NodeManager 介紹》

?

HDFS總體架構

HDFS 采用Master/Slave的架構來存儲數據,這種架構主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。一個HDFS集群是由一個NameNode和一定數目的DataNode組成的。NameNode是一個中心服務器,負責管理文件系統的名字空間 (Namespace )及客戶端對文件的訪問。集群中的DataNode一般是一個節點運行一個DataNode進程,負責管理它所在節點上的存儲。



?

?

?

HDFS架構解析

?

(1)client

可能會有人有疑問,什么是client,Client是不是就是每位開發人員的電腦?是不是每個作業提交所在節點的機器,是不是....等?很多疑惑?;诖?#xff0c;我來給大家解答迷惑。

?

???? ?HDFS的Client是處于如下的一個位置,當然,這幅圖只是一個引子罷了,不是固定的模板哈。

Client(代表用戶)通過與 NameNode和DataNode 交互訪問HDFS中的文件。Client 提供了一個類似 POSIX 的文件系統接口供用戶調用。

   (POSIX 表示可移植操作系統接口(Portable Operating System Interface ,縮寫為 POSIX ),POSIX標準定義了操作系統應該為應用程序提供的接口標準,是IEEE為要在各種UNIX操作系統上運行的軟件而定義的一系列API標準的總稱,其 正式稱呼為IEEE 1003,而國際標準名稱為ISO/IEC 9945。)

? ? ? ?想說的是,在hadoop生態各組件里,分別有其對應的Client。比如,在HDFS里,在分析其原理時,是HDFS Client。同理,在Mapreduce里,是Mapreduce Client。

?

注意:

? ? ???訪問HDFS的程序或HDFS shell命令都可以稱為HDFS的客戶端(client )。這只是部分而已。

????在 HDFS的客戶端中至少需要指定HDFS集群配置中的NameNode地址以及端口號信息,或者通過配置HDFS的core-site.xml配置文件來 指定。一般可以把客戶端和HDFS節點服務器放在同一臺機器上。但其前提是機器資源允許,并且我們能夠接受不可靠的應用程序代碼所帶來的穩定性降低的風 險。

?

重要啊:

????? ?(即HDFS的Client)客戶端是用戶和HDFS進行交互的手段,HDFS提供了各種各樣的客戶端,包括命令行接口、Java API, Thrift接口、C語言庫、用戶空間文件系統〔Filesystem in Userspace,FUSE)等。

?

如master、slave1、slave2這樣的非HA集群 ?+ ?client。

?或者?master1、master2、slave1、slave2、slave3這樣的HA集群 ?+ ?client。

? ? ??HDFS客戶端就是用來訪問這個hadoop文件系統的機器,它可以是裝有hadoop的機器,也可以是沒有裝hadoop的機器。

? ? ? 如果你的機器裝有hadoop,那你這臺機器既是服務器,又是客戶端。

? ? ?有人很好奇會問我,那為什么要這樣來規劃呢?是為了如client單獨來安裝如azkaban、oozie、flume、sqoop等(我這里指的是單節點的這些組件哈),只是為了初學學習罷了。這樣即可以與集群方便管理。

???? ?在實際的開發環境中,在集群環境中開發往往存在很多安全隱患,例如集群文件被誤刪等等,所以一般的開發工作都是本地完成開發的。本地做MR開發時,由于沒有hadoop環境,所以調試工作往往變的很難進行,所以在本地搭建一個hadoop client,不僅能提供本地調試環境,還能從直接從本地訪問到hdfs 數據和提交任務到hadoop環境中。你可以在本地運行MR,不登陸服務器就能查看數據。

?

那之間怎么來連接呢?

????(1)做好ssh免密碼通信

????(2)將如hadoop、spark等這樣的集群,scp一份到client機器上即可。

?

?在windows環境下搭建hadoop client 客戶端模式搭建
http://blog.csdn.net/u013181284/article/details/70172119

?

?

(2)NameNode

NameNode就是HDFS的Master架構,主要負責HDFS文件系統的管理工作,具體包括名稱空間(namespace)管理,文件Block管理。

(1)名稱空間(namespace)管理:它維護著文件系統樹(filesystem tree)以及文件樹中所有的文件和文件夾的元數據(metadata)。管理這些信息的文件有兩個,分別是Namespace 鏡像文件(fsimage)和操作日志文件(edit log),這些信息被Cache在RAM中,當然,這兩個文件也會被持久化存儲在本地硬盤。

(2)文件Block管理:Namenode記錄著每個文件中各個塊所在的數據節點的位置信息(元數據信息),從NameNode中你可以獲得每個文件的每個塊所在的DataNode。但是他并不持久化存儲這些信息,因為這些信息NameNode會在每次啟動系統時動態地重建這些信息。

?

這些元數據信息主要為:

    “文件名 -> 數據塊‘’映射

    “數據塊 -> DataNode列表”映射

  其中,"文件名 -> 數據塊"保存在磁盤上進行持久化存儲,需要注意的是NameNode上不保存‘’數據塊 -> DataNode列表”映射,該列表是通過DataNode上報給NameNode建立起來的。NameNode執行文件系統的名稱空間(namespace)操作,例如打開、關閉、重命名文件和目錄,同時決定文件數據塊到具體DataNode節點的映射。

 

(3)DataNode

?

HDFS的管理節點是NameNode,用于存儲并管理元數據。那么具體的文件數據存儲在哪里呢?DataNode就是負責存儲數據的組件,一個數 據塊Block會在多個DataNode中進行冗余備份;而一個DataNode對于一個塊最多只包含一個備份。所以可以簡單地認為DataNode上存儲了數據塊ID和數據塊內容,以及它們的映射關系。一個HDFS集群可能包含上千個DataNode節點,這些DataNode定時和NameNode進行通信,接受NameNode的指令,為了減輕NameNode的負擔,NameNode上并不永久保存哪個DataNode上有哪些數據塊的信息,而是通過DataNode啟動時的上報來更新NameNode上的映射表。【這個和上述講解namenode的職責是一樣的】?DataNode和NameNode建立連接后,就會不斷地和NameNode保持聯系,反饋信息中也包含了NameNode對DataNode的一些命 令,如刪除數據庫或者把數據塊復制到另一個DataNode。應該注意的是:NameNode不會發起到DataNode的請求,在這個通信過程中,它們 嚴格遵從客戶端/服務器架構。

  當然DataNode也作為服務器接受來自客戶端的訪問,處理數據塊讀/寫請求。DataNode之間還會相互通信,執行數據塊復制任務,同時,在客戶端執行寫操作的時候,DataNode之間需要相互配合,以保證寫操作的一致性。

  DataNode是文件系統Worker中的節點,用來執行具體的任務:存儲文件塊,被客戶端和NameNode調用。同時,它會通過心跳(Heartbeat)定時向NameNode發送所存儲的文件塊信息。

?

?

(4)SecondaryNameNode

和NameNode最相關的還有一個概念就是Secondary NameNode,其主要是定時對NameNode的數據snapshots進行備份,這樣可盡量降低NameNode崩潰之后導致數據丟失的風險,其所做的工作就是從NameNode獲得fsimage和edits后把兩者重新合并發給NameNode,這樣,既能減輕NameNode的負擔又能安全地備份,一旦HDFS的Master架構失效,就可以借助Secondary NameNode進行數據恢復。但是輔助Namenode總是落后于主Namenode,所以在Namenode宕機時,數據丟失是不可避免的。通常,Secondary Namenode 運行在一個單獨的物理機上,因為合并操作需要占用大量的CPU時間以及和Namenode相當的內存。

?

3.1NameNode的目錄結構如下:

?

${dfs.name.dir}/current/VERSION

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/edits

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/fsimage

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/fstime

?

3.2Secondary NameNode的目錄結構如下:

?

${fs.checkpoint.dir}/current/VERSION

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?/edits

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?/fsimage

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?/fstime

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/previous.checkpoint/VERSION

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? /edits

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? /fsimage

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? /fstime

?

?

如上圖,Secondary NameNode主要是做Namespace image和Edit log合并的。

?

那么這兩種文件是做什么的?當客戶端執行寫操作,則NameNode會在edit log記錄下來,(我感覺這個文件有些像Oracle的online redo logo file)并在內存中保存一份文件系統的元數據。

?

Namespace image(fsimage)文件是文件系統元數據的持久化檢查點,不會在寫操作后馬上更新,因為fsimage寫非常慢(這個有比較像datafile)。

?

由于Edit log不斷增長,在NameNode重啟時,會造成長時間NameNode處于安全模式,不可用狀態,是非常不符合Hadoop的設計初衷。所以要周期性合并Edit log,但是這個工作由NameNode來完成,會占用大量資源,這樣就出現了Secondary NameNode,它可以進行image檢查點的處理工作。步驟如下:

(1)? ?? ? Secondary NameNode請求NameNode進行edit log的滾動(即創建一個新的edit log),將新的編輯操作記錄到新生成的edit log文件;

(2)? ?? ? 通過http get方式,讀取NameNode上的fsimage和edits文件,到Secondary NameNode上;

(3)? ?? ? 讀取fsimage到內存中,即加載fsimage到內存,然后執行edits中所有操作(類似OracleDG,應用redo log),并生成一個新的fsimage文件,即這個檢查點被創建;

(4)? ?? ? 通過http post方式,將新的fsimage文件傳送到NameNode;

(5)? ?? ? NameNode使用新的fsimage替換原來的fsimage文件,讓(1)創建的edits替代原來的edits文件;并且更新fsimage文件的檢查點時間。

整個處理過程完成。

Secondary NameNode的處理,是將fsimage和edites文件周期的合并,不會造成nameNode重啟時造成長時間不可訪問的情況。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的HDFS体系架构介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。