本文是官方文档的翻译 本文固定链接是:https://www.askmaclean.com/archives/hadoop-hdfs-user-guide.html
原文链接:http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html
1.综述:
所有的HDFS 命令被 bin/hdfs脚本调用,运行这个脚本不带任何参数会打印所有命令。
用法:hdfs [SHELL_OPTIONS] COMMAND [GENERIC_OPTIONS] [COMMADN_OPTIONS]
hadoop有选项解析框架,采用解析通用选项和运行类。
| 命令选项 | 描述 |
| –config–loglevel | 这个命令设置shell选项,详细文档可以参考手动命令页面(Hadoop Commands Reference) |
| GENERIC_OPTIONS | 这个命令设置选项支持多个命令 |
| COMMAND COMMAND_OPTIONS | 下列各节中描述的各种命令 |
2.用户命令:
hadoop集群用户的常用命令
2.1 classpath
用法:hdfs classpath
打印得到hadoop jar和所需类库的class路径
2.2 dfs
用法:hdfs dfs [COMMAND [COMMAND_OPTIONS]]
在hadoop支持下在文件系统上运行一个文件系统命令。各种COMMAND_OPTIONS可以在File System Shell Guide(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSystemShell.html)中找到
2.3 fetchdt
用法:hdfs fetchdt [–webservice <namenode_http_addr>] <path>
| 命令选项 | 描述 |
| –webservice https_address | 使用http协议而不是RPC |
| filename | 存储token的文件名 |
2.4 fsck
用法:
hdfs fsck <path>
[-list-corruptfileblocks |
[-move | -delete | -openforwrite]
[-files [-blocks [-locations | -racks]]]
[-includeSnapshots]
| 命令选项 | 描述 |
| patch | 从此路径开始检查 |
| -delete | 删除损坏的文件 |
| -files | 打印出那些被检查过的文件 |
| -files-blocks | 打印出块报告 |
| -files-blocks-locations | 为每个块打印出位置 |
| -files-blocks-racks | 为data-node位置打印出网络拓扑 |
| -includeSnapshots | 包含快照数据,如果给定的路径中包含snapshottable目录,或者在下面有snapshottable目录。 |
| -list-corruptfileblocks | 打印丢失块的列表和他们属于的文件 |
| -move | 移动损坏的文件到/lost+found |
| -openforwrite | 打印那些write打开的文件 |
2.5 getconf
用法:
hdfs getconf -namenodes
hdfs getconf -secondaryNameNodes
hdfs getconf -backupNodes
hdfs getconf -includeFile
hdfs getconf -excludeFile
hdfs getconf -nnRpcAddresses
hdfs getconf -confKey [key]
| 命令选项 | 描述 |
| -namenodes | 得到集群中namenodes的列表 |
| – secondaryNameNodes | 得到集群中secondaryNameNodes的列表 |
| -backupNodes | 得到集群中backupNodes的列表 |
| -includeFile | 得到定义那些datanodes可以加入集群的文件的路径 |
| -excludeFile | 得到定义datanodes被集群排除在外(decommissioned)的文件的路径 |
| -nnRpcAddresses | 得到namenode的rps地址 |
| – confKey | 从配置中得到一个指定的keey |
从配置目录中获取配置信息,后期处理。

2.6 groups
用法:hdfs groups [username …]
返回组信息,给出1个或多个用户名。
2.7 lsSnapshottableDir
用法:hdfs lsSnapshottableDir [-help]
| 命令选项 | 描述 |
| -help | 打印help信息 |
得到snapshottable目录的列表。当使用超级用户运行的时候,它会返回所有的snapshottable目录。否则它返回当前用户所拥有的目录
2.8 jmxget
用法:hdfs jmxget [-localVM ConnectorURL | -port port | -server mbeanserver | -service service]
| 命令选项 | 描述 |
| -help | 打印help信息 |
| -localVM ConnectorURL | 连接到同一台机器上的VM(虚拟机) |
| -port mbean 服务器端口 | 指定mbean服务器端口,如果缺少它会尝试连接MBean服务器,在相同VM中 |
| -server | 指定jmx服务,默认是Datanode或nameNode |
从一个服务中转储出JMX信息
2.9 oev
用法:hdfs oev [OPTIONS] -i INPUT_FILE -o OUTPUT_FILE
需要命令行参数:
| 命令选项 | 描述 |
| -i,–inputFile 参数 | 为进程编辑文件,xml(不区分大小写)意味着是XML拓展方式,任何其他的文件名是二进制格式 |
| -o,–outputFile 参数 | 输出文件名。如果指定的文件存在,它会覆盖,文件格式由-p选项决定 |
可选命令行参数:
| 命令选项 | 描述 |
| -f,–fix-txids | 在输入的时候重编号事务ID,这样就没有gap或者无效的事务ID |
| -h,–help | 显示用法选项然后退出 |
| -r,–ecover | 当读取二进制edit日志时,使用恢复模式。这将给你跳过编辑日志的损坏部分的机会 |
| -p,–processor 参数 | 选择应用对image文件处理器类型,目前支持的处理器:二进制(原生Hadoop使用二进制格式),XML(默认是XML格式),统计(打印edit文件的统计信息) |
| -v,–verbose | 更详细的输出,打印输入和输出的文件名,用于处理器写入到文件,并输出到屏幕。在大的图像文件,这将大大增加处理时间(默认是false)。 |
hadoop离线edits查看器
2.10 oiv
用法:hdfs oiv [OPTIONS] -i INPUT_FILE
需要命令行参数:
| 命令选项 | 描述 |
| -i,–inputFile 参数 | 为程序编辑文件,XML(不区分大小写)扩展方式为XML格式,任何其他文件名为二进制格式 |
可选命令行参数:
| 命令选项 | 描述 |
| -h,–help | 显示用法信息然后退出 |
| -o,–outputFile 参数 | 输出文件名。如果指定的文件存在,它会覆盖,文件格式由-p选项决定 |
| -p,–processor 参数 | 选择应用对image文件处理器类型,目前支持的处理器:二进制(原生Hadoop使用二进制格式),XML(默认是XML格式),统计(打印edit文件的统计信息) |
hadoop为新image文件提供的,离线image视图
2.11 oiv_legacy
用法:hdfs oiv_legacy [OPTIONS] -i INPUT_FILE -o OUTPUT_FILE
| 命令选项 | 描述 |
| -h,–help | 显示用法信息然后退出 |
| -i,–inputFile 参数 | 为程序编辑文件,XML(不区分大小写)扩展方式为XML格式,任何其他文件名为二进制格式 |
| -o,–outputFile 参数 | 输出文件名。如果指定的文件存在,它会覆盖,文件格式由-p选项决定 |
hadoop老版本离线image视图
2.22 snapshotDiff
用法:hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
确定HDFS 快照之间的差异。详细信息可以参见:
(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html#Get_Snapshots_Difference_Report)
2.23 version
用法:hdfs version
打印版本
3.管理员命令
对hadoop集群管理员很有帮助的命令。
3.1 balancer
用法:
hdfs balancer
[-threshold <threshold>]
[-policy <policy>]
[-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
[-include [-f <hosts-file> | <comma-separated list of hosts>]]
[-idleiterations <idleiterations>]
| 命令选项 | 描述 |
| -policy <policy> | datanode(默认):如果每个datanode平衡,整个集群是均衡的blockpool:在每个datanode上的每个块池是平衡的,整个集群是平衡的 |
| -threshold <threshold> | 磁盘容量百分比。这将覆盖默认阈值。 |
| -exclude -f <hosts-file> | <comma-separated list of hosts> | 在使用balancer进行平衡的时候排除指定的datanode |
| -include -f <hosts-file> | <comma-separated list of hosts> | 在使用balancer进行平衡的时候指定的平衡的datanode |
| -idleiterations <iterations> | 退出前的最大空闲迭代次数。这将覆盖默认的idleiterations(5)。 |
运行一个集群平衡工具。管理员可以简单的按下ctrl+c来停止平衡进程。
注意blockpool策略比datanode策略来说更精确

3.2 cacheadmin
用法:
hdfs cacheadmin -addDirective -path <path> -pool <pool-name> [-force] [-replication <replication>] [-ttl <time-to-live>]
更多信息可以参考(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/CentralizedCacheManagement.html#cacheadmin_command-line_interface)
3.3 crypto
用法:
hdfs crypto -createZone -keyName <keyName> -path <path>
hdfs crypto -help <command-name>
hdfs crypto -listZones
更多信息参考:
http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/TransparentEncryption.html#crypto_command-line_interface
3.4 datanode
用法:hdfs datanode [-regular | -rollback | -rollingupgrace rollback]
| 命令选项 | 描述 |
| -regular | datanode普通启动(默认) |
| -rollbak | 回滚datanode到先前的版本。这个需要在停止datanode和部署之前版本hadoop之后使用。 |
| -rollingupgrade rollbak | 回滚滚动升级操作。 |
运行一个HDFS datanode
3.5 dfsadmin
用法:
hdfs dfsadmin [GENERIC_OPTIONS]
[-report [-live] [-dead] [-decommissioning]]
[-safemode enter | leave | get | wait]
[-saveNamespace]
[-rollEdits]
[-restoreFailedStorage true |false |check]
[-refreshNodes]
[-setQuota <quota> <dirname>…<dirname>]
[-clrQuota <dirname>…<dirname>]
[-setSpaceQuota <quota> <dirname>…<dirname>]
[-clrSpaceQuota <dirname>…<dirname>]
[-setStoragePolicy <path> <policyName>]
[-getStoragePolicy <path>]
[-finalizeUpgrade]
[-rollingUpgrade [<query> |<prepare> |<finalize>]]
[-metasave filename]
[-refreshServiceAcl]
[-refreshUserToGroupsMappings]
[-refreshSuperUserGroupsConfiguration]
[-refreshCallQueue]
[-refresh <host:ipc_port> <key> [arg1..argn]]
[-reconfig <datanode |…> <host:ipc_port> <start |status>]
[-printTopology]
[-refreshNamenodes datanodehost:port]
[-deleteBlockPool datanode-host:port blockpoolId [force]]
[-setBalancerBandwidth <bandwidth in bytes per second>]
[-allowSnapshot <snapshotDir>]
[-disallowSnapshot <snapshotDir>]
[-fetchImage <local directory>]
[-shutdownDatanode <datanode_host:ipc_port> [upgrade]]
[-getDatanodeInfo <datanode_host:ipc_port>]
[-triggerBlockReport [-incremental] <datanode_host:ipc_port>]
[-help [cmd]]

| 命令选项 | 描述 |
| -report [-live] [-dead] [-decommissioning] | 报告基本的文件系统信息和统计信息。可选的标签可以用来过滤显示的数据节点列表 |
| -safemode enter|leave|get|wait | 安全模式维护命令,安全模式是namenode的一个状态1.不允许变更命名空间(只读)2.不复制和删除数据块。在namenode启动时自动进入安全模式,当配置的最小比例块满足最小复制条件时,自动的离开安全模式。可以手动的进入安全模式,此时只能手动关闭安全模式。 |
| -saveNamespace | 将当前命名空间保存到存储目录中和重置edits日志。需要安全模式。 |
| -rollEdits | 在活动的namenode 上滚动edit日志 |
| -restoreFailedStorage true|false|check | 此选项将打开/关闭,自动尝试恢复失败的存储复制。如果一个失败的存储再一次可用,系统将在检查点过程中尝试重建edits 和/或 fsimage.’check’选项放回当前配置。 |
| -refreshNodes | 重新读取datanodes的最新主机配置,那些允许连接到Namenode和那些应该被剔除或重新加进集群的主机。 |
| -setQuota<quota><dirname>…<dirname> | 详细参考HDFS Quotas Guide |
| -clrQuota <dirname>…<dirname> | 详细参考HDFS Quotas Guide |
| -setSpaceQuota<quota><dirname>…<dirname> | 详细参考HDFS Quotas Guide |
| -clrSpaceQuota <dirname>…<dirname> | 详细参考HDFS Quotas Guide |
| -setStoragePolicy<path> <policyName> | 为文件或者路径设置存储策略 |
| -getStoragePolicy <path> | 得到文件或者路径的存储策略 |
| -finalizeUpgrade | 完成HDFS升级。datanode删除以前版本的工作目录,然后是NameNode也这样做。这样就完成了升级过程。 |
| -rollingUpgrade [<query>|<prepare>|<finalize>] | 详细参考Rolling Upgrade document |
| -metasave filename | 保存namenode的主要数据结构到hadoop.log.dir指定的路径下的filename中。filename存在将覆盖,filename将包含下面每一行1. datanode和namenode的心跳2.等待复制的块3.当前被复制的块4.等待被删除的块 |
| -refreshServiceAcl | 重载服务级别的认证策略文件 |
| -refreshUserToGroupsMappings | 刷新用户-组映射 |
| -refreshSuperUserGroupsConfiguration | 刷新超级用户代理组映射 |
| -refreshCallQueue | 刷新来自配置中的调用(call)队列 |
| -refresh<host:ipc_port> <key> [arg1..argn] | 触发一个 运行时刷新指定<host:ipc_port>上<key>资源。其他参数在此之后发送给主机。 |
| -reconfig<datanode |…> <host:ipc_port> <start|status> | 启动重新配置或获得正在进行的重新配置的状态。第二个参数指定节点类型。目前,只有重装DataNode的配置支持。 |
| -printTopology | 从namenode答应它们节点的树形结构 |
| -refreshNamenodesdatanodehost:port | 对于给定的datanode,重载配置文件,停止删除块池服务,然后开启新块池服务。 |
| -deleteBlockPooldatanode-host:port blockpoolId [force] | 如果强行通过,在给定节点删除给出blockpool ID的块池目录以及它的内容,否则只有空目录删除。如果datanode任然为这个快池服务,命令将会失败。参考refreshNamenodes在一个datanode上关闭块池服务 |
| -setBalancerBandwidth<bandwidth in bytes per second> | 调节在HDFS块平衡时每个datanode使用的网络带宽。< bandwidth >是每个datanode每秒的最大的值。这个值覆盖dfs,balance.bandwidthPerSec 参数。注意:这个新值不是一个持久的值。 |
| -allowSnapshot <snapshotDir> | 允许快照目录被创建。如果操作成功完成,这个目录将成为snapshottable.参考HDFS Snapshot 文档来获得详细信息 |
| -disallowSnapshot <snapshotDir> | 不允许快照目录被创建。在不允许快照之前,所有的快照目录必须被删除。参考HDFS Snapshot 文档来获得详细信息 |
| -fetchImage <local directory> | 从NameNode中下载最新的fsimage,然后保存到指定的本地路径。 |
| -shutdownDatanode <datanode_host:ipc_port> [upgrade] | 提交一个关闭请求给datanode。详细参考Rolling Upgrade document |
| -getDatanodeInfo <datanode_host:ipc_port | 获得指定datanode的信息。详细参考Rolling Upgrade document |
| -triggerBlockReport[-incremental] <datanode_host:ipc_port> | 为指定的datanode触发一个块报告。如果指定了’incremental’,它将是增量的,否则它将是完整的报告。 |
| -help | 显示指定命令的帮助,如果没有指定显示所有命令的。 |
运行一个HDFS dfsadmin客户端
3.6 haadamin
用法:
hdfs haadmin -checkHealth <serviceId>
hdfs haadmin -failover [–forcefence] [–forceactive] <serviceId> <serviceId>
hdfs haadmin -getServiceState <serviceId>
hdfs haadmin -help <command>
hdfs haadmin -transitionToActive <serviceId> [–forceactive]
hdfs haadmin -transitionToStandby <serviceId
| 命令选项 | 描述 |
| -checkHealth | 检查指定namenode的健康 |
| -failover | 在两个NameNodes之前进行故障转移 |
| -getServiceState | 确定给定的NameNode是活动的还是备份的 |
| -transitionToActive | 变化给定的NameNode到活动的(警告:没有防护措施) |
| -transitionToStandby | 变化给定的NameNode到备份的(警告:没有防护措施) |
参考HDFS HA with NFS 或 HDFS HA with QJM来获得更多的命令
(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Administrative_commands)
3.7 journalnode
用法:
hdfs journalnode
这个命令启动了一个journalnode,使用参考HDFS HA with QJM(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Administrative_commands)
3.8 mover
用法:
hdfs mover [-p <files/dirs> | -f <local file name>]
| 命令选项 | 描述 |
| -f <local file> | 指定用于迁移的一个本地文件来容纳一个 HDFS 文件/目录列表 |
| -p <files/dirs> | 指定要迁移的空间分隔的HDFS文件/目录列表。 |
运行数据迁移工具。更多参考(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html#Mover_-_A_New_Data_Migration_Tool)
注意,如果-p和-f选项都忽略,默认的路径是根目录。
3.9 namenode
用法:
hdfs namenode [-backup] |
[-checkpoint] |
[-format [-clusterid cid ] [-force] [-nonInteractive] ] |
[-upgrade [-clusterid cid] [-renameReserved<k-v pairs>] ] |
[-upgradeOnly [-clusterid cid] [-renameReserved<k-v pairs>] ] |
[-rollback] |
[-rollingUpgrade <downgrade |rollback> ] |
[-finalize] |
[-importCheckpoint] |
[-initializeSharedEdits] |
[-bootstrapStandby] |
[-recover [-force] ] |
[-metadataVersion ]
-metadataVersion 动作和第一次格式化类似:

| 命令选项 | 描述 |
| -backup | 开启备份节点 |
| -checkpoint | 开启检查点节点 |
| -format[-clusterid cid] [-force] [-nonInteractive] | 格式化指定的NameNode。它开启在NameNode,格式化它然后关闭。如果名称目录存在,使用-force选项格式化。-nonInteractive选项(默认)在目录存在时会中断格式化,除非-force选项指定。 |
| -upgrade[-clusterid cid] [-renameReserved <k-v pairs>] | 在分布了新版本的hadoop之后,namenode可以使用upgrade选项启动。 |
| -upgradeOnly [-clusterid cid] [-renameReserved <k-v pairs>] | 升级指定的namenode,然后关闭它。 |
| -rollback | 回退NameNode到之前的版本。这个命令应该在关闭集群和分布了旧版本的hadoop之后使用。 |
| -rollingUpgrade <downgrade|rollback|started> | 参考Rolling Upgrade document获得详细信息 |
| -finalize | 完成后(finalize)会从文件系统移除之前的状态。最近的一次升级将成为当前。rollback选项将不再可用。在完成之后,它会关闭nameNode. |
| -importCheckpoint | 从一个检查点路径装载image,然后保存它到当前的。检查点路径从fs.checkpoint.dir属性获取到 |
| -initializeSharedEdits | 格式化一个新的共享edits目录,然后拷贝进充足的edit日志段,这样备用NameNode可以启动 |
| -bootstrapStandby | 允许备用NameNode上存储目录被从活动NameNode上拷贝的最命名空间快照引导。这个用于当第一次HA集群配置的时候。 |
| -recover [-force] | 在一个损坏的文件系统上修复丢失的元数据。详细参考HDFS User Guide |
| -metadataVersion | 验证配置的路径存在,然后答应软件和image的元数据版本 |
运行namenode。更多关于升级,回退和最后完成,参见Upgrade_and_Rollback
(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Upgrade_and_Rollback)
3.10 nfs
用法:
hdfs nfs3
这个命令开启的NFS3网关,使用参考HDFS NFS3 Service.
(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsNfsGateway.html#Start_and_stop_NFS_gateway_service)
4.11 portmap
用法:hdfs portmap
这个命令开启的一个RPC端口映射,使用参考HDFS NFS3 Service.
(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsNfsGateway.html#Start_and_stop_NFS_gateway_service)
3.12 secondarynamenode
用法:
hdfs secondarynamenode [-checkpoint [force]] | [-format] | [-geteditsize]
| 命令参数 | 描述 |
| -checkpoint [force] | 检查点secondarynamenode,如果editlogs大小>=fs.checkpoint.size。如果force使用,无论editlog大小都进行检查点。 |
| -format | 在启动的时候格式化本地存储 |
| -geteditsize | 打印出在NameNode还未检查点的事务的数量。 |
更多HDFS secondarynamenode 信息,参考secondary namenode(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Secondary_NameNode)
3.13 storagepolicies
用法:
hdfs storagepolicies
列出所有存储策略,更多信息请参见Storage Types and Storage Policies(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html)
3.14 zkfc
用法:
hdfs zkfc [-formatZK [-force] [-nonInteractive]]
| 参数选项 | 描述 |
| -formatZK | 格式化 Zookeeper 实例 |
| -h | 列出帮助 |
这个命令开启了一个Zookeeper故障转移控制进程,更多使用参考HDFS HA with QJM.
(http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Administrative_commands)
4:调试命令(debug)
一些有用的命令可以帮助管理员调试HDFS问题,例如验证块文件和调用recoverLease
4.1 verify
用法:
hdfs debug verify [-meta <metadata-file>] [-block <block-file>]
| 命令选项 | 描述 |
| -blockblock-file | 参数选项指定在datanode上块文件在本地文件系统的绝对路径 |
| -meta metadata-file | datanode本地文件系统的元数据文件的绝对路径。 |
验证HDFS元数据和块文件,如果一个块文件被指定,我们将验证块文件和其在元数据中的校验值。
4.2 recoverLease
用法:
hdfs debug recoverLease [-path <path>] [-retries <num-retries>]
| 命令选项 | 描述 |
| [-path path] | recoverLease的HDFS路径 |
| [-retries num-retries] | 在重新调用recoverLease的次数。重试默认值是1 |
这个指定的路径必须在HDFS文件系统上,默认重试值是1.
Leave a Reply