天天看點

HDFS檔案系統指令詳解

【fs最常用指令】

<code>bin/hadoop fs -ls hdfs_path    </code><code>//檢視HDFS目錄下的檔案和子目錄</code>

<code>bin/hadoop fs -mkdir hdfs_path    </code><code>//在HDFS上建立檔案夾</code>

<code>bin/hadoop fs -rm hdfs_path    </code><code>//删除HDFS上的檔案</code>

<code>bin/hadoop fs -rmr hdfs_path    </code><code>//删除HDFS上的檔案夾</code>

<code>bin/hadoop fs -put local_file hdfs_path    </code><code>//将本地檔案copy到HDFS上</code>

<code>bin/hadoop fs -get hdfs_file local_path    </code><code>//複制HDFS檔案到本地</code>

<code>bin/hadoop fs -cat hdfs_file    </code><code>//檢視HDFS上某檔案的内容</code>

【檢視目錄下檔案(夾)大小】

<code>//機關Byte:</code>

<code>bin/hadoop fs -du / | sort -n</code>

<code>//機關MB:</code>

<code>bin/hadoop fs -du / | awk -F </code><code>' '</code>  <code>'{printf "%.2fMB\t\t%s\n", $1/1024/1024,$2}'</code> <code>| sort -n</code>

<code>//機關GB,大于1G:</code>

<code>bin/hadoop fs -du / | awk -F </code><code>' '</code>  <code>'{num=$1/1024/1024/1024; if(num&gt;1){printf "%.2fGB\t\t%s\n", num, $2} }'</code> <code>| sort -n</code>

以下内容walker摘自《Hadoop實戰(第二版)》(陸嘉恒)第九章-HDFS詳解。

  fs可以說是HDFS最常用的指令,這是一個高度類似linux檔案系統的指令集。你可以使用這些指令檢視HDFS上的目錄結構檔案、上傳和下載下傳檔案、建立檔案夾、複制檔案等。其使用方法如下:

<code>hadoop fs [genericOpitions]</code>

<code>[-ls &lt;path&gt;]  </code><code>//顯示目标路徑目前目錄下的所有檔案</code>

<code>[-lsr &lt;path&gt;]  </code><code>//遞歸顯示目标路徑下的所有目錄及檔案(深度優先)</code>

<code>[-du &lt;path&gt;]  </code><code>//以位元組為機關顯示目錄中所有檔案的大小,或該檔案的大小(如果path為檔案)</code>

<code>[-dus &lt;paht&gt;]  </code><code>//以位元組為機關顯示目标檔案大小(用于檢視檔案夾大小)</code>

<code>[-count [-q] &lt;path&gt;]  </code><code>//将目錄的大小、包含檔案(包括檔案)個數的資訊輸出到螢幕(标準stdout)</code>

<code>[-mv &lt;src&gt; &lt;dst&gt;]  </code><code>//把檔案或目錄移動到目标路徑,這個指令允許同時移動多個檔案,但是隻允許移動到一個目标路徑中,參數中的最有一個檔案夾即為目标路徑</code>

<code>[-cp &lt;src&gt; &lt;dst&gt;]  </code><code>//複制檔案或目錄到目标路徑,這個指令允許同時複制多個檔案,如果複制多個檔案,目标路徑必須是檔案夾</code>

<code>[-rm [-skipTrash] &lt;path&gt;]  </code><code>//删除檔案,這個指令不能删除檔案夾</code>

<code>[-rmr [-skipTrash] &lt;path&gt;]  </code><code>//删除檔案夾及其下的所有檔案</code>

<code>[-expunge]</code>

<code>[-put &lt;localsrc&gt; ... &lt;dst&gt;]  </code><code>//從本地檔案系統上傳檔案到HDFS中</code>

<code>[-copyFromLocal &lt;localsrc&gt; ... &lt;dst&gt;]  </code><code>//與put相同</code>

<code>[-moveFromLocal &lt;localsrc&gt; ... &lt;dst&gt;]  </code><code>//與put相同,但是檔案上傳之後會從本地檔案系統中移除</code>

<code>[-get [-ignoreCrc] [-crc] &lt;src&gt; &lt;localdst&gt;]  </code><code>//複制檔案到本地檔案系統。這個指令可以選擇是否忽視校驗和,忽視校驗和和下載下傳主要用于挽救那些已經發生錯誤的檔案</code>

<code>[-getmerge &lt;src&gt; &lt;localdst&gt; [addnl]]  </code><code>//将源目錄中的所有檔案進行排序并寫入目标檔案中,檔案之間以換行符分隔</code>

<code>[-cat &lt;src&gt;]  </code><code>//在終端顯示(标準輸出stdout)檔案中的内容,類似Linux系統中的cat</code>

<code>[-text &lt;src&gt;]</code>

<code>[-copyToLocal [-ignoreCrc] [-crc] &lt;src&gt; &lt;localdst&gt;] </code><code>//與get相同</code>

<code>[-moveToLocal [-crc] &lt;src&gt; &lt;localdst&gt;]</code>

<code>[-mkidr &lt;path&gt;]  </code><code>//建立檔案夾</code>

<code>[-setrep [-R] [-w] &lt;rep&gt; &lt;path/file&gt;]  </code><code>//改變一個檔案的副本個數。參數-R可以遞歸地對該目錄下的所有檔案做統一操作</code>

<code>[-touchz &lt;path&gt;]  </code><code>//類似Linux中的touch,建立一個空檔案</code>

<code>[-test -[ezd] &lt;path&gt;]  </code><code>//将源檔案輸出為文本格式顯示到終端上,通過這個指令可以檢視TextRecordInputStream(SequenceFile等)或zip檔案</code>

<code>[-stat [format] &lt;path&gt;]  </code><code>//以指定格式傳回路徑的資訊</code>

<code>[-tail [-f] &lt;file&gt;]  </code><code>//在終端上顯示(标準輸出stdout)檔案的最後1kb内容。-f選項的行為與LInux中一緻,會持續監測先添加到檔案中的内容,這在檢視日志檔案時會顯得非常友善。</code>

<code>[-chmod [-R] &lt;MODE[,MODE]...| OCTALMODE&gt; PATH...]  </code><code>//改變檔案的權限,隻有檔案的所有者或者是超級使用者才能使用這個指令。-R可以遞歸地改變檔案夾内的所有檔案的權限</code>

<code>[-chown [-R] [OWNER] [:[GROUP] PATH...]]  </code><code>//改變檔案的擁有者,-R可以遞歸地改變檔案夾内所有檔案的擁有者。同樣,這個指令隻有超級使用者才能使用</code>

<code>[-chgrp [-R] GROUP PATH...]  </code><code>//改變檔案所屬的組,-R可以遞歸地改變檔案夾内所有檔案所屬的組。這個指令必須是超級使用者才能使用</code>

<code>[-help [cmd]]  </code><code>//這是指令的幫助資訊</code>

  在這些指令中,參數&lt;path&gt;的完整格式是hdfs://NameNodeIP:port/,比如你的NameNode位址是192.168.0.1,端口是9000,那麼,如果想通路HDFS上路徑為/user/root/hello的檔案,則需要輸入的位址是hdfs:/192.168.0.1:9000/user/root/hello。在Hadoop中,如果參數&lt;path&gt;沒有NameNodeIP,那麼會預設按照core-site.xml中屬性fs.default.name的設定,附加“/user/你的使用者名”作為路徑,這是為了友善使用以及對不同使用者進行區分。

本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1689205如需轉載請自行聯系原作者

RQSLT

繼續閱讀