標籤:Distributed File System shell hdfs 分布式 檔案系統
Distributed File SystemHDFS--shell操作 Distributed File System[Distributed File System]概述
資料量越來越多,在一個作業系統管轄的範圍存不下了,那麼就分配到更多的作業系統管理的磁碟中,但是不方便管理和維護,因此迫切需要一種系統來管理多台機器上的檔案,這就是分布式檔案管理系統 。
Distributed File System特點:
是一種允許檔案通過網路在多台主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。
通透性。讓實際上是通過網路來訪問檔案的動作,由程式與使用者看來,就像是訪問本地的磁碟一般。
容錯。即使系統中有某些節點離線,整體來說系統仍然可以持續運作而不會有資料損失。
分布式檔案管理系統很多,hdfs只是其中一種。適用於一次寫入多次查詢的情況,不支援並發寫情況,小檔案不合適。
[形象化的地理解什麼是HDFS 呢?我們可以把HDFS看做是Windows 的檔案系統。在Windows 的檔案系統維護著有一套很多層次的檔案夾目錄,這麼複雜的目錄層次是為了在檔案夾中分門別類的地存放檔案。我們經常做的操作是建立檔案夾、建立檔案、移動檔案、複製檔案、刪除檔案、編輯檔案、尋找檔案等。HDFS 與wWindows中的檔案系統類似,看到的和操作的也類似。讀者可以把HDFS 理解為分Windows 檔案系統。]
HDFS 的shell 操作
既然HDFS 是存取資料的Distributed File System,那麼對HDFS 的操作,就是檔案系統的基本操作,比如檔案的建立、修改、刪除、修改許可權等,檔案夾的建立、刪除、重新命名等。對HDFS 的操作命令類似於lLinux 的shell 對檔案的操作,如ls、mkdir、rm 等
1.對HDFS的操作 hadoop fs xxx
a) Hadoop fs -ls
b) Hadoop fs -lsr#遞迴顯示目錄結構
該命令選項表示遞迴顯示當前路徑的目錄結構,後面跟hdfs 路徑
說明:
中的路徑是hdfs 根目錄,顯示的內容格式與linux 的命令ls –l 顯示的內容格式非常相似,現在下面解析每一行的內容格式:
首字母表示檔案夾(如果是“d”)還是檔案(如果是“-”);
後面的9 位字元表示許可權[類似於Linux];
後面的數字或者“-”表示副本數。如果是檔案,使用數字表示副本數;檔案夾沒有副本;
後面的“root”表示屬主;
後面的“supergroup”表示屬組;
後面的“0”、“4”表示檔案大小,單位是位元組;
後面的時間表示修改時間,格式是年月日時分;
最後一項表示檔案路徑。
注意:
如果該命令選項後面沒有路徑,那麼就會訪問/user/<目前使用者>目錄。如:我們使用root使用者登入,因此會訪問hdfs 的/user/root 目錄.如果沒有目錄/user/root,會提示檔案不存在的錯誤.
a) hadoop fs -mkdir /d1建立空白檔案夾
b) hadoop fs -put abc /d1
如果此時再次執行hadoop fs -put abc /d1,則螢幕會顯示:
並不會預設覆蓋
c) hadoop fs -put abc /d2
由於d2目錄原本是不存在的,所以螢幕顯示
-rw-r--r-- 1 root supergroup 37667 2014-08-07 19:58 /d2
d2乃是一個檔案
d) Hadoop fs -get <Hadoop> <Linux>
下載
e) Hadoop fs -put <Linux> <Hadoop>
hadoop fs -put install.log /d1/NewNameFromInstall.log
hadoop fs -ls /d1
顯示
Found 1 items
-rw-r--r-- 1 root supergroup 37667 2014-08-07 20:05 /d1/NewNameFromInstall.log#上傳並重新命名檔案
f) -du 統計目錄下各檔案大小
顯示指定路徑下的檔案大小,單位是位元組
g) -dus 匯總統計目錄下檔案大小
該命令選項顯示指定路徑的檔案總的大小,單位是位元組
h) -count 統計檔案(夾)數量
顯示指定路徑下的檔案夾數量、檔案數量、檔案總大小資訊
i) -mv 移動
該命令選項表示移動hdfs 的檔案到指定的hdfs 目錄中。後面跟兩個路徑,第一個表示源檔案,第二個表示目的目錄。
j) -cp 複製
複製hdfs 指定的檔案到指定的hdfs 目錄中。後面跟兩個路徑,第一個是被複製的檔案,第二個是目的地。
k) -rm 刪除檔案/空白檔案夾
刪除指定的檔案或者空目錄,不能刪除非空目錄。
l) -rmr 遞迴刪除
遞迴刪除指定目錄下的所有子目錄和檔案
m) -copyFromLocal 從本地複製
操作與-put 一致
n) -moveFromLocal 從本地移動
該命令表示把檔案從linux 上移動到hdfs 中
o) getmerge 合并到本地
把hdfs 指定目錄下的所有檔案內容合并到本地linux 的檔案中,
a) -cat/-text 查看檔案內容
b) -setrep 設定副本數量
修改已儲存檔案的副本數量,後面跟副本數量,再跟檔案路徑
多了兩個副本,HDFS 會自動執行檔案的複製工作,產生新的副本。
如果最後的路徑表示檔案夾,那麼需要跟選項-R,表示對檔案夾中的所有檔案都修改副本。
hadoop fs -setrep -R 4 /d1
還有一個選項是-w,表示等待副本操作結束才退出命令.
hadoop fs -setrep -R -w 1 /d1
c) -touchz 建立空白檔案
d) -help 協助
顯示協助資訊,後面跟上需要查詢的命令選項即可,如:
hadoop fs -help rm
注意:該命令選項顯示的內容並非完全準確,比如查詢count 的結果就不準確,而是把所有命令選項的用法都顯示出來
1.執行hadoop[後面什麼也不寫],可以查看Hadoop可以支援的命令有哪些
2.執行hadoop fs[後面什麼也不寫],可以查看Hadoop HDFS可以支援的命令有哪些
HDFS-shell命令完整的寫法
Hadoop fs -ls hdfs://hadoop:9000/
作用於Hadoop fs -ls /相同
原理:
在安裝Hadoop時,我們曾經修改過一個core-site.xml檔案,其中
<name>fs.default.name</name>
<value>hdfs://hadoop:9000</value>
fs.default.name的屬性值就代表為HDFS的路徑,為hdfs://hadoop:9000