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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDFS(一)

發布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDFS(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HDFS(一)

參考:

http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

https://www.cnblogs.com/zsql/p/11587240.html

Hadoop Distribute File System:Hadoop分布式文件系統,Hadoop核心組件之一,作為大數據生態圈最底層的分布式存儲服務而存在。

架構

架構圖:主從結構

一個HDFS集群是由一個Namenode和一定數目的Datanodes組成。

  • Namenode是一個中心服務器,負責存儲和管理文件系統元數據信息(包括namespace目錄結構、文件塊位置信息等)以及客戶端對文件的訪問;
  • Datanode負責管理它所在節點上的存儲;
  • SecondaryNameNode是主角色的輔助角色,幫助主角色進行元數據的合并
NameNode
  • 維護和管理文件系統元數據,包括名稱空間目錄樹結構、文件和塊的位置信息、訪問權限等信息;HDFS的訪問的唯一入口

  • 內部通過內存和磁盤文件兩種方式管理元數據,其中磁盤文件上的元數據文件包括FileSystemimage內存元數據鏡像文件(快照)和edits log編輯日志;

DataNode

負責具體的數據塊存儲,DataNode的數量決定了HDFS集群的整體數據存儲能力,通過與NameNode配合維護著數據塊。

Secondary NameNode

充當NameNode的輔助接點,但不能替代NameNode。當NameNode啟動時,NameNode合并FSimage和edits log文件以還原當前文件系統名稱空間,如果edits log過大不利于加載,Secondary NameNode就輔助NameNode從NameNode下載FSimage文件和edits log文件進行合并。

重要特性
  • 主從架構
  • 分塊存儲機制
  • 副本機制(冗余存儲)
  • namespace: 層次性文件組織結構
  • 元數據管理:文件自身屬性信息;文件塊位置映射信息;
  • 數據塊存儲

HDFS寫數據流程

Pipeline管道

客戶端將數據塊寫入第一個數據節點,第一個數據節點保存數據之后再將塊復制到第二個數據節點,后者保存后將其復制到第三個數據節點。

為什么datanode之間采用pipeline線性傳輸,而不是一次給三個datanode拓撲式傳輸?數據傳輸采用管道的方式,線性的沿著一個方向傳輸,這樣能夠充分的利用每個機器的帶寬,避免網絡瓶頸和高延遲時的連接,最小化推送所有數據的延時。在線性推送模式下,每臺機器所有的出口帶寬都用于以最快的速度傳輸數據,而不是在多個接受者之間分配帶寬。

ACK應答響應
副本存儲策略
  • 第一塊副本:優先客戶端本地,否則隨機;
  • 第二塊副本:不同于第一塊副本的機架;
  • 第三塊副本:與第二塊副本相同機架的不同機器;
寫數據流程

  • HDFS客戶端創建FileSystem對象實例DistributedFileSystem,FileSystem封裝了與文件系統操作的相關方法。
  • 調用DistributedFileSystem對象的create()方法,通過RPC請求NameNode創建文件。NameNode執行各種檢查判斷:目標文件是否存在、父目錄是否存在、客戶端是否具有創建該文件的權限等,檢查通過后,NameNode會為本次請求記下一條記錄,返回FSDataOutputStream輸出流對象給客戶端用于寫數據。
  • 客戶端通過FSDataOutputStream開始寫入數據(FSDataOutputStream是DFSOutputStream包裝類)。
  • 客戶端寫入數據時,DFSOutputStream將數據分成一個個數據包(package默認64k),并寫入一個內部數據隊列中(data queue);DFSOutputStream有一個內部類DataStreamer,用于請求NameNode挑選出適合存儲數據副本的一組DataNode,默認是3副本存儲。DataStreamer將數據包流式傳輸到pipeline的第一個DataNode,該DataNode存儲數據包并將它發送到pipeline的第二個DataNode,同樣,第二個DataNode存儲數據包并且發送給第三個DataNode。
  • DFSOutputStream也維護著一個內部數據包隊列來等待DataNode的ack,稱之為確認隊列(ack queue),收到pipeline中所有DataNode確認信息后,該數據才會從確認隊列中刪除。
  • 客戶端完成數據寫入后,在FSDataOutputStream輸出流上調用close()方法關閉。
  • DistributedFileSystem聯系NameNode告知其文件寫入完成,等待NameNode確認。
  • HDFS讀數據流程

  • HDFS客戶端創建FileSystem對象實例DistributedFileSystem,FileSystem封裝了與文件系統操作的相關方法,調用DistributedFileSystem對象的open()方法來打開希望讀取的文件。
  • DistributedFileSystem使用RPC調用NameNode來確定文件前幾個塊的快位置(分批次讀取)信息。對于每個塊,NameNode返回具有該塊所有副本的DataNode位置地址列表,并且該地址列表是排序好的(與客戶端的網絡拓撲距離近的排序靠前)。
  • DistributedFileSystem將FSDataInputStream輸入流返回到客戶端以供其讀取數據。
  • 客戶端在FSDataInputStream輸入流上調用read()方法,然后,已存儲DataNode地址的DFSInputStream連接到文件中第一塊的最近DataNode,數據從DataNode流回客戶端。
  • 當該塊結束時,DFSInputStream將關閉與DataNode的連接,然后尋找下一塊的最佳DataNode。客戶端從流中讀取數據時,也會根據需要詢問NameNode來檢索下一批數據塊的DataNode位置信息。
  • 一旦客戶端完成讀取,就對FSDataInputStream調用close()方法。
  • 總結

    以上是生活随笔為你收集整理的HDFS(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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