9.7.4 其他命令

其他相关命令还包括以下这些:

NameNode-format:格式化DFS文件系统

secondaryNameNode:运行DFS的SecondaryNameNode进程

NameNode:运行DFS的NameNode进程

DataNode:运行DFS的DataNode进程

dfsadmin:运行DFS的管理客户端

mradmin:运行MapReduce的管理客户端

fsck:运行HDFS的检测进程

fs:运行一个文件系统工具

balancer:运行一个文件系统平衡进程

jobtracker:运行一个JobTracker进程

pipes:运行一个Pipes任务

tasktracker:运行一个TaskTracker进程

job:管理运行中的MapReduce任务

queue:获得运行中的MapReduce队列的信息

version:打印版本号

jar<jar>:运行一个JAR文件

daemonlog:读取/设置守护进程的日志记录级别

相信大家已经对这些命令中的一部分很熟悉了,比如在命令行终端中,jar是用来运行Java程序的,version命令可以查看Hadoop的当前版本,或者在安装时必须运行的NameNode-format命令。在这一小节,我们介绍的是与HDFS有关的命令。其中与HDFS相关的命令有如下几个:secondaryNameNode、NameNode、DataNode、dfsadmin、fsck、fs、balancer、distcp和archieves。

它们的统一格式如下:


bin/hadoop command[genericOptions][commandOptions]


其中只有dfsadmin、fsck、fs具有选项genericOptions及commandOptions,其余的命令只有commandOptions。下面先介绍只有commandOptions选项的命令。

distcp。Distcp命令用于DistCp(即Dist分布式,Cp复制)分布式复制。用于在集群内部及集群之间复制数据。

archives。archives命令是Hadoop定义的档案格式。archive对应一个文件系统,它的扩展名是.har,包含元数据及数据文件。

这两个命令在前文中已有介绍,这里就不再赘述了。

DataNode。DataNode命令要简单一些。你可以使用如下命令将Hadoop回滚到前一个版本,它的用法如下:


hadoop DataNode[-rollback]


NameNode。nameNode命令稍稍复杂一些,它的用法如下:


hadoop nameNode

[-format]//格式化NameNode

[-upgrade]//在Hadoop升级后,应该使用这个命令启动NameNode

[-rollback]//使用NameNode回滚前一个版本

[-finalize]//删除文件系统的前一个状态,这会导致系统不能回滚到前一个状态

[-importCheckpoint]//复制备份checkpoint的状态到当前checkpoint


SecondaryNameNode。secondaryNameNode的命令用法如下:


hadoop secondaryNameNode

[-checkpoint[force]]

//当editlog超过规定大小(默认64MB)时,启动检查secondaryNameNode的checkpoint过程;如果启用force选项,则强制执行checkpoint过程

[-geteditsize]

//在终端上显示editlog文件的大小


balancer。balancer命令如解释中所说,用于分担负载。很多原因都会造成数据在集群内分布不均衡,一般来说,当集群中添加新的DataNode时,可以使用这个命令来进行负载均衡。其用法如下:


hadoop balancer


接下来的dfsadmin、fsck、fs这三个命令有一个共同的选项genericOptions,这个选项一般与系统相关,其用法如下:


-conf<configuration file>//指定配置文件

-D<property=value>//指定某属性的属性值

-fs<local|namenode:port>//指定DataNode及其端口


dfsadmin。在dfsadmi命令中可以执行一些类似Windows中高级用户才能执行的命令,比如升级、回滚等。其用法如下:


hadoop dfsadmin[GENERIC_OPTIONS]

[-report]//在终端上显示文件系统的基本信息

[-safemode enter|leave|get|wait]//Hadoop的安全模式及相关维护;在安全模式中系统是只读的,数据块也不可以删除或复制

[-refreshNodes][-finalizeUpgrade]//重新读取hosts和exclude文件,将新的被允许加入到集群中的DataNode连入,同时断开与那些从集群出去的DataNode的连接

[-upgradeProgress status|details|force]//获得当前系统的升级状态、细节,或者强制执行升级过程

[-metasave filename]//保存NameNode的主要数据结构到指定目录下

[-setQuota<quota><dirname>……<dirname>]//为每个目录设定配额

[-clrQuota<dirname>……<dirname>]//清除这些目录的配额

[-setSpaceQuota<quota><dirname>……<dirname>]//为每个目录设置配额空间

[-clrSpaceQuota<dirname>……<dirname>]//清除这些目录的配额空间

[-help[cmd]]//显示命令的帮助信息


fsck。fsck在HDFS中被用来检查系统中的不一致情况。比如某文件只有目录,但数据块已经丢失或副本数目不足。与Linux不同,这个命令只用于检测,不能进行修复。其使用方法如下:


hadoop fsck[GENERIC_OPTIONS]<path>[-move|-delete|-openforwrite][-files

[-blocks[-locations|-racks]]]

//<path>检查的起始目录

//-move移动受损文件到/lost+found

//-delete删除受损文件

//-openforwrite在终端上显示被写打开的文件

//-files在终端上显示正被检查的文件

//-blocks在终端上显示块信息

//-location在终端上显示每个块的位置

//-rack显示DataNode的网络拓扑结构图


fs:fs可以说是HDFS最常用的命令,这是一个高度类似Linux文件系统的命令集。你可以使用这些命令查看HDFS上的目录结构文件、上传和下载文件、创建文件夹、复制文件等。其使用方法如下:


hadoop fs[genericOptions]

[-ls<path>]//显示目标路径当前目录下的所有文件

[-lsr<path>]//递归显示目标路径下的所有目录及文件(深度优先)

[-du<path>]//以字节为单位显示目录中所有文件的大小,或该文件的大小(如果目标为文件)

[-dus<path>]//以字节为单位显示目标文件大小(用于查看文件夹大小)

[-count[-q]<path>]//将目录的大小、包含文件(包括文件)个数的信息输出到屏幕(标准stdout)

[-mv<src><dst>]//把文件或目录移动到目标路径,这个命令允许同时移动多个文件,但是只允许移动到一个目标路径中,参数中的最后一个文件夹即为目标路径

[-cp<src><dst>]//复制文件或目录到目标路径,这个命令允许同时复制多个文件,如果复制多个文件,目标路径必须是文件夹

[-rm[-skipTrash]<path>]//删除文件,这个命令不能删除文件夹

[-rmr[-skipTrash]<path>]//删除文件夹及其下的所有文件

[-expunge]

[-put<localsrc>……<dst>]//从本地文件系统上传文件到HDFS中

[-copyFromLocal<localsrc>……<dst>]//与put相同

[-moveFromLocal<localsrc>……<dst>]//与put相同,但是文件上传之后会从本地文件系统中移除

[-get[-ignoreCrc][-crc]<src><localdst>]//复制文件到本地文件系统。这个命令可以选择是否忽视校验和,忽视校验和下载主要用于挽救那些已经发生错误的文件

[-getmerge<src><localdst>[addnl]]//将源目录中的所有文件进行排序并写入目标文件中,文件之间以换行符分隔

[-cat<src>]//在终端显示(标准输出stdout)文件中的内容,类似Linux系统中的cat

[-text<src>]

[-copyToLocal[-ignoreCrc][-crc]<src><localdst>]//与get相同

[-moveToLocal[-crc]<src><localdst>]

[-mkdir<path>]//创建文件夹

[-setrep[-R][-w]<rep><path/file>]//改变一个文件的副本个数。参数-R可以递归地对该目录下的所有文件做统一操作

[-touchz<path>]//类似Linux中的touch,创建一个空文件

[-test-[ezd]<path>]//将源文件输出为文本格式显示到终端上,通过这个命令可以查看TextRecordInputStream(SequenceFile等)或zip文件

[-stat[format]<path>]//以指定格式返回路径的信息

[-tail[-f]<file>]//在终端上显示(标注输出stdout)文件的最后1kb内容。-f选项的行为与

Linux中一致,会持续检测新添加到文件中的内容,这在查看日志文件时会显得非常方便

[-chmod[-R]<MODE[,MODE]……|OCTALMODE>PATH……]//改变文件的权限,只有文件的所有者或是超级用户才能使用这个命令。-R可以递归地改变文件夹内的所有文件的权限

[-chown[-R][OWNER][:[GROUP]]PATH……]//改变文件的拥有者,-R可以递归地改变文件夹内所有文件的拥有者。同样,这个命令只有超级用户才能使用

[-chgrp[-R]GROUP PATH……]//改变文件所属的组,-R可以递归地改变文件夹内所有文件所属的组。这个命令必须是超级用户才能使用

[-help[cmd]]//这是命令的帮助信息


在这些命令中,参数<path>的完整格式是hdfs://NameNodeIP:port/,比如你的NameNode地址是192.168.0.1,端口是9000,那么,如果想访问HDFS上路径为/user/root/hello的文件,则需要输入的地址是hdfs://192.168.0.1:9000/user/root/hello。在Hadoop中,如果参数<path>没有NameNodeIP,那么会默认按照core-site.xml中属性fs.default.name的设置,附加“/user/你的用户名”作为路径,这是为了方便使用以及对不同用户进行区分。