1 準(zhǔn)備知識
HDFS:hadoop集群分布式文件系統(tǒng),用來存儲海量數(shù)據(jù)。HDFS采用分而治之的設(shè)計(jì)思想,將文件切分為文件塊進(jìn)行存儲,存儲數(shù)據(jù)的節(jié)點(diǎn)為datanode,存儲這些數(shù)據(jù)具體存放位置的節(jié)點(diǎn)為namenode。HDFS的架構(gòu)為一主多從,即namenode為主,datanade為從。本文主要介紹HDFS的shell命令,即如何通過命令行對HDFS進(jìn)行操作。
首先附上官網(wǎng)鏈接,HDFS Commands Guide。
介紹HDFS之前,需要了解一下命令行的格式,找個例子講一下。
hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
命令行中符號的含義如下表:
| [] | 可選內(nèi)容 |
|---|---|
| <> | 必選內(nèi)容 |
| {} | 分組 |
| | | 二選一 |
| … | 同一個內(nèi)容可多次出現(xiàn) |
| - | 后面連接單個字符,可多個組合使用 |
| -- | 后面跟完整的單詞 |
| Localsrc | 本地源文件 |
| dst | 目標(biāo)路徑 |
參考上述,可寫如下命令:
hadoop fs -appendToFile <localsrc> ...<dst>
或者
hadoop fs -getfattr -d <path>
2 shell命令
查看hdfs命令的方式,直接在hadoop集群上輸入hdfs,會輸出usage(用法)。

hdfs的命令分為三種,分別是admin command(管理員)、client commands(客戶端)和 Daemon Command(進(jìn)程)
| 管理員命令 | 客戶端命令 | 進(jìn)程命令 |
|---|---|---|
| cacheadmin | classpath | balancer |
| crypto | dfs | datanode |
| debug | envvars | dfsrouter |
| dfsadmin | fetchdt | diskbalancer |
| dfsrouteradmin | getconf | httpfs |
| ec | groups | journalnode |
| fsck | lsSnapshottableDir | mover |
| haadmin | snapshotDiff | namenode |
| jmxget | version | nfs3 |
| oev | portmap | |
| oiv | secondarynamenode | |
| oiv_legacy | spser | |
| storagepolicies | zkfc |
2.1 admin command
管理員命令主要介紹 dfsadmin和fsck
輸入 hdfs dfsadmin 查看usage

- hdfs dfsadmin -report #報(bào)告集群狀態(tài)

- hdfs dfsadmin -safemode #設(shè)置集群的安全模式,當(dāng)集群出現(xiàn)問題時,可設(shè)置安全模式。enter :進(jìn)入安全模式,安全模式狀態(tài)下,不可以向hdfs上傳輸文件;leave:離開;get:獲取當(dāng)前狀態(tài);wait:等待。

- hdfs dfsadmin -allowSnapShot #啟用快照功能,快照功能開啟,就可以對文件進(jìn)行備份了。
輸入hdfs fsck 查看fsck的usage:

- hdfs fsck / #查看hdfs文件系統(tǒng)信息
2.2 client commands
客戶端命令介紹dfs、getconf和version
輸入 hdfs dfs 查看dfs的usage

每個具體子命令的含義如下表
| appendToFile | 追加一個或者多個文件到hdfs指定文件中 |
|---|---|
| cat | 顯示文件內(nèi)容到標(biāo)準(zhǔn)輸出上 |
| checksum | 校驗(yàn)和 |
| chgrp | 修改所屬組 |
| chmod | hdfs上文件用戶名和用戶組 |
| chown | hdfs上文件權(quán)限修改 |
| copyFromLocal | 從本地復(fù)制文件到hdfs文件系統(tǒng) |
| copyToLocal | 復(fù)制hdfs文件系統(tǒng)中的文件到本地 |
| count | 統(tǒng)計(jì)與指定文件模式匹配的路徑下的目錄,文件和字節(jié)數(shù) |
| cp | 將文件或目錄復(fù)制到目標(biāo)路徑下 |
| createSnapshot | 創(chuàng)建快照 |
| deleteSnapshot | 刪除快照 |
| df | 查看可用空間 |
| du | 顯示給定目錄中包含的文件和目錄的大小或文件的長度,用字節(jié)大小表示。 |
| expunge | 清空回收站 |
| find | 查找 |
| get | 將本地文件從HDFS下載到本地 |
| getfacl | 顯示權(quán)限信息 |
| getfattr | 顯示其他信息 |
| getmerge | 將源目錄和目標(biāo)文件作為輸入,并將src中的文件連接到目標(biāo)本地文件 |
| head | 輸出文件開頭10行 |
| help | 幫助信息 |
| ls | 查看目錄下內(nèi)容 |
| mkdir | 創(chuàng)建目錄 |
| moveFromLocal | 從本地移動到hdfs |
| moveToLocal | 移動到本地 |
| mv | 將文件或目錄從HDFS的源路徑移動到目標(biāo)路徑 |
| put | 將本地文件上傳到HDFS |
| renameSnapshot | 重命名快照 |
| rm | 刪除一個文件或目錄 |
| rmdir | 刪除空目錄 |
| setfacl | 設(shè)置權(quán)限 |
| setfattr | 其他信息 |
| setrep | 修改副本數(shù) |
| stat | 顯示文件所占塊數(shù)(%b) |
| tail | 顯示文件的最后1kb內(nèi)容到標(biāo)準(zhǔn)輸出 |
| test | 某個文件或者目錄是否存在 |
| text | 獲取源文件并以文本格式輸出文件 |
| touch | 創(chuàng)建一個零長度的文件 |
| touchz | 目錄創(chuàng)建一個新文件 |
| truncate | 截?cái)?/td> |
| usage | 返回命令的help信息。 |
輸入 hdfs getconf 查看getconf的usage

- hdfs getconf -namenodes #查看namenode的節(jié)點(diǎn)名稱

-
hdfs getconf -nnRpcAddresses #查看namenode的RPC地址
image-20201101184809272
輸入hdfs version查看hsdf的版本信息

2.3 Daemon Command
hdfs balancer # 啟動datanode的均衡分布
hdfs datanode #查看datanode進(jìn)程
-
hdfs namenode #查看namenode進(jìn)程
namenode后也可跟參數(shù),具體如下
hdfs nameNode
[-format] //格式化NameNode
[-upgrade] //在Hadoop升級后,應(yīng)該使用這個命令啟動NameNode
[-rollback] //使用NameNode回滾前一個版本
[-finalize] //刪除文件系統(tǒng)的前一個狀態(tài),這會導(dǎo)致系統(tǒng)不能回滾到前一個zhua
[-importCheckpoint] // 復(fù)制備份checkpoint的狀態(tài)到當(dāng)前checkpoint
至此,hdfs的shell命令算是簡單的過了一遍,有興趣的可以每個命令具體去實(shí)操一下。
文章持續(xù)更新,可以微信搜索「 大數(shù)據(jù)分析師知識分享」第一時間閱讀,回復(fù)【666】獲取大數(shù)據(jù)相關(guān)資料。
