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