❶ HDFS操作命令
HDFS命令基本格式:hadoop fs -cmd < args >
表格:
注意:以上表格中路徑包括hdfs中的路徑和linux中的路徑。對於容易產生歧義的地方,會特別指出「linux路徑」或者「hdfs路徑」。如果沒有明確指出,意味著是hdfs路徑。
HDFS有一個默認的工作目錄/user/$USER,其中$USER是用戶的登錄用戶名。不過目錄不會自動建立,需要mkdir建立它
命令格式:hadoop fs -mkdir
注意:支持級聯創建新目錄,Hadoop的mkdir命令會自動創建父目錄,類似於帶-p的linux命令
put命令從本地文件系統中 復制單個或多個 源路徑到目標文件系統,也支持從標准輸入設備中讀取輸飢孫斗入並寫入目標文件系統。分為本地上傳和上傳到HDFS中。
命令格式:hadoop fs -put filename
最後一個參數是句點,相當於放入了默認的工作目錄,等價於 hadoop fs -put example.txt /user/chen
上傳文件時,文件首先復制到DataNode上,只有所有的DataNode都成功接收完數據,文件上傳才是成功的凱物。
命令格式:hadoop dfs put filename newfilename
從本地文件系統中復制單個或多個源路徑到目標文件系統。也支持從 標准輸入 中讀取輸入寫入目標文件系統。
採用-ls命令列出HDFS上的文件。在HDFS中未帶參數的-ls命令沒有返回任何值,它默認返回HDFS的home目錄下
的內容。在HDFS中,沒有當前工作目錄這樣一個概念,也沒有cmd這樣的命令。
命令格式:user@NameNode:hadoop$ bin/hadoop dfs -ls
如:
通過「-ls 文件夾名」 命令瀏覽HDFS下文件夾中的文件
命令格式:hadoop dfs -ls 文件夾名
通過該命令可以查看in文件夾中的所有文檔文件
通過「-cat 文件名」命令查看HDFS下文件夾中某個文件的內容
命令格式:hadoop$ bin/hadoop dfs -cat 文件名
通過這個命令可以查看in文件夾中所有文件的內容
通過「-get 文件按1 文件2」命令將HDFS中某目錄下的文件復制到本地系統的某文件中,並對該文件重新命名。
命令格式:hadoop dfs -get 文件名 新文件名
-get 命令與-put命令一樣,既可以操作目錄,也可以操作文件
通過「-rmr 文件」命令刪除HDFS下的文件
命令格式:hadoop$ bin/hadoop dfs -rmr 文件
-rmr 刪除文檔命令相當於delete的遞歸版本。
通過-format命令實現HDFS格式化
命爛磨令格式:user@NameNode:hadoop$ bin/hadoop NameNode -format
通過運行start-dfs.sh,就可以啟動HDFS了
命令格式:user@NameNode:hadoop$ bin/ start-dfs.sh
當需要退出HDFS時,通過stop-dfs.sh 就可以關閉HDFS
命令格式:user@NameNode:hadoop$ bin/ stop-dfs.sh
HDFS的命令遠不止這些,對於其他操作,可以通過-help commandName 命令列出清單。下面列舉一些命令進行說明。
(1)chgrp改變文件所屬的組命令
chgrp命令的用途是:更改文件或目錄的組所有權。
語法格式:hadoop fs -charg [-R] GROUP URL .....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者超級用戶。
(2)chmod改變文件的許可權
chmod用於改變文件或目錄的訪問許可權,這個Linux系統管理員最常用的命令之一。
使用方法:hadoop fs -chmod [-R] ...
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者是超級用戶
(3)chown改變文件的擁有者
chown命令改變文件的擁有者。
使用方法:hadoop fs -chown [-R]....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是超級用戶。
(4)FromLocal命令
除了限定 源路徑 是只能是一個 本地文件 外,其他方面和put命令相似。
使用方法:hadoop fs -FromLocal <localsrc> URI
(5)ToLocal命令
除了限定 目標路徑 是一個 本地文件 外,其他方面和get命令類似。
使用方法:hadoop fs -ToLocal {-ignorecrc} {-crc} URI <localdst>
(6)cp命令
cp命令是將文件從源路徑復制到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。
使用方法:hadoop fs -cp URI [URI....] <dest>
返回值:成功返回0 ,失敗返回-1
(7)命令
命令顯示目錄中 所有文件的大小 ,或者當只指定一個文件時,顯示此文件的大小
使用方法:hadoop fs - URI [URI........]
返回值
成功返回0,失敗返回-1
(8)s命令
s是顯示 文件大小 的命令。
使用方法:hadoop fs -s <args>
(9)expunge命令
expunge是清空回收站的命令
使用方法:hadoop fs -expunge
(10)get命令
get是復制文件到本地文件系統的命令
使用方法:hadoop fs -get [-ignorecrc] [-crc] <localdst>
可用-ignorecrc選項復制CRC校驗失敗的文件:使用-CRC選項復制文件以及CRC信息。
返回值
成功返回0,失敗返回-1
(11)getmerge命令
getmerge命令用於接受一個源目錄和一個目標文件作為輸入,並且將源目錄中所有的文件合並成本地目標文件。
使用方法:hadoop fs -getmerge <src> <localdst> [addnl]
參數說明:addl是可選的,用於指定在每個文件結尾添加一個換行符;
假設在你的hdfs集群上有一個/user/hadoop/output目錄
裡面有作業執行的結果(多個文件組成)part-000000,part-000001,part-000002
然後就可以在本地使用vi local_file查看內容了
(12)ls命令
ls命令查看當前目錄下的信息
使用方法:hadoop fs -ls <args>
如果是 文件 ,則按照如下格式返迴文件信息:
文件名 <副本數>文件大小 修改日期 修改時間 許可權 用戶ID 組ID
如果是 目錄 ,則返回它直接子文件的一個列表,就像在UNIX中一樣。目錄返回i額表的信息如下:
目錄名<dir>修改日期 修改時間 許可權 用戶ID 組ID
返回值
成功返回0,失敗返回-1
(13)lsr命令
lsr命令是-ls命令的遞歸版,類似於UNIX中的ls-r。
使用方法:hadoop fs -lsr <args>
(14)movefromLocal命令
復制一份本地文件到hdfs,當成功後,刪除本地文件
使用方法:dfs -moveFromLocal <src> <dst>
(14.5)moveToLocal命令
類似於-get,但是當復制完成後,會刪除hdfs上的文件
使用方法:moveToLocal <src> <localDest>
(15)mv命令
將文件從源路徑移動到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄
使用方法:hadoop fs -mv URI [URI.....] <dest>
備註:不允許在不同的文件系統間移動文件。
返回值
成功返回0,失敗返回-1
(16)put 命令
put命令從本地文件系統中復制單個或多個源路徑到目標文件系統,也支持從標准輸入中讀取輸入寫入目標文件系統
使用方法:hadoop fs -put <localsrc> .... <dst>
(17)rm命令
rm命令刪除指定的文件,只刪除非空目錄和文件。
使用方法:hadoop fs -rm URI [URI......]
請參考rmr命令了解遞歸刪除。
(18)rmr命令
rmr命令是delete命令的遞歸版本
使用方法:hadoop fs -rmr URI [URI.......]
返回值
成功返回0,失敗返回-1
(19)setrep命令
setrep命令可以改變一個文件的副本系數。
使用方法:hadoop fs -setrep [-R] <path>
參數說明:-R 選項用於遞歸改變目錄下所有文件的副本系數
返回值
成功返回0,失敗返回-1
(20)stat命令
stat命令用於返回指定路徑的統計信息
使用方法:hadoop fs -stat URI [URI......]
返回值
成功返回0,失敗返回-1
(21)tail命令
tail命令將文件尾部1KB的內容輸出到stdout。支持-f選項,行為和UNIX中一致
使用方法:hadoop fs -tail [-f] URI
返回值
成功返回0,失敗返回-1
(22)test命令
test命令是檢查命令,可以檢查文件是否存在、文件的大小等。
使用方法:hadoop fs -test -[ezd] URI
(23)text命令
text命令用於將源文件輸出問文本格式
使用方法:hadoop fs -text <src>
允許的格式是zip和TextRecordInputStream。
(24)touchz 命令
touchz命令用於創建一個0位元組的空文件。
使用方法: hadoop fs -touchz URI [URI....]
返回值
成功返回0,失敗返回-1
❷ hadoop常用shell命令怎麼用
一、常用的hadoop命令
1、hadoop的fs命令
#查看hadoop所有的fs命令
1
hadoop fs
#上傳文件(put與FromLocal都是上傳命令)
1
2
hadoop fs -put jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk
hadoop fs -FromLocal jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk
#下載命令(get與ToLocal都是下載命令)
1
2
hadoop fs -get hdfs://hucc01:9000/jdk jdk1.7
hadoop fs -ToLocal hdfs://hucc01:9000/jdk jdk1.7
#將本地一個或者多個文件追加到hdfs文件中(appendToFile)
1
hadoop fs -appendToFile install.log /words
#查詢hdfs的所有文件(ls)
1
hadoop fs -ls /
#幫助命令(help)
1
hadoop fs -help fs
#查看hdfs文件的內容(cat和text)
1
2
hadoop fs -cat /words
hadoop fs -text /words
#刪除hdfs文件(rm)
1
hadoop fs -rm -r /words
#統計hdfs文件和文件夾的數量(count)
1
hadoop fs -count -r /
#合並hdfs某個文件夾的文件,並且下載到本地(getmerge)
1
hadoop fs -getmerge / merge
#將本地文件剪切到hdfs,相當於對本地文件上傳後再刪除(moveFormLocal)
1
hadoop fs -moveFromLocal words /
#查看當前文件系統的使用狀態(df)
1
hadoop fs -df
二、常用的hdfs命令(這個用的比較多)
用法跟hadoop命令一樣,推薦2.0之後使用hdfs命令
1
hdfs dfs
❸ 如何在spark中刪除hdfs的某個文件夾
hadoop 添加刪除datanode及tasktracker
首先:
建議datanode和tasktracker分開寫獨立的exclude文件,因為一個節點即可以同時是datanode和tasktracker,也可以單獨是datanode或tasktracker。
1、刪除datanode
修改namenode上的hdfs-site.xml
<property>
<name>dfs.hosts</name>
<value>/usr/local/hadoop/conf/datanode-allow-list</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/conf/datanode-deny-list</value>
</property>
其中dfs.host列出了連入namenode的節點,如果為空,則所有的datanode都可以連入namenode。如果不為空,則文件中存在的datanode可以連入。
dfs.hosts.exclude列出了禁止連入namenode的節點。
如果一個節點同時存在於dfs.hosts和dfs.hosts.exclude,則禁止連入。
具體步驟
(1)將要刪除的datanode加入到dfs.hosts.exclude指定的文件中。(最好使用主機名,IP有時可能不生效)
(2)動態刷新配置,不需要重啟namenode
hadoop dfsadmin -refreshNodes
(3)通過hadoop dfsadmin -report或webui,可以看到,該datanode的狀態為Decommissioning
(4)等待一段時間,該節點為dead狀態。
(5)刪除dfs.hosts文件中該節點 即下架目標機器後,再次編輯dfs.hosts.exclude,把剛才下架的機器的ip或機器名移走
(6)
hadoop dfsadmin -refreshNodes
註:按照上面的操作後,如果你想要重新啟用該節點為datanode,從dfs.hosts.exclude中刪除該節點,refreshNodes,然後,到該節點上,重啟啟動該datanode:
/usr/local/hadoop/bin/hadoop-daemon.sh stop datanode
/usr/local/hadoop/bin/hadoop-daemon.sh start datanode
注:正確的刪除datanode的方法應該是按照上面的方法,使用exclude文件,而不應該直接去datanode上去sotp datanode,這樣會造出數據丟失,而且stop以後,webui和hadoop dfsadmin -report都仍然顯示該datanode節點。除非重新啟動namenode。
之所以重新啟用exclude的節點時可以stop datanode,因為此時該datanode不包含在cluster中,所以,stop後不會造成數據丟失。
2、添加datanode
如果存在dfs.hosts文件,且不為空,則添加新的datanode到該文件中,refreshNodes。
到新節點上,啟動即可
/usr/local/hadoop/bin/hadoop-daemon.sh start datanode
如果不存在dfs.hosts文件,或文件為空,直接啟動新節點即可。
3、刪除tasktracker
原理和步驟與刪除datanode一樣。
<property>
<name>mapred.hosts</name>
<value>/usr/local/hadoop/conf/tasktracker-allow-list</value>
</property>
<property>
<name>mapred.hosts.exclude</name>
<value>/usr/local/hadoop/conf/tasktracker-deny-list</value>
</property>
動態刷新配置的命令為:
hadoop mradmin -refreshNodes
立刻生效,可以在webui中看到,nodes節點數量的變化,以及Excluded Nodes節點的變化。
具體的步驟參考上面的刪除datanode的步驟
註:按照上面的操作後,如果你想要重新啟用該節點為tasktracker,從mapred.hosts.exclude中刪除該節點,refreshNodes,然後,到該節點上,重啟啟動該tasktracker:
/usr/local/hadoop/bin/hadoop-daemon.sh stop tasktracker
/usr/local/hadoop/bin/hadoop-daemon.sh start tasktracker
注:正確的刪除tasktracker的方法應該是按照上面的方法,使用exclude文件,而不應該直接去tasktracker上去sotp tasktracker,這樣會造成job失敗,而且stop以後,webui上仍然顯示該tasktracker節點。除非重新啟動jobtracker。
我遇到的一個問題:
在exclude文件中,我使用了IP,發現tasktracker仍然參與計算。
在webui中發現,Excluded Nodes中存在該IP,Nodes中仍然存在該tasktracker的hostname。
解決的辦法就是,在exclude中使用hostname而不使用IP。
判斷是否真正生效:如果exclued文件中正確的填寫了要失效的node,則總得nodes數量應該減小。
4、添加tasktracker
如果存在mapred.hosts文件,且不為空,則添加新的tasktracker到該文件中,refreshNodes。
到新節點上,啟動即可
/usr/local/hadoop/bin/hadoop-daemon.sh start tasktracker
如果不存在mapred.hosts文件,或文件為空,直接啟動新節點即可。
6、添加或刪除datanode後,平衡磁碟利用率
運行bin/start-balancer.sh,這個會很耗時間
備註:
如果不balance,那麼cluster會把新的數據都存放在新的node上,這樣會降低mr的工作效率;
/usr/local/hadoop/bin/start-balancer.sh -threshold 0.1
7下架目標機器後,再次編輯mapred.hosts.exclude,把剛才下架的機器的ip或機器名移走
threshold 是平衡閾值,默認是10%,值越低各節點越平衡,但消耗時間也更長。
balancer也可以在有mr job的cluster上運行,默認dfs.balance.bandwidthPerSec很低,為1M/s。在沒有mr job時,可以提高該設置加快負載均衡時間。
在namenode的hdfs-site.xml中增加設置balance的帶寬,默認只有1M:
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>10485760</value><description>Specifies themaximum bandwidth that each datanode can utilize for the balancing purpose interm of the number of bytes per second.</description>
</property>
❹ hadoop上刪除文件
如何恢復hadoop中被刪除的文件
hadoop的hdfs中被刪除文件的恢復原理和回收站原理是一樣的,就是在刪除hdfs文件時,被刪除的文件被移動到了hdfs的.trash文件夾中,恢復時只需將該文件夾中文件拿出即可。具體操作如下:
1
設置.trash文件夾
如果需要恢復hdfs中文件,就需要設置.trash,hadoop的.trash默認是關閉的。具體設置如下:
fs.trash.interval
10080
該配置項在core-site.xml中,fs.trash.interval代表刪除的文件保留的時間,時間單位為分鍾,默認為0代表不保存刪除的文件。我們只需要設置該時間即可打開.trash。
2
設置後刪除文件會顯示刪除的文件被移動到了hdfs://192.168.1.100:9000/user/hadoop/.trash/current中,舉例如下:
14/10/20
16:48:24
info
fs.trashpolicydefault:
namenode
trash
configuration:
deletion
interval
=
10080
minutes,
emptier
interval
=
0
minutes.
moved:
'hdfs://10.207.0.217:9000/test_out/mr-20141017111556'
to
trash
at:
hdfs://192.168.1.100:9000/user/hadoop/.trash/current
3
恢復時只需要將.trash中文件移動到我們設置的目錄即可,例如將.trash中test1文件移動到/test目錄,
bin/hadoop
fs
-mv
/user/hadoop/.trash/current/test1
/test
4
徹底刪除hdfs文件
徹底刪除hdfs文件即將.trash中文件徹底刪除,這樣才能是否被刪除文件所佔用的hdfs空間,第2步中的刪除方式hdfs不會釋放空間,只是將需要刪除的文件移動到了垃圾箱。.trash其實只是hdfs中的一個目錄,只要刪除該文件夾中的文件即可徹底刪除該文件,原理相當於刪除了回收站中的文件,該文件即被徹底刪除。該項一般很少用,一般hdfs空間不夠用才會用到。刪除.trash中文件舉例如下:
bin/hadoop
fs
-rm
-r
/user/hadoop/.trash/current/test1
❺ java 怎麼刪除hdfs文件夾
可以利用IO流的知識,
files.delete(),但前提是,這個文件夾必須是空的,或者你想直接刪除的話,可以在
DOS命令窗口進行刪除
打開命令窗口後
輸入目標文件路徑
:
del
文件名
刪除指定的文件。
注意:
del後面如果跟一個文件夾,那麼是刪除一個文件夾中的所有文件。(千萬注意,刪除的時候不要錯刪了其它有用文件,因為刪除了,就找不回來了)
❻ 怎麼用命令行刪除hdfs上的文件
命令:hadoop fs -rmr /home/mm/lily2(要求是你把hadoop的bin加到PATH中,並開啟hadoop)
rm -rf /home/mm/lily2(這是刪除linux文件系統的文件夾)。
刪除目錄版
rd /s /q "c:\hello"
rem 加引號可以防止因路徑中有空格而出權錯
rem 上面的代碼意為:刪除c:\hello目錄下所有的內容(包括"c:\hello")
刪除文件
del /f /q /s "c:\hello\*.*"
rem 刪除c;\hello文件夾下所有的文件,包括子文件夾的內容,(不包括子文件夾,也不包括c:\hello文件夾)
rem 文件夾=目錄