注意:訪問hdfs系統的指令
hadoop dfs --- 已過時
hadoop fs -- 使用范圍更大
hdfs dfs --范圍相對較小
hadoop fs 和 hdfs dfs之間沒有太大的區別
1. 在命令行中輸入hdfs,回車后,就會提示hdfs后可以使用哪些命令,其中有一個是dfs。
2. 在命令行中輸入hdfs dfs,回車后,就會提示dfs后可以添加的一些常用shell命令
常用shell命令
注意:分布式文件系統的路徑在命令行中 要從/開始寫,即絕對路徑
1. 創建目錄
[-mkdir [-p]...]#在分布式文件系統上創建目錄 -p,多層級創建
調用格式:hdfs dfs -mkdir(-p) /目錄
2. 上傳指令
[-put [-f] [-p] [-l]...] #將本地文件系統的文件上傳到分布式文件系統
調用格式:hdfs dfs -put/本地文件 /hadoop
注意:
1)/hadoop是hdfs上面的路徑的減縮版,全稱是:hdfs://namenode的名字:分布式文件系統的端口號/hadoop 例如:hdfs://master:9000/hadoop
2)hadoop作為文件,在操作之前是可以不存在的.
[-moveFromLocal...]#將本地文件系統的文件上傳到分布式文件系統
調用格式:同put
注意:這里是將本地文件剪切到分布式文件系統
[-copyFromLocal [-f] [-p] [-l]...]
調用格式:同put
注意:這里是將本地文件拷貝到分布式文件系統
3. 查看指令
[-ls [-d] [-h] [-R] [...]]#查看分布式文件系統的目錄里內容
調用格式:hdfs dfs -ls/
[-cat [-ignoreCrc]...] #查看分布式文件系統的文件內容
調用格式:hdfs dfs -cat/xxx.txt
[-tail [-f]]#查看分布式文件系統的文件內容
調用格式:hdfs dfs -tail/xxx.txt
注意:默認最多查看1000行
4. 下載指令
[-copyToLocal [-p] [-ignoreCrc] [-crc]...]
調用格式:hdfs dfs -copyToLocal/hdfs上的路徑 /本地路徑 例如:hdfs dfs -copyToLocal/hadoop /root/hadooptest
注意:
1)本地路徑的文件夾可以不存在
2)這里是將hadoop整體拷貝到線下路徑中
[-moveToLocal]
注意:從hdfs的某個路徑將數據剪切到本地,已經被遺棄了.不能使用.
[-get [-p] [-ignoreCrc] [-crc]...]
調用格式:同copyToLocal
5. 刪除指令
[-rm [-f] [-r|-R] [-skipTrash]...]
調用格式:hdfs dfs -rm-r/hadoop
注意:如果刪除文件夾需要加-r
[-rmdir [--ignore-fail-on-non-empty]
調用格式:hdfs dfs -rmdir/hadoop
注意:hadoop必須是空文件夾,如果非空必須使用rm刪除
6. 查看磁盤利用率和文件大小
[-df [-h] [...]] 查看分布式系統的磁盤使用情況
調用格式:hdfs dfs -df/
[-du [-s] [-h]...]#查看分布式系統上當前路徑下文件的情況-h:human 以人類可讀的方式顯示
調用格式:hdfs dfs -du/hadoop
7. 向分布式文件系統中的文件里追加內容
[-appendToFile...]
調用格式:hdfs dfs -appendToFile本地文件 hdfs上的文件
注意:不支持在中間隨意增刪改操作
8. 修改權限的,跟本地的操作一致,-R是讓子目錄或文件也進行相應的修改
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <mode[,mode]... octalmode="" |="">PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
9. 修改文件的副本數
[-setrep [-R] [-w]...]
調用格式:hadoop fs -setrep 3/ 將hdfs根目錄及子目錄下的內容設置成3個副本
注意:當設置的副本數量與初始化時默認的副本數量不一致時,集群會作出反應,比原來多了會自動進行復制.
10. 查看文件的狀態
hdfs dfs [generic options] -stat[format]...
命令的作用:當向hdfs上寫文件時,可以通過dfs.blocksize配置項來設置文件的block的大小。這就導致了hdfs上的不同的文件block的大小是不相同的。有時候想知道hdfs上某個文件的block大小,可以預先估算一下計算的task的個數。stat的意義:可以查看文件的一些屬性。
調用格式:hdfs dfs -stat[format] 文件路徑
format的形式:
%b:打印文件的大小(目錄大小為0)
%n:打印文件名
%o:打印block的size
%r:打印副本數
%y:utc時間 yyyy-MM-dd HH:mm:ss
%Y:打印自1970年1月1日以來的utc的微秒數
%F:目錄打印directory,文件打印regular file
注意:
1)當使用-stat命令但不指定format時,只打印創建時間,相當于%y
2)-stat 后面只跟目錄,%r,%o等打印的都是0,只有文件才有副本和大小
11. 測試
hdfs dfs [generic options] -test-[defsz]
參數說明: -e:文件是否存在 存在返回0 -z:文件是否為空 為空返回0 -d:是否是路徑(目錄) ,是返回0
調用格式:hdfs dfs -test-d文件
實例:hdfs dfs -test-d/shelldata/111.txt && echo"OK"|| echo"no"
解釋:測試當前的內容是否是文件夾 ,如果是返回ok,如果不是返回no
12. 創建空文件
hdfs dfs [generic options] -touchz...
調用格式:hdfs dfs touchz /hadooptest.txt
13. 顯示當前文件夾及子文件夾的數量 子文件的數量以及 總大小
hdfs dfs [generic options] -count[-q] [-h]...
調用格式:hdfs dfs -count /hadoop
14. 合并下載
hdfs dfs [generic options] -getmerge[-nl]
調用格式:hdfs dfs -getmergehdfs上面的路徑 本地的路徑
實例:hdfs dfs -getmergo/hadoopdata/*.xml /root/test.test
15. 移動hdfs中的文件(更名)
hdfs dfds [generic options] -mv...
調用格式:hdfs dfs -mv/hdfs的路徑1 /hdfs的另一個路徑2
實例:hfds dfs -mv/aaa /bbb 這里是將aaa整體移動到bbb中
16. 復制hdfs中的文件到hdfs的另一個目錄
hdfs dfs [generic options] -cp[-f] [-p | -p[topax]]...
調用格式:hdfs dfs -cp/hdfs路徑_1 /hdfs路徑_2
17.設置Hadoop回收站trash: 當我們不小心刪掉文件時,還有后悔藥吃.
17.1 修改conf/core-site.xml文件
注意:我們需要在namenode和datanode同時設置垃圾回收,如果namenode可以使用,
datanode 的無效,如果namenode的失效了,會自動調用datanode的設置
<property>
<name>fs.trash.interval</name>
<!-- 1440分鐘后檢查點會被清除,如果為0,垃圾回收站不會啟用. -->
<value>1440</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
</property>
解釋:
一:檢查點:
執行下面的語句后出現的.Trash/190907043825就是檢查點
[root@master sbin]# hadoop fs -ls /user/root/.Trash/
19/09/07 05:15:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable
Found 2items
drwx------ -root supergroup 02019-09-0704:36 /user/root/.Trash/190907043825
drwx------ -root supergroup 02019-09-0705:15 /user/root/.Trash/Current
二:fs.trash.interval
分鐘數,當超過這個分鐘數后檢查點會被刪除。如果為零,回收站功能將被禁用。默認是0.單位分鐘。這里我設置的是1天(60*24)
刪除數據rm后,會將數據move到當前文件夾下的.Trash/current目錄
三:fs.trash.checkpoint.interval
檢查點創建的時間間隔(單位為分鐘)。其值應該小于或等于fs.trash.interval。如果為零,則將該值設置為fs.trash.interval的值。
四:刪除過程分析
這里的Deletion interval表示檢查點刪除時間間隔(單位為分鐘)
這里的Emptier interval表示在運行線程來管理檢查點之前,NameNode需要等待多長時間(以分鐘為單位),即檢查點創建時間間隔.NameNode刪除超過fs.trash.interval的檢查點,并為/user/${username}/.Trash/Current創建一個新的檢查點。該頻率由fs.trash.checkpoint.interval的值確定,且不得大于Deletion interval。這確保了在emptier窗口內回收站中有一個或多個檢查點。
[root@master sbin]# hadoop fs -rm -r /hadoop4.txt
19/09/07 05:15:24 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval =1440minutes, Emptier interval =0minutes.
Moved: 'hdfs://master:9000/hadoop4.txt'to trash at: hdfs://master:9000/user/root/.Trash/Current
例如:
fs.trash.interval =120(deletion interval =2hours)
fs.trash.checkpoint.interval =60(emptier interval =1hour)
說明:
這導致NameNode為Current目錄下的垃圾文件每小時創建一個新的檢查點,并刪除已經存在超過2個小時的檢查點。
在回收站生命周期結束后,NameNode從HDFS命名空間中刪除該文件。刪除文件會導致與文件關聯的塊被釋放。請注意,用戶刪除文件的時間與HDFS中相應增加可用空間的時間之間可能存在明顯的時間延遲,即用戶刪除文件,HDFS可用空間不會立馬增加,中間有一定的延遲。
五:expunge 清空回收站
要想使用這個命令,首先得有回收站,即fs.trash.interval的值不能為0
當我們執行expunge命令時,其實是會立刻創建一個新的檢查點,并將/.Trash/Current中的內容立刻放入這個檢查點.
實例: [root@master sbin]# hadoop fs -expunge
19/09/07 05:15:58 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval =1440minutes, Emptier interval =0minutes.
19/09/07 05:15:58 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/190907051558
六:如果想繞過垃圾回收站并立即從文件系統中刪除文件。可以執行 hadoop fs -rm-skipTrash
[root@master sbin]# hadoop fs -rm -skipTrash /hadoop111.txt
19/09/07 05:50:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable
Deleted /hadoop111.txt
17.2.測試
1)新建目錄input
[root@master:/data/soft]# hadoop fs -mkdir /input
2)上傳文件
[root@master:/data/soft]# hadoop fs -copyFromLocal /data/soft/file0* /input
3)刪除目錄input
[root@master data]# hadoop fs -rmr /input
Moved to trash: hdfs://master:9000/user/root/input
4)參看當前目錄
[root@master data]# hadoop fs -ls
Found 2items
drwxr-xr-x -root supergroup 02011-02-1222:17 /user/root/.Trash
發現input刪除,多了一個目錄.Trash
5)恢復剛剛刪除的目錄
[root@master data]# hadoop fs -mv /user/root/.Trash/Current/user/root/input /user/root/input
6)檢查恢復的數據
[root@master data]# hadoop fs -ls input
Found 2items
-rw-r--r--3root supergroup 222011-02-1217:40 /user/root/input/file01
-rw-r--r--3root supergroup 282011-02-1217:40 /user/root/input/file02
7)刪除.Trash目錄(清理垃圾)
[root@master data]# hadoop fs -rmr .Trash
Deleted hdfs://master:9000/user/root/.Trash