1. 程式人生 > 實用技巧 >HDFS學習記錄

HDFS學習記錄

1、HDFS只是分散式檔案管理系統的一種。

2、HDFS (Hadoop Distributed File System),它是一個檔案系統,用於儲存檔案,通過目錄樹
來定位檔案;其次,它是分散式的,由很多伺服器聯合起來實現其功能,叢集中的伺服器有各
自的角色。
HDFS的使用場景:適合-一次寫入,多次讀出的場景,且不支援檔案的修改。適合用來做數
據分析,並不適合用來做網盤應用。

3、HDFS的優點:

高容錯性(資料自動儲存多個副本,通過增加副本的形式來提高容錯性,當一個副本丟失的時候回自動回覆)

適合處理大資料:(資料規模:能夠處理資料規模達到GB、TB、甚至PB級別的資料; .檔案規模:能夠處理百萬規模以上的檔案數量,數量相當之大。)

可以構建在聯機的機器上。通過多副本機制,提高可靠性

4、HDFS的缺點:

不適合低延時資料訪問,比如毫秒級的儲存資料,是做不到的。

無法高效的對大量小檔案進行儲存。(儲存大量小檔案的話,它會佔用NameNode大量的記憶體來儲存檔案目錄和塊資訊。這樣是不可取的,因為NameNode的記憶體總是有限的;小檔案儲存的定址時間會超過讀取時間,它違反了HDFS的設計目標。)

不支援併發寫入,不允許隨機修改(一個檔案只能有一個寫,不允許多個執行緒同時寫,僅支援資料append不支援檔案的隨機修改)

5、HDFS的組成架構:

Namenode就是master他的主管、管理者(管理HDFS的名稱空間、配置副本策略、管理資料塊、對映資訊、處理客戶端讀寫請求)

Datanode就是slave,namenode下達命令DataNode執行命令(儲存實際的資料塊、執行資料塊的讀寫操作)

client就是客戶端:(檔案切分。檔案上傳HDFS的時候, Client將檔案切分成- -個- 一個的Block,然後進行上傳;與NarneNode互動, 獲取檔案的位置資訊;與DataNode互動, 讀取或者寫入資料;Client提供一 些命令來管理HDFS ,比如NameNode格式化;Client可以通討一 些命今來訪問HDFS .比如對HDFS增刪吉改操作:

Secondauy NameNode:並非NameNode的熱備。當NameNode掛掉的時候, 它並不

能馬_上替換NameNode並提供服務。(輔助NameNode, 分擔其工作量,比如定期合併F simage和Edits,並推送給N ameNode ;在緊急情況下,可輔助恢復NameNode。

6、HDFS檔案塊的大小:

HDFS中的檔案在物理上是分塊儲存( Block)塊的大小可以通過配置引數( dfs.blocksize)來規定,預設大小在Hadoop2.x版本中是128M,老版本中是64M。(HDFS的塊設定太小,會增加定址時間,程式-直在找塊的開始位置)(如果塊設定的太大,從磁碟傳輸資料的時間會明顯大於定位這個塊開始位置所需的時間。導致程式在處理這塊資料時,會非常慢。

7、HDFS的SHELL操作基本語法

8、命令大全:

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs

[-appendToFile <localsrc> ... <dst>]
        [-cat [-ignoreCrc] <src> ...]
        [-checksum <src> ...]
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-copyFromLocal [-f] [-p] <localsrc> ... <dst>]
        [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        [-count [-q] <path> ...]
        [-cp [-f] [-p] <src> ... <dst>]
        [-createSnapshot <snapshotDir> [<snapshotName>]]
        [-deleteSnapshot <snapshotDir> <snapshotName>]
        [-df [-h] [<path> ...]]
        [-du [-s] [-h] <path> ...]
        [-expunge]
        [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        [-getfacl [-R] <path>]
        [-getmerge [-nl] <src> <localdst>]
        [-help [cmd ...]]
        [-ls [-d] [-h] [-R] [<path> ...]]
        [-mkdir [-p] <path> ...]
        [-moveFromLocal <localsrc> ... <dst>]
        [-moveToLocal <src> <localdst>]
        [-mv <src> ... <dst>]
        [-put [-f] [-p] <localsrc> ... <dst>]
        [-renameSnapshot <snapshotDir> <oldName> <newName>]
        [-rm [-f] [-r|-R] [-skipTrash] <src> ...]
        [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
        [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
        [-setrep [-R] [-w] <rep> <path> ...]
        [-stat [format] <path> ...]
        [-tail [-f] <file>]
        [-test -[defsz] <path>]
        [-text [-ignoreCrc] <src> ...]
        [-touchz <path> ...]
        [-usage [cmd ...]]

大概的流向圖:(put和copyfromlocal一樣)(get和copytolocal一樣)(tail - f進行內容追加)