Hadoop 命令指南

概述

所有 Hadoop 命令和子项目都遵循相同的基本结构

用法:shellcommand [SHELL_OPTIONS] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

字段 说明
shellcommand 调用的项目命令。例如,Hadoop common 使用 hadoop,HDFS 使用 hdfs,YARN 使用 yarn
SHELL_OPTIONS 在执行 Java 之前 shell 处理的选项。
COMMAND 要执行的操作。
GENERIC_OPTIONS 多个命令支持的通用选项集。
COMMAND_OPTIONS 本文档中描述了各种命令及其选项,适用于 Hadoop common 子项目。其他文档中介绍了 HDFS 和 YARN。

Shell 选项

所有 shell 命令都接受一组通用选项。对于某些命令,这些选项将被忽略。例如,在仅在单个主机上执行的命令中传递 ---hostnames 将被忽略。

SHELL_OPTION 说明
--buildpaths 启用 jar 的开发者版本。
--config confdir 覆盖默认的配置目录。默认值为 $HADOOP_HOME/etc/hadoop
--daemon mode 如果命令支持守护进程化(例如,hdfs namenode),则以适当的模式执行。支持的模式有 start(以守护进程模式启动进程)、stop(停止进程)和 status(确定进程的活动状态)。status 将返回 LSB 兼容 的结果代码。如果没有提供选项,则支持守护进程化的命令将在前台运行。对于不支持守护进程化的命令,此选项将被忽略。
--debug 启用 shell 级别配置调试信息
--help Shell 脚本使用信息。
--hostnames 当使用 --workers 时,用由空格分隔的主机名列表覆盖 workers 文件,以执行多主机子命令。如果未使用 --workers,则此选项将被忽略。
--hosts 当使用 --workers 时,用包含主机名列表的另一个文件覆盖 workers 文件,以执行多主机子命令。如果未使用 --workers,则此选项将被忽略。
--loglevel loglevel 覆盖日志级别。有效的日志级别有 FATAL、ERROR、WARN、INFO、DEBUG 和 TRACE。默认值为 INFO。
--workers 如果可能,在 workers 文件中的所有主机上执行此命令。

通用选项

许多子命令遵循一组通用的配置选项来改变其行为

GENERIC_OPTION 说明
-archives <逗号分隔的存档列表> 指定要在计算机器上解压缩的逗号分隔的存档。仅适用于作业。
-conf <配置文件> 指定应用程序配置文件。
-D <属性>=<值> 对给定属性使用值。
-files <逗号分隔的文件列表> 指定要复制到 MapReduce 集群的逗号分隔的文件。仅适用于作业。
-fs <file:///> 或 <hdfs://namenode:port> 指定要使用的默认文件系统 URL。覆盖配置中的“fs.defaultFS”属性。
-jt <local> 或 <resourcemanager:port> 指定 ResourceManager。仅适用于作业。
-libjars <逗号分隔的 jar 列表> 指定要包含在类路径中的逗号分隔的 jar 文件。仅适用于作业。

Hadoop 常用命令

所有这些命令均从 hadoop shell 命令执行。它们已细分为 用户命令管理命令

用户命令

Hadoop 集群用户有用的命令。

archive

创建 Hadoop 归档。可在 Hadoop 归档指南 中找到更多信息。

checknative

用法:hadoop checknative [-a] [-h]

COMMAND_OPTION 说明
-a 检查所有库是否可用。
-h 打印帮助

此命令检查 Hadoop 本机代码的可用性。有关更多信息,请参阅 本机库。默认情况下,此命令仅检查 libhadoop 的可用性。

classpath

用法:hadoop classpath [--glob |--jar <path> |-h |--help]

COMMAND_OPTION 说明
--glob 展开通配符
--jar path 将类路径作为清单写入名为 path 的 jar 中
-h, --help 打印帮助

打印获取 Hadoop jar 和所需库所需的类路径。如果在没有参数的情况下调用,则打印命令脚本设置的类路径,其中可能包含类路径条目中的通配符。其他选项在通配符展开后打印类路径或将类路径写入 jar 文件的清单中。后者在无法使用通配符且展开的类路径超过支持的最大命令行长度的环境中很有用。

conftest

用法:hadoop conftest [-conffile <path>]...

COMMAND_OPTION 说明
-conffile 要验证的配置文件或目录的路径
-h, --help 打印帮助

验证配置 XML 文件。如果未指定 -conffile 选项,则将验证 ${HADOOP_CONF_DIR} 中名称以 .xml 结尾的文件。如果指定,则将验证该路径。您可以指定文件或目录,如果指定目录,则将验证该目录中名称以 .xml 结尾的文件。您可以多次指定 -conffile 选项。

验证相当简单:解析 XML 并检查重复和空属性名称。该命令不支持 XInclude;如果您使用它来提取配置项,它将声明 XML 文件无效。

credential

用法:hadoop credential <子命令> [选项]

COMMAND_OPTION 说明
create 别名 [-provider 提供程序路径] [-strict] [-value 凭据值] 提示用户输入要存储为给定别名的凭据。除非指定了 -provider,否则将使用 core-site.xml 文件中的 hadoop.security.credential.provider.path。如果提供程序使用默认密码,-strict 标志将导致命令失败。使用 -value 标志提供凭据值(又称别名密码),而不是提示输入。
delete 别名 [-provider 提供程序路径] [-strict] [-f] 删除具有提供别名的凭据。除非指定了 -provider,否则将使用 core-site.xml 文件中的 hadoop.security.credential.provider.path。如果提供程序使用默认密码,-strict 标志将导致命令失败。除非指定了 -f,否则该命令会要求确认
list [-provider 提供程序路径] [-strict] 列出所有凭据别名。除非指定了 -provider,否则将使用 core-site.xml 文件中的 hadoop.security.credential.provider.path。如果提供程序使用默认密码,-strict 标志将导致命令失败。
check 别名 [-provider 提供程序路径] [-strict] 检查给定别名的密码。除非指定了 -provider,否则将使用 core-site.xml 文件中的 hadoop.security.credential.provider.path。如果提供程序使用默认密码,-strict 标志将导致命令失败。

用于管理凭据提供程序中的凭据、密码和机密的命令。

Hadoop 中的 CredentialProvider API 允许应用程序与其存储所需密码/机密的方式分离。为了指示特定的提供程序类型和位置,用户必须在 core-site.xml 中提供 hadoop.security.credential.provider.path 配置元素,或在以下每个命令中使用命令行选项 -provider。此提供程序路径是一个逗号分隔的 URL 列表,指示应咨询的提供程序列表的类型和位置。例如,以下路径:user:///,jceks://file/tmp/test.jceks,jceks://[email protected]/my/path/test.jceks

表示应通过用户提供程序咨询当前用户的凭据文件,位于 /tmp/test.jceks 的本地文件是 Java 密钥库提供程序,而位于 HDFS 中的 nn1.example.com/my/path/test.jceks 的文件也是 Java 密钥库提供程序的存储。

在使用凭据命令时,通常会为特定凭据存储提供程序设置密码或密钥。为了明确指出要使用哪个提供程序存储,应使用 -provider 选项。否则,给定多个提供程序的路径,将使用第一个非瞬态提供程序。这可能是您想要的,也可能不是。

提供程序经常要求提供密码或其他密钥。如果提供程序需要密码但找不到密码,它将使用默认密码并发出警告消息,指出正在使用默认密码。如果提供了 -strict 标志,警告消息将变为错误消息,并且命令将立即返回错误状态。

示例:hadoop credential list -provider jceks://file/tmp/test.jceks

distch

用法:hadoop distch [-f urilist_url] [-i] [-log logdir] path:owner:group:permissions

COMMAND_OPTION 说明
-f 要更改的对象列表
-i 忽略故障
-log 记录输出的目录

一次更改多个文件的权限和所有权。

distcp

递归复制文件或目录。有关更多信息,请参阅 Hadoop DistCp 指南

dtutil

用法:hadoop dtutil [-keytab keytab_file -principal principal_name ] subcommand [-format (java|protobuf)] [-alias alias ] [-renewer renewer ] filename…

用于在凭据文件中获取和管理 Hadoop 委派令牌的实用工具。它旨在替换更简单的命令 fetchdt。有多个子命令,每个子命令都有自己的标志和选项。

对于每个写出文件的子命令,-format 选项将指定要使用的内部格式。java 是与 fetchdt 匹配的旧格式。默认值为 protobuf

对于连接到服务的每个子命令,提供了方便的标志来指定用于身份验证的 Kerberos 主体名称和 keytab 文件。

子命令 说明
print

   [-alias alias ]

   filename [ filename2 ...]
打印 filename(和 filename2 …)中包含的令牌中的字段。

如果指定了 别名,则仅打印与 别名 匹配的令牌。否则,打印所有令牌。
get URL

   [-service 方案 ]

   [-format (java|protobuf)]

   [-alias alias ]

   [-renewer 更新程序 ]

   文件名
URL 处的服务获取令牌并将其置于 文件名 中。

URL 是必需的,并且必须紧跟 get

URL 是服务 URL,例如 hdfs://localhost:9000

别名 将覆盖令牌中的服务字段。

它适用于具有外部和内部名称的主机,例如 firewall.com:14000

文件名 应放在最后,并且是令牌文件的文件名。

如果不存在,则会创建它。否则,令牌将添加到现有文件中。

-service 标志仅应与以 httphttps 开头的 URL 一起使用。

以下等效:hdfs://localhost:9000/http://localhost:9000 -service hdfs
追加

   [-format (java|protobuf)]

   文件名 文件名2 [ 文件名3 ...]
将前 N 个文件名的内容追加到最后一个文件名上。

当多个文件中存在具有公共服务字段的令牌时,将覆盖较早文件的令牌。

也就是说,始终保留最后一个文件中存在的令牌。
remove -alias 别名

   [-format (java|protobuf)]

   filename [ filename2 ...]
从指定的每个文件中,删除与 别名 匹配的令牌,并使用指定的格式写出每个文件。

必须指定 别名
cancel -alias 别名

   [-format (java|protobuf)]

   filename [ filename2 ...]
remove 相同,但令牌也会使用令牌对象中指定的服务取消。

必须指定 别名
renew -alias 别名

   [-format (java|protobuf)]

   filename [ filename2 ...]
对于指定的每个文件,续订与 别名 匹配的令牌,并使用指定的格式写出每个文件。

必须指定 别名
import base64

   [-alias alias ]

   文件名
从 base64 令牌导入令牌。

别名 将覆盖令牌中的服务字段。

fs

此命令在 文件系统 Shell 指南 中有记录。在使用 HDFS 时,它是 hdfs dfs 的同义词。

gridmix

Gridmix 是 Hadoop 集群的基准测试工具。可以在 Gridmix 指南 中找到更多信息。

jar

用法:hadoop jar <jar> [mainClass] args...

运行 jar 文件。

使用 yarn jar 来启动 YARN 应用程序。

jnipath

用法:hadoop jnipath

打印计算出的 java.library.path。

kerbname

用法:hadoop kerbname principal

通过 auth_to_local 规则将命名的主体转换为 Hadoop 用户名。

示例:hadoop kerbname [email protected]

kdiag

用法:hadoop kdiag

诊断 Kerberos 问题

key

用法:hadoop key <子命令> [选项]

COMMAND_OPTION 说明
create keyname [-cipher cipher] [-size size] [-description description] [-attr attribute=value] [-provider provider] [-strict] [-help] 在由 -provider 参数指定的提供程序中为 keyname 参数指定的名称创建新密钥。如果提供程序使用默认密码,-strict 标志将导致命令失败。您可以使用 -cipher 参数指定密码。当前的默认密码为 “AES/CTR/NoPadding”。默认密钥大小为 128。您可以使用 -size 参数指定请求的密钥长度。可以使用 -attr 参数指定任意 attribute=value 样式属性。-attr 可以多次指定,每个属性一次。
roll keyname [-provider provider] [-strict] [-help] 在使用 -provider 参数指示的提供程序中为指定密钥创建新版本。如果提供程序使用默认密码,-strict 标志将导致命令失败。
delete keyname [-provider provider] [-strict] [-f] [-help] 从由 -provider 指定的提供程序中删除 keyname 参数指定的密钥的所有版本。如果提供程序使用默认密码,-strict 标志将导致命令失败。除非指定 -f,否则该命令会要求用户确认。
list [-provider provider] [-strict] [-metadata] [-help] 显示 core-site.xml 中配置的或使用 -provider 参数指定的特定提供程序中包含的密钥名称。如果提供程序使用默认密码,-strict 标志将导致命令失败。-metadata 显示元数据。
check keyname [-provider provider] [-strict] [-help] 检查 core-site.xml 中配置的或使用 -provider 参数指定的特定提供程序中包含的 keyname 的密码。如果提供程序使用默认密码,-strict 标志将导致命令失败。

| -help | 打印此命令的用法 |

通过 KeyProvider 管理密钥。有关 KeyProvider 的详细信息,请参阅透明加密指南

提供程序经常要求提供密码或其他密钥。如果提供程序需要密码但找不到密码,它将使用默认密码并发出警告消息,指出正在使用默认密码。如果提供了 -strict 标志,警告消息将变为错误消息,并且命令将立即返回错误状态。

注意:某些 KeyProvider(例如 org.apache.hadoop.crypto.key.JavaKeyStoreProvider)不支持大写密钥名称。

注意:某些 KeyProvider 不会直接执行密钥删除(例如,执行软删除或延迟实际删除,以防止错误)。在这些情况下,在删除密钥后,使用相同名称创建/删除密钥时可能会遇到错误。有关详细信息,请检查底层 KeyProvider。

kms

用法:hadoop kms

运行 KMS(密钥管理服务器)。

trace

查看和修改 Hadoop 跟踪设置。请参阅跟踪指南

version

用法:hadoop version

打印版本。

CLASSNAME

用法:hadoop CLASSNAME

运行名为 CLASSNAME 的类。该类必须是某个包的一部分。

envvars

用法:hadoop envvars

显示已计算的 Hadoop 环境变量。

管理命令

Hadoop 集群管理员有用的命令。

daemonlog

用法

hadoop daemonlog -getlevel <host:port> <classname> [-protocol (http|https)]
hadoop daemonlog -setlevel <host:port> <classname> <level> [-protocol (http|https)]
COMMAND_OPTION 说明
-getlevel host:port classname [-protocol (http|https)] 打印在 host:port 处运行的守护进程中,由限定的 classname 标识的日志的日志级别。-protocol 标志指定连接的协议。
-setlevel host:port classname level [-protocol (http|https)] 设置在 host:port 处运行的守护进程中,由限定的 classname 标识的日志的日志级别。-protocol 标志指定连接的协议。

动态获取/设置由守护进程中限定的类名标识的日志的日志级别。默认情况下,该命令发送 HTTP 请求,但可以使用参数 -protocol https 覆盖此设置以发送 HTTPS 请求。

示例

$ bin/hadoop daemonlog -setlevel 127.0.0.1:9870 org.apache.hadoop.hdfs.server.namenode.NameNode DEBUG
$ bin/hadoop daemonlog -getlevel 127.0.0.1:9871 org.apache.hadoop.hdfs.server.namenode.NameNode DEBUG -protocol https

请注意,此设置不是永久性的,并且会在守护进程重新启动时重置。此命令通过向守护进程的内部 Jetty servlet 发送 HTTP/HTTPS 请求来工作,因此它支持以下守护进程

  • 通用
    • 密钥管理服务器
  • HDFS
    • 名称节点
    • 辅助名称节点
    • 数据节点
    • 日志节点
    • HttpFS 服务器
  • YARN
    • 资源管理器
    • 节点管理器
    • 时间线服务器

文件

etc/hadoop/hadoop-env.sh

此文件存储所有 Hadoop shell 命令使用的全局设置。

etc/hadoop/hadoop-user-functions.sh

此文件允许高级用户覆盖某些 shell 功能。

~/.hadooprc

此文件存储单个用户的个人环境。它在 hadoop-env.sh 和 hadoop-user-functions.sh 文件之后处理,并且可以包含相同的设置。