天天看點

hadoop fs –ls /hbase 無内容_Hadoop學習---HDFS的常用shell指令詳解

hadoop fs –ls /hbase 無内容_Hadoop學習---HDFS的常用shell指令詳解

注意:通路hdfs系統的指令

hadoop dfs --- 已過時
hadoop fs -- 使用範圍更大
hdfs dfs --範圍相對較小

hadoop fs 和 hdfs dfs之間沒有太大的差別

1. 在指令行中輸入hdfs,回車後,就會提示hdfs後可以使用哪些指令,其中有一個是dfs。
2. 在指令行中輸入hdfs dfs,回車後,就會提示dfs後可以添加的一些常用shell指令
           

常用shell指令

注意:分布式檔案系統的路徑在指令行中 要從/開始寫,即絕對路徑
​
1. 建立目錄

[-mkdir [-p] <path> ...]#在分布式檔案系統上建立目錄 -p,多層級建立
調用格式:hdfs dfs -mkdir(-p) /目錄

2. 上傳指令

[-put [-f] [-p] [-l] <localsrc> ... <dst>]   #将本地檔案系統的檔案上傳到分布式檔案系統
調用格式:hdfs dfs -put/本地檔案 /hadoop

注意:
1)/hadoop是hdfs上面的路徑的減縮版,全稱是:hdfs://namenode的名字:分布式檔案系統的端口号/hadoop           例如:hdfs://master:9000/hadoop  
2)hadoop作為檔案,在操作之前是可以不存在的.
​
[-moveFromLocal <localsrc> ... <dst>]#将本地檔案系統的檔案上傳到分布式檔案系統
調用格式:同put

注意:這裡是将本地檔案剪切到分布式檔案系統
​
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
調用格式:同put

注意:這裡是将本地檔案拷貝到分布式檔案系統

3. 檢視指令

[-ls [-d] [-h] [-R] [<path> ...]]#檢視分布式檔案系統的目錄裡内容
調用格式:hdfs dfs -ls/

[-cat [-ignoreCrc] <src> ...]  #檢視分布式檔案系統的檔案内容
調用格式:hdfs dfs -cat/xxx.txt

[-tail [-f] <file>]#檢視分布式檔案系統的檔案内容
調用格式:hdfs dfs -tail/xxx.txt

注意:預設最多檢視1000行

4. 下載下傳指令

[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
調用格式:hdfs dfs -copyToLocal/hdfs上的路徑   /本地路徑   例如:hdfs dfs -copyToLocal/hadoop /root/hadooptest

注意:
1)本地路徑的檔案夾可以不存在
2)這裡是将hadoop整體拷貝到線下路徑中
​
[-moveToLocal <src> <localdst>]

注意:從hdfs的某個路徑将資料剪切到本地,已經被遺棄了.不能使用.
​
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
調用格式:同copyToLocal
​
5. 删除指令

[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
調用格式:hdfs dfs -rm-r/hadoop

注意:如果删除檔案夾需要加-r

[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
調用格式:hdfs dfs -rmdir/hadoop
注意:hadoop必須是空檔案夾,如果非空必須使用rm删除

6. 檢視磁盤使用率和檔案大小

[-df [-h] [<path> ...]] 檢視分布式系統的磁盤使用情況
調用格式:hdfs dfs -df/

[-du [-s] [-h] <path> ...]#檢視分布式系統上目前路徑下檔案的情況-h:human 以人類可讀的方式顯示
調用格式:hdfs dfs -du/hadoop
​
7. 向分布式檔案系統中的檔案裡追加内容

[-appendToFile <localsrc> ... <dst>]
調用格式: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] <rep> <path> ...]
調用格式:hadoop fs -setrep 3/   将hdfs根目錄及子目錄下的内容設定成3個副本

注意:當設定的副本數量與初始化時預設的副本數量不一緻時,叢集會作出反應,比原來多了會自動進行複制.

10. 檢視檔案的狀态

hdfs dfs [generic options] -stat[format] <path> ...
指令的作用:當向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] <path>    
參數說明: -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<path> ...   
調用格式:hdfs dfs touchz /hadooptest.txt

13. 顯示目前檔案夾及子檔案夾的數量   子檔案的數量以及 總大小

hdfs dfs [generic options] -count[-q] [-h] <path> ...   
調用格式:hdfs dfs  -count  /hadoop

14. 合并下載下傳

hdfs dfs [generic options] -getmerge[-nl] <src> <localdst>
調用格式:hdfs dfs -getmergehdfs上面的路徑   本地的路徑    

執行個體:hdfs dfs -getmergo/hadoopdata/*.xml /root/test.test

15. 移動hdfs中的檔案(更名)

hdfs dfds [generic options] -mv<src> ... <dst>   
調用格式: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]] <src> ... <dst>
調用格式: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就是檢查點
[[email protected] 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視窗内資源回收筒中有一個或多個檢查點。

[[email protected] 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中的内容立刻放入這個檢查點.
執行個體: [[email protected] 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

[[email protected] 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

[[email protected]:/data/soft]# hadoop fs -mkdir /input
​
2)上傳檔案

[[email protected]:/data/soft]# hadoop fs -copyFromLocal /data/soft/file0* /input
​
3)删除目錄input

[[email protected] data]# hadoop fs -rmr /input 
Moved to trash: hdfs://master:9000/user/root/input
​
4)參看目前目錄

[[email protected] data]# hadoop fs -ls 
Found 2items 
drwxr-xr-x -root supergroup 02011-02-1222:17 /user/root/.Trash
發現input删除,多了一個目錄.Trash
​
5)恢複剛剛删除的目錄

[[email protected] data]# hadoop fs -mv /user/root/.Trash/Current/user/root/input /user/root/input
​
6)檢查恢複的資料

[[email protected] 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目錄(清理垃圾)

[[email protected] data]# hadoop fs -rmr .Trash 
Deleted hdfs://master:9000/user/root/.Trash