1. 程式人生 > >HDFS v1.0學習筆記

HDFS v1.0學習筆記

alt form 技術分享 nor 架構 mas 處理 block 參考資料

hdfs是一個用於存儲大文件的分布式文件系統,是apache下的一個開源項目,使用java實現。它的設計目標是可以運行在廉價的設備上,運行在大多數的系統平臺上,高可用,高容錯,易於擴展。

適合場景

  • 存儲大文件:G級別或者以上
  • 離線數據分析
  • 非結構化數據
  • 一次寫多次讀

不適合的場景

  • 存儲小文件
  • 文件需要修改(hdfs只能追加,如果需要修改,刪除後,再重新上傳)
  • 低延遲服務
  • 多用戶寫
  • 大量隨機讀

整體架構

技術分享圖片

各組件含義以及關系

組件 含義 備註
NameNode 名字節點,Master節點,仲裁者 管理和存儲命名空間元數據信息,維護文件路徑和block的映射,維護block和DataNode節點的映射,根據制定的策略和集群DataNode節點情況確定block數據真實存儲的數據節點列表,維護和監控已存在的block列表,根據實際情況指示數據節點增刪block,負責客戶端文件元數據的請求響應
SecondaryNameNode 輔助名字節點的節點 負責維護NameNode元數據的鏡像文件fsimage,周期性的合並NameNode產生的事物日誌(edit log)到自己的fsimage,並且回寫到NameNode節點,保證NameNode節點的鏡像文件不會非常過時
DataNode 數據節點 按塊存儲真實的文件數據,周期性的發送心跳包到NameNode,告知相關狀態信息(heartbeat)以及上報塊列表信息(安全模式下),負責客戶端數據的讀取和寫入,負責處理NameNode發出的指令,負責數據節點間塊數據的同步
Client 客戶端 負責發起讀寫請求,負責數據完整性效驗,寫數據時,負責根據相關配置切割數據,然後分塊上傳到指定的節點,提供的客戶端類型有:shell,java api,c api, web ui,http接口

副本存儲策略

采用機架感知策略,兼顧性能和容災的平衡。通過dfs.replication配置block副本數,一般設置3個。如果是三個副本具體怎麽確定單個數據塊的存儲位置呢?采用如下方式:以客戶端所在的數據節點為第一個副本的節點(如果客戶端在集群外,則隨機選擇一個數據節點),從另外一個機架隨機選擇一個節點作為第二個副本的存儲節點,從第二個節點所在的機架隨機選擇一個數據節點存儲第三個副本。

讀數據流程

  • dfs客戶端向NameNode發起讀文件請求,檢查是否有權限,如果有訪問權限,返回文件block所在節點列表(根據近地原則返回)
  • 根據返回的數據節點列表,並發發起獲取文件數據請求,對返回數據按切割的塊進行完整性效驗,最後合並數據成一個文件,保存到本地

寫數據流程

  • dfs客戶端向NameNode發起寫文件請求,檢查是否有寫權限,如果有權限,NameNode根據制定的策略和數據節點的狀態情況確定block存儲的數據節點列表,然後返回給客戶端
  • dfs客戶端對本地文件按塊規則進行切分,每一個數據塊上傳到指定的數據節點。對數據塊進一步切割成更小的塊,帶上完整性效驗碼,一塊接著一塊上傳到數據節點。
  • 數據節點之間互相拷貝數據,一個小塊接著一個小塊數據在節點之間傳輸,收到小塊數據後,進行完整性效驗,節點之間類似管道一樣傳輸數據
  • 當數據傳輸完成,dfs客戶端告知NameNode完成,NameNode落地這次修改的事物日誌(通過NameNode上報),同時更新內存中元數據信息

數據完整性

  • 讀寫文件效驗碼(crc32)驗證
  • DataNode啟動一個DataBlockScanner線程周期性掃描block是否損壞

啟動流程

通過腳本啟動集群中所有的節點,整個集群進入安全模式(safe mode),安全模式下只能讀不能寫。NameNode讀取元數據鏡像文件(fsimage)以及合並為合並過的事物日誌文件(edit log),然後產生一個最新的fsimage文件並覆蓋到本地硬盤,並且清空事物日誌文件。NameNode啟動完成後,等待DataNode上報塊列表信息。綜合上報的信息,檢查集群是否健康,上報的可用塊列表信息中是否達到了最小健康標準百分比(通過一個配置設置,默認是90%),如果未達到,會一直處在安全模式。如果有塊數據丟失,從新指示某機器復制副本,以達到副本數的要求。如果配置副本數有更改,則根據要求自動增刪副本。當判斷集群處於健康狀態時,等待30秒左右,集群退出安全模式,進入可服務狀態。

分布式文件系統以及權限

  • 類似於linux文件系統,也是一個樹狀結構
  • 類似於linux文件系統,只有讀寫權限
  • 啟動服務的用戶默認屬於集群超級用戶組,擁有所有的權限
  • 上傳和創建目錄時,文件用戶歸屬和組歸屬是當前用戶和當前用戶所在的組
  • 刪除有回收站模式,防止文件會被誤刪,刪除時會移動到集群/trash目錄,超過有效期,會定時刪除,此功能默認是關閉的,需要通過配置打開

客戶端 - WEB UI

只能查看

默認地址是:http://master:50070

客戶端 - Shell

通過 hadoop fs 命令 參數 方式啟動

顯示幫助信息

[wadeyu@master ~]$ hadoop fs -help
hadoop fs is the command to execute fs commands. The full syntax is: 

hadoop fs [-fs <local | file system URI>] [-conf <configuration file>]
        [-D <property=value>] [-ls <path>] [-lsr <path>] [-du <path>]
        [-dus <path>] [-mv <src> <dst>] [-cp <src> <dst>] [-rm [-skipTrash] <src>]
        [-rmr [-skipTrash] <src>] [-put <localsrc> ... <dst>] [-copyFromLocal <localsrc> ... <dst>]
        [-moveFromLocal <localsrc> ... <dst>] [-get [-ignoreCrc] [-crc] <src> <localdst>
        [-getmerge <src> <localdst> [addnl]] [-cat <src>]
        [-copyToLocal [-ignoreCrc] [-crc] <src> <localdst>] [-moveToLocal <src> <localdst>]
        [-mkdir <path>] [-report] [-setrep [-R] [-w] <rep> <path/file>]
        [-touchz <path>] [-test -[ezd] <path>] [-stat [format] <path>]
        [-tail [-f] <path>] [-text <path>]
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-chgrp [-R] GROUP PATH...]
        [-count[-q] <path>]
        [-help [cmd]]

列出/目錄下所有的文件

[wadeyu@master ~]$ hadoop fs -ls /
Found 22 items
-rw-r--r--   2 root   supergroup     632207 2018-09-03 18:16 /The_Man_of_Property.txt
-rw-r--r--   2 root   supergroup        495 2018-09-04 10:54 /a.txt
-rw-r--r--   2 root   supergroup        404 2018-09-04 10:54 /b.txt
-rw-r--r--   2 root   supergroup       2541 2018-09-04 12:48 /cookie_ip.txt
-rw-r--r--   2 root   supergroup   12224421 2018-09-04 12:48 /ip.lib.txt
drwxr-xr-x   - root   supergroup          0 2018-09-03 12:59 /output
drwxr-xr-x   - root   supergroup          0 2018-09-03 19:29 /output_cachearchive_result
drwxr-xr-x   - root   supergroup          0 2018-09-03 18:47 /output_cachefile_result
drwxr-xr-x   - root   supergroup          0 2018-09-04 09:36 /output_compresss_result
drwxr-xr-x   - root   supergroup          0 2018-09-04 09:44 /output_decompress_cat
drwxr-xr-x   - root   supergroup          0 2018-09-04 10:03 /output_decompress_cat2
drwxr-xr-x   - root   supergroup          0 2018-09-03 18:48 /output_file_result
drwxr-xr-x   - root   supergroup          0 2018-09-04 12:49 /output_ip_lib
drwxr-xr-x   - root   supergroup          0 2018-09-04 11:41 /output_sort_multi_reduce
drwxr-xr-x   - root   supergroup          0 2018-09-04 10:55 /output_sort_one_reduce
-rw-r--r--   3 root   supergroup        847 2018-09-01 11:44 /passwd
drwxr-xr-x   - root   supergroup          0 2018-09-04 09:13 /test
-rw-r--r--   3 root   supergroup          0 2018-09-01 20:03 /test.txt
drwxr-xr-x   - root   supergroup          0 2018-09-04 09:12 /usr
-rw-r--r--   2 root   supergroup        165 2018-09-03 19:11 /w.tar.gz
drwxr-xr-x   - wadeyu wadeyu              0 2018-09-04 21:03 /wadeyu
-rw-r--r--   2 root   supergroup         24 2018-09-03 18:36 /white_list

顯示/a.txt文件內容

[wadeyu@master ~]$ hadoop fs -cat /a.txt | head -1
1       hadoop

# 如果是壓縮文件,會解壓後再輸出

[wadeyu@master ~]$ hadoop fs -text /a.txt | head -1   
1       hadoop

刪除/test.txt文件

[root@master wadeyu]# hadoop fs -rmr -skipTrash /test.txt
Deleted hdfs://192.168.1.15:9000/test.txt

參考資料

【0】八鬥學院內部hdfs學習資料
【1】HDFS Architecture Guide
http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html

HDFS v1.0學習筆記