HDFS面試題


hadoop節點動態上線下線怎么操作?

1)節點上線操作:

當要新上線數據節點的時候,需要把數據節點的名字追加在 dfs.hosts 文件中

(1)關閉新增節點的防火牆

(2)在 NameNode 節點的 hosts 文件中加入新增數據節點的 hostname

(3)在每個新增數據節點的 hosts 文件中加入 NameNode 的 hostname

(4)在 NameNode 節點上增加新增節點的 SSH 免密碼登錄的操作

(5)在 NameNode 節點上的 dfs.hosts 中追加上新增節點的 hostname,

(6)在其他節點上執行刷新操作:hdfs dfsadmin -refreshNodes

(7)在 NameNode 節點上,更改 slaves 文件,將要上線的數據節點 hostname 追加到 slaves 文件中

(8)啟動 DataNode 節點

(9)查看 NameNode 的監控頁面看是否有新增加的節點

2)節點下線操作:

(1)修改/conf/hdfs-site.xml 文件

(2)確定需要下線的機器,dfs.osts.exclude 文件中配置好需要下架的機器,這個是阻止下架的機器去連接 NameNode。

(3)配置完成之后進行配置的刷新操作./bin/hadoop dfsadmin -refreshNodes,這個操作的作用是在后台進行 block 塊的移動。

(4)當執行三的命令完成之后,需要下架的機器就可以關閉了,可以查看現在集群上連接的節點,正在執行 Decommission,會顯示:Decommission Status : Decommission in progress 執行完畢后,會顯示:Decommission Status :Decommissioned

(5)機器下線完畢,將他們從excludes 文件中移除。

hdfs整體架構介紹

1)Client:就是客戶端。
        (1)文件切分。文件上傳HDFS的時候,Client將文件切分成一個一個的Block,然后進行存儲;
        (2)與NameNode交互,獲取文件的位置信息;
        (3)與DataNode交互,讀取或者寫入數據;
        (4)Client提供一些命令來管理HDFS,比如啟動或者關閉HDFS;
        (5)Client可以通過一些命令來訪問HDFS;
2)NameNode:就是Master,它是一個主管、管理者。
        (1)管理HDFS的名稱空間;namespace
        (2)管理數據塊(Block)映射信息;
        (3)配置副本策略(默認);3 
        (4)處理客戶端讀寫請求。
3) DataNode:就是Slave。NameNode下達命令,DataNode執行實際的操作。
        (1)存儲實際的數據塊;
        (2)執行數據塊的讀/寫操作。
4) SecondaryNameNode:並非NameNode的熱備。當NameNode掛掉的時候,它並不能馬上替換NameNode並提供服務。
        (1)輔助NameNode,分擔其工作量;
        (2)定期合並Fsimage和Edits,並推送給NameNode;
        (3)在緊急情況下,可輔助恢復NameNode。

namenode內存包含哪些,具體如何分配

1)Namespace:維護整個文件系統的目錄樹結構及目錄樹上的狀態變化;

2)BlockManager:維護整個文件系統中與數據塊相關的信息及數據塊的狀態變化;

3)NetworkTopology:維護機架拓撲及DataNode信息,機架感知的基礎;

4)其它:

  LeaseManager:讀寫的互斥同步就是靠Lease實現,支持HDFS的Write-Once-Read-Many的核心數據結構;

  CacheManager:Hadoop 2.3.0引入的集中式緩存新特性,支持集中式緩存的管理,實現memory-locality提升讀性能;

  SnapshotManager:Hadoop 2.1.0引入的Snapshot新特性,用於數據備份、回滾,以防止因用戶誤操作導致集群出現數據問題;

  DelegationTokenSecretManager:管理HDFS的安全訪問;

  另外還有臨時數據信息、統計信息metrics等等。

  NameNode常駐內存主要被Namespace和BlockManager使用,二者使用占比分別接近50%。其它部分內存開銷較小且相對固定,與Namespace和BlockManager相比基本可以忽略。

HDFS無法高效存儲大量小文件,如何處理好小文件?

小文件問題,Hadoop本身也提供了幾個解決方案,分別為:Hadoop Archive,Sequence file和CombineFileInputFormat
1) Hadoop Archive Hadoop Archive或者HAR,是一個高效地將小文件放入HDFS塊中的文件存檔工具,它能夠將多個小文件打包成一個HAR文件,這樣在減少namenode內存使用的同時,仍然允許對文件進行透明的訪問。 對某個目錄/foo/bar下的所有小文件存檔成/outputdir/ zoo.har: hadoop archive -archiveName zoo.har -p /foo/bar /outputdir 當然,也可以指定HAR的大小(使用-Dhar.block.size)。 HAR是在Hadoop file system之上的一個文件系統,因此所有fs shell命令對HAR文件均可用,只不過是文件路徑格式不一樣,HAR的訪問路徑可以是以下兩種格式: har://scheme-hostname:port/archivepath/fileinarchive har:///archivepath/fileinarchive(本節點) 可以這樣查看HAR文件存檔中的文件: hadoop dfs -ls har:///user/zoo/foo.har 輸出: har:///user/zoo/foo.har/hadoop/dir1 har:///user/zoo/foo.har/hadoop/dir2 使用HAR時需要兩點,第一,對小文件進行存檔后,原文件並不會自動被刪除,需要用戶自己刪除;第二,創建HAR文件的過程實際上是在運行一個mapreduce作業,因而需要有一個hadoop集群運行此命令。 此外,HAR還有一些缺陷:第一,一旦創建,Archives便不可改變。要增加或移除里面的文件,必須重新創建歸檔文件。第二,要歸檔的文件名中不能有空格,否則會拋出異常,可以將空格用其他符號替換(使用-Dhar.space.replacement.enable=true 和-Dhar.space.replacement參數)。 (2) Sequence file sequence file由一系列的二進制key/value組成,如果為key小文件名,value為文件內容,則可以將大批小文件合並成一個大文件。 Hadoop-0.21.0中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter類進行寫,讀和排序操作。如果hadoop版本低於0.21.0的版本,實現方法可參見[3]。 (3)CombineFileInputFormat CombineFileInputFormat是一種新的inputformat,用於將多個文件合並成一個單獨的split,另外,它會考慮數據的存儲位置。

 hdfs的壓縮算法

1.Gzip壓縮

優點:
(1)壓縮比例比較高,而且壓縮、解壓速度比較快;
(2)hadoop 本身支持,在應用中處理gzip 格式的文件就和直接處理文本一樣;大部分 linux 系統都自帶 gzip 命令,使用方便.
缺點:不支持 split。
應用場景: 當每個文件壓縮之后在 130M 以內的(1 個塊大小內),都可以考慮用 gzip壓縮格式。
2.Bzip2 壓縮

優點:支持 split;具有很高的壓縮率,比 gzip 壓縮率都高; hadoop 本身支持,但不支持 native;在 linux 系統下自帶 bzip2 命令,使用方便。
缺點:壓縮/解壓速度慢;不支持 native。
應用場景: 適合對速度要求不高,但需要較高的壓縮率的時候,可以作為 mapreduce 作業的輸出格式; 或者輸出之后的數據比較大,處理之后的數據需要壓縮存檔減少磁盤空間並且以后數據用得比較少的情況;或者對單個很大的文本文件想壓縮減少存儲空間,同時又需要支持 split,而且兼容之前的應用程序(即應用程序不需要修改)的情況。
3.Lzo 壓縮

優點:壓縮/解壓速度也比較快,合理的壓縮率;支持 split,是 hadoop 中最流行的壓縮格式;可以在 linux 系統下安裝 lzop 命令,使用方便。
缺點:壓縮率比 gzip 要低一些; hadoop 本身不支持,需要安裝;在應用中對 lzo 格式的文件需要做一些特殊處理(為了支持 split 需要建索引,還需要指定 inputformat 為 lzo 格式)。
應用場景: 一個很大的文本文件,壓縮之后還大於 200M 以上的可以考慮,而且單個文件越大, lzo 優點越越明顯。
4.Snappy 壓縮

優點:高速壓縮速度和合理的壓縮率。
缺點:不支持 split;壓縮率比 gzip 要低; hadoop 本身不支持,需要安裝;
應用場景: 當 Mapreduce 作業的 Map 輸出的數據比較大的時候,作為 Map 到 Reduce的中間數據的壓縮格式;或者作為一個 Mapreduce 作業的輸出和另外一個 Mapreduce 作業的輸入。

hdfs什么時候不會去備份

blocksize設置為1的時候

 HDFS寫數據流程

1)客戶端通過Distributed FileSystem模塊向NameNode請求上傳文件,NameNode檢查目標文件是否已存在,父目錄是否存在。
2)NameNode返回是否可以上傳。
3)客戶端請求第一個 block上傳到哪幾個datanode服務器上。
4)NameNode返回3個datanode節點,分別為dn1、dn2、dn3。
5)客戶端通過FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求會繼續調用dn2,然后dn2調用dn3,將這個通信管道建立完成。
6)dn1、dn2、dn3逐級應答客戶端。
7)客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3; 
8)當一個block傳輸完成之后,客戶端再次請求NameNode上傳第二個block的服務器。(重復執行3-7步)。

 HDFS讀數據流程

1)客戶端通過Distributed FileSystem向NameNode請求下載文件,NameNode通過查詢元數據,找到文件塊所在的DataNode地址。
2)挑選一台DataNode(就近原則,然后隨機)服務器,請求讀取數據。
3)DataNode開始傳輸數據給客戶端(從磁盤里面讀取數據輸入流,以packet為單位來做校驗)。
4)客戶端以packet為單位接收,先在本地緩存,然后寫入目標文件。

 NN2NN工作機制

1. 第一階段:NameNode啟動
(1)第一次啟動NameNode格式化后,創建fsimage和edits文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存。
(2)客戶端對元數據進行增刪改的請求。
(3)NameNode記錄操作日志,更新滾動日志。
(4)NameNode在內存中對數據進行增刪改查。
2. 第二階段:Secondary NameNode工作 
 (1)Secondary NameNode詢問NameNode是否需要checkpoint。直接帶回NameNode是否檢查結果。
 (2)Secondary NameNode請求執行checkpoint。
 (3)NameNode滾動正在寫的edits日志。
 (4)將滾動前的編輯日志和鏡像文件拷貝到Secondary NameNode。
 (5)Secondary NameNode加載編輯日志和鏡像文件到內存,並合並。
 (6)生成新的鏡像文件fsimage.chkpoint。
 (7)拷貝fsimage.chkpoint到NameNode。
 (8)NameNode將fsimage.chkpoint重新命名成fsimage。

 DataNode工作機制

1)一個數據塊在DataNode上以文件形式存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。
2)DataNode啟動后向NameNode注冊,通過后,周期性(1小時)的向NameNode上報所有的塊信息。
3)心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如復制塊數據到另一台機器,或刪除某個數據塊。如果超過10分鍾沒有收到某個DataNode的心跳,則認為該節點不可用。
HDFS寫數據流程
[HDFS xiě shùjù liúchéng]
HDFS write data flow


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM