1. 程式人生 > >HDFS特性及簡單命令列使用

HDFS特性及簡單命令列使用

HDFS介紹

HDFS 是 Hadoop Distribute File System 的簡稱,意為:Hadoop 分散式檔案系統。是 Hadoop 核心元件之一,作為最底層的分散式儲存服務而存在。
分散式檔案系統解決的問題就是大資料儲存。它們是橫跨在多臺計算機上的儲存系統。分散式檔案系統在大資料時代有著廣泛的應用前景,它們為儲存和處理超大規模資料提供所需的擴充套件能力。
在這裡插入圖片描述

HDFS的特性

是一個檔案系統,用於儲存檔案,通過統一的名稱空間目錄樹來定位檔案;
是分散式的,由很多伺服器聯合起來實現其功能,叢集中的伺服器有各自的角色。

master/slave 架構

HDFS 採用 master/slave 架構。一般一個 HDFS 叢集是有一個 Namenode 和一定數目的Datanode 組成。Namenode 是 HDFS 叢集主節點,Datanode 是 HDFS 叢集從節點,兩種角色各司其職,共同協調完成分散式的檔案儲存服務。

分塊儲存

HDFS 中的檔案在物理上是分塊儲存(block)的,塊的大小可以通過配置引數來規定,預設大小在 hadoop2.x 版本中是 128M。

名字空間(NameSpace)

HDFS 支援傳統的層次型檔案組織結構。使用者或者應用程式可以建立目錄,然後將檔案儲存在這些目錄裡。檔案系統名字空間的層次結構和大多數現有的檔案系統類似:使用者可以建立、刪除、移動或重新命名檔案。
Namenode 負責維護檔案系統的名字空間,任何對檔案系統名字空間或屬性的修改都將被Namenode 記錄下來。
HDFS 會給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑來訪問檔案,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

Namenode 元資料管理

我們把目錄結構及檔案分塊位置資訊叫做元資料。Namenode 負責維護整個hdfs檔案系統的目錄樹結構,以及每一個檔案所對應的 block 塊資訊(block 的id,及所在的datanode 伺服器)。

Datanode 資料儲存

檔案的各個 block 的具體儲存管理由 datanode 節點承擔。每一個 block 都可以在多個datanode 上。Datanode 需要定時向 Namenode 彙報自己持有的 block資訊。 儲存多個副本(副本數量也可以通過引數設定 dfs.replication,預設是 3)。

副本機制

為了容錯,檔案的所有 block 都會有副本。每個檔案的 block 大小和副本系數都是可配置的。應用程式可以指定某個檔案的副本數目。副本系數可以在檔案建立的時候指定,也可以在之後改變。

一次寫入,多次讀出

HDFS 是設計成適應一次寫入,多次讀出的場景,且不支援檔案的修改。 正因為如此,HDFS 適合用來做大資料分析的底層儲存服務,並不適合用來做.網盤等應用。

hdfs的命令列使用

ls 顯示目錄

hdfs dfs -ls [-R]
用例:hdfs dfs -ls /user/hadoop/file1

mkdir 建立目錄

hdfs dfs -mkdir [-p]
用例:hdfs dfs -mkdir /user/hadoop/dir1 /user/hadoop/dir2

moveFromLocal

hdfs dfs -moveToLocal [-crc]
輸出一個”not implemented“資訊。

moveToLocal

hdfs dfs -moveToLocal [-crc]

mv

hdfs dfs -mv URI [URI …]
用例: hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2
目標檔案不能存在,否則命令不能執行,相當於給檔案重新命名並儲存

put 新增檔案到hdfs

hdfs dfs -put …
從本地檔案系統中複製單個或多個源路徑到目標檔案系統。也支援從標準輸入中讀取輸入寫入目標檔案系統。
• hdfs dfs -put localfile /user/hadoop/hadoopfile
• hdfs dfs -put localfile1 localfile2 /user/hadoop/hadoopdir
• hdfs dfs -put localfile hdfs://nn.example.com/hadoop/hadoopfile
• hdfs dfs -put - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.

cat 檢視檔案內容

hdfs dfs -cat URI [URI …]
將路徑指定檔案的內容輸出到stdout。

cp 複製檔案(夾)

hdfs dfs -cp [-f] [-p | -p[topax]] URI [URI …]
可以覆蓋,可以保留原有許可權資訊。
將檔案從源路徑複製到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。

rm 刪除檔案

刪除指定的檔案。只刪除非空目錄和檔案。
hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI …]

chmod 修改許可權.

hdfs dfs -chmod [-R] <MODE[,MODE]… | OCTALMODE> URI [URI …]

chown 修改所有者

hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]

expunge 清空回收站.

hdfs dfs -expunge

tail

hadoop fs -tail [-f] URI
將檔案尾部1K位元組的內容輸出到stdout。支援-f選項,行為和Unix中一致。

du

hadoop fs -du URI [URI …]
顯示目錄中所有檔案的大小,或者當只指定一個檔案時,顯示此檔案的大小。
示例:

hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://host:port/user/hadoop/dir1