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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDFS 技术

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

HDFS定義

Hadoop Distributed File System,是一個使用 Java 實現的、分布式的、可橫向擴展的文件系
統,是 HADOOP 的核心組件

HDFS特點

  • 處理超大文件
  • 流式地訪問數據
  • 運行于廉價的商用機器集群上;
    HDFS 不適合以下場合:
  • 低延遲數據訪問
  • 大量小文件的存儲
  • 不支持多用戶寫入及任意修改文件

HDFS基本結構

HDFS相關概念 --塊

  • HDFS使用了塊的概念,默認大小128M/256M字節
    • 可針對每個文件配置,由客戶端指定
    • 每個塊有一個自己的全局ID
  • HDFS將一個文件分為一個或數個塊來存儲
    • 每個塊是一個獨立的存儲單位
    • 以塊為單位在集群服務器上分配存儲
  • 與傳統文件系統不同的是,如果實際數據沒有達到塊大小,則并不實際占用整個塊磁盤空間
    • 如果一個文件是200M,則它會被分為2個塊: 128+72

    HDFS相關概念 --元數據

  • 元數據 (MetaData)包括
    文件系統目錄樹信息
    • 文件名,目錄名
    • 文件和目錄的從屬關系
    • 文件和目錄的大小,創建及最后訪問時間
    • 權限

    文件和塊的對應關系

    • 文件由哪些塊組成

    塊的存放位置

    • 機器名,塊ID

  • HDFS對元數據和實際數據采取分別存儲的方法
    • 元數據存儲在NameNode服務器上;
    • 實際數據儲存在集群的DataNode中

    HDFS相關概念 --NameNode

    NameNode是用來管理文件系統命名空間的組件。一個HDFS集群只有一臺(active)NameNode

    • NameNode上存放了HDFS的元數據,記錄了每個文件中各個塊所在的數據節點的位置信息。一個HDFS集群只有一份元數據,可能有單點故障問題
    • 元數據工作時在NameNode內存中,以便快速查詢。1G內存大致可存放1,000,000塊對應的元數據信息。按缺省每塊64M計算,大致對應64T實際數據
    • 集群關閉時,元數據持久化到磁盤中,啟動集群時,需要將元數據裝載到內存中

    NameNode數據結構

    • NameNode負責管理分布式文件系統的Namespace命名空間,保存了兩個核心數據結構:FsImage和EditLog
    • FsImage用于維護文件系統樹以及文件樹中所有的文件和文件夾的元數據;
    • 操作日志文件EditLog中記錄了所有針對文件的創建、刪除、重命名等操作;

    NameNode 工作原理

  • 在名稱節點啟動的時候,它會將FsImage文件中的內容加載到內存中,之后再執行EditLog文件中的各項操作,使得內存中的元數據和實際的同步,存在內存中的元數據支持客戶端的讀操作。

  • 一旦在內存中成功建立文件系統元數據的映射,則創建一個新的FsImage文件和一個空的EditLog文件

  • 在名稱節點運行期間,HDFS的所有更新操作都是直接寫到EditLog中,久而久之, EditLog文件將會變得很大。當EditLog文件非常大的時候,會導致名稱節點啟動操作非常慢,而在這段時間內HDFS系統處于安全模式,一直無法對外提供寫操作,影響了用戶的使用。

  • HDFS相關概念 --SecondaryNameNode

    第二名稱節點是HDFS
    架構中的一個組成部
    分,協助NameNode完
    成Fsimage和edits文件
    合并工作,使得內存
    中的Fsimage保持“最
    新”

    SecondaryNameNode 一般是單獨運行在一
    臺機器上。

    HDFS相關概念 --DataNode

    • 塊的實際數據存放在DataNode上
    • 每個塊會在本地文件系統產生兩個文件,一個是實際的數據文件,另一個是塊的附加信息文件,其中包括塊數據的長度、校驗和,以及時間戳
    • DataNode通過心跳包(Heartbeat)與NameNode通訊
    • 客戶端讀取/寫入數據的時候直接與DataNode通信
    • 集群運行中可以安全加入和退出一些機器

    HDFS體系結構

    DataNode

    • NameNode是一個中心服務器,單一節點,負責管理文件系統的命名空間(namespace)以及客戶端對文件的訪問;
    • 文件操作,NameNode負責文件元數據的操作,DataNode負責處理文件內容的讀寫請求,數據流不經過NameNode,只會詢問它跟那個DataNode聯系;
    • 副本存放在哪些DataNode上由NameNode來控制,根據全局情況做出塊放置決定,讀取文件時NameNode盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取時延

    冗余存儲策略

    • 每個塊在集群上會存儲多個副本(replication) –默認復制份數為3; 可以動態修改,可針對每個文件配置,由客戶端指定
    • 某個塊的所有備份都是同一個ID –系統無需記錄 “哪些塊其實是同一份數據”
    • 根據機架配置自動分配備份位置(Rack Awareness)
  • 第一個副本:放置在上傳文件的DN;如果是集群外提交,則隨機挑選一臺磁盤不太滿,CPU不太忙的節點
  • 第二個副本:放置在于第一個副本不同的機架的節點上
  • 第三個副本:與第一個副本相同機架的其他節點
  • 更多副本:隨機節點
    • 優點:加快數據傳輸速度;容易檢查錯誤;保證數據的可靠性

    錯誤恢復策略

  • 名稱節點出錯
    名稱節點保存了所有的元數據信息,最核心的兩大數據結構
    是FsImage和Editlog。當名稱節點出錯時,就可以根據備份
    SecondaryNameNode中的FsImage和Editlog數據進行恢復。

  • 數據節點出錯

    • 數據節點定期向名稱節點發送“心跳”信息報告狀態;
    • 當數據節點發生故障,或者網絡斷網時,名稱節點就無法收到來自數據節點的心跳信息,這些數據節點就被標記為“宕機”,節點上面的所有數據都會被標記為“不可讀”,名稱節點不會再給它們發送任何I/O請求;
    • 一些數據節點的不可用,會導致一些數據塊的副本數量小于冗余因子;名稱節點會定期檢查,一旦發現某個數據塊的副本數量小于冗余因子,就會啟動數據冗余復制生成新的副本;
    • HDFS和其它分布式文件系統的最大區別就是可以調整冗余數據的位置。
  • 數據出錯
    • 網絡傳輸和磁盤錯誤等因素,都會造成數據錯誤;客戶端在讀取到數據后,會采用md5和sha1對數據塊進行校驗,以確定讀取到正確的數據;

    • 在文件被創建時,客戶端就會對每一個文件塊進行信息摘錄,并把這些信息寫入到同一個路徑的隱藏文件里面

    • 當客戶端讀取文件的時候,會先讀取該信息文件,然后,利用該信息文件對每個讀取的數據塊進行校驗,如果校驗出錯,客戶端就會請求到另外一個數據節點讀取該文件塊,并且向名稱節點報告這個文件塊有錯誤,名稱節點會定期檢查并且重新復制這個塊

    文件權限策略

    • 與Linux文件權限類似 ( chmod, chown )r: read; w:write; x:execute,權限x對于文件忽略,對于文件夾表示是否允許訪問其內容
    • 如果Linux系統用戶zhangsan使用hadoop命令創建一個文件,那么這個文件在HDFS中owner是zhangsan
    • HDFS的權限目的:阻止好人做錯事,而不是阻止壞人做壞事。HDFS相信,你告訴我你是誰,我就認為你是誰

    安全模式

    指文件系統所處的一種只讀的安全模式。HDFS啟動時會在safemode狀態

    $ hadoop dfsadmin -safemode get #安全模式當前狀態信息 $ hadoop dfsadmin -safemode enter #進入安全模式 $ hadoop dfsadmin -safemode leave #解除安全模式 $ hadoop dfsadmin -safemode wait #掛起,直到安全模式結束

    HDFS 寫操作

  • 客戶端寫一個文件并不是直接寫到HDFS上;
  • HDFS客戶端接收用戶數據,并把內容緩存在本地;
  • 當本地緩存收集足夠一個HDFS塊大小的時候,客戶端同NameNode通訊注冊一個新的塊;
  • 注冊塊成功后,NameNode給客戶端返回一個DataNode的列表; – 列表中是該塊需要存放的位置,包括冗余備份
  • 客戶端向列表中的第一個DataNode寫入塊; 當完成時,第一個DataNode 向列表中的下個DataNode發送寫操作,并把數據已收到的確認信息給客戶端,同時發送確認信息給NameNode 之后的DataNode重復之上的步驟。當列表中所有DataNode都接收到數據并且由最后一個DataNode校驗數據正確性完成后,返回確認信息給客戶端
  • 收到所有DN的確認信息后,客戶端刪除本地緩存;
  • 客戶端繼續發送下一個塊,重復以上步驟;
  • 當所有數據發送完成后,寫操作完成。
  • HDFS 讀操作

  • 客戶端與NameNode通訊獲取文件的塊位置信息,其中包括了塊的所有冗余備份的位置信息:DataNode的列表;
  • 客戶端獲取文件位置信息后直接同有文件塊的DataNode通訊,讀取文件;
  • 如果第一個DataNode無法連接,客戶端將自動聯系下一個DataNode;
  • 如果塊數據的校驗值出錯,則客戶端需要向NameNode報告,并自動聯系下一個DataNode。
  • HDFS追加寫操作

  • 客戶端與NameNode通訊,獲得文件的寫保護鎖及文件最后一個塊的位置(DataNode列表)
  • 客戶端挑選一個DataNode作為主寫入節點,并對其余節點上的該數據塊加鎖
  • 開始寫入數據。與普通寫入流程類似,依次更新各個DataNode上的數據。更新時間戳和校驗和
  • 最后一個塊寫滿,并且所有備份塊都完成寫入后,向NameNode申請下一個數據塊。
  • HDFS命令行

    cat

    • 用途:顯示一個或多個文件內容到控制臺
    • 使用方法:hadoop fs -cat URI [URI …]
    • 例子:
    ? hadoop fs -cat hdfs://host1:port1/file1 hdfs://host2:port2/file2 ? hadoop fs -cat file:///file3 /user/hadoop/file4

    put/copyFromLocal

    • 用途:將本地一個或多個文件導入HDFS。以上兩個命令唯一的不同時copyFromLocal的源只能是本地文件,而put可以讀取stdin的數據
    • 使用方法:hadoop fs -put/copyFromLocal UR
    • 例子:
    ? hadoop fs -put localfile.txt /user/hadoop/hadoopfile.txt ? hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir ? hadoop fs -put localfile hdfs://host:port/hadoop

    get/copyToLocal

    • 用途:將HDFS中的一個或多個文件導出到本地文件系統
    • 使用方法: hadoop fs -get/copyToLocal [-ignorecrc] [-crc] URI < localsrc>
    • 例子:
    ? hadoop fs -get /user/hadoop/hadoopfile localfile ? hadoop fs -get hdfs://host:port/user/hadoop/file localfile

    ls

    • 用途:列出文件夾目錄信息,lsr 遞歸顯示文件
    • 使用方法: hadoop fs -ls/lsr -h UR

    ls

    • 用途:檢查dfs的文件的健康狀況; 只能運行在master上
    • 使用方法: hadoop fsck [GENERIC_OPTIONS] [- move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]

    啟動HDFS服務

    關閉HDFS服務

    總結

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

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