hadoop2.8.2命令手册
概述
所有的hadoop命令都是靠bin/hadoop脚本来执行。不带任何参数执行bin/hadoop脚本会打印出所有命令的描述。
用法如下:
hadoop [--config confdir] [--loglevel loglevel] [命令] [常规选项] [命令选线]
选项 | 描述 |
---|---|
–config confdir | 覆盖默认配置目录,默认是${HADOOP_HOME}/conf |
–loglevel loglevel | 日志水命,可用的值:FATAL, ERROR, WARN, INFO, DEBUG, 和TRACE. 默认是INFO. |
常规选项 | 多个命令都支持的通用选项。 |
命令选线 | Hadoop子项目的各种命令选项,HDFS和YARN不在本文档中 |
常规选项
很多子命令都包含一些通用的配置选项,如下:
选项 | 描述 |
---|---|
-archives | 逗号分隔的档案文件,只适用于job。 |
-conf | 指定应用的配置文件 |
-D | 键值对,给属性指定值 |
-files | 指定要拷贝到map reduce集群的文件的逗号分隔的列表。 只适用于job。 |
-fs | 指定namenode的URL |
-jt | 指定ResourceManager,只适用于job。 |
-libjars | 逗号分隔的jar文件列表,逗号分开。只适用于job。 |
Hadoop命令
下面所有的命令都可以使用hadoop脚本来执行,他们可以被分为两类:用户命令和管理命令。
用户命令
hadoop集群中用户可用的命令。
archive
建一个hadoop档案文件。Hadoop archives是特殊的档案格式。一个Hadoop archive对应一个文件系统目录。 Hadoop archive的扩展名是.har。Hadoop archive包含元数据(形式是_index和_masterindx)和数据(part-)文件。_index文件包含了档案中的文件的文件名和位置信息。
怎么创建一个档案
hadoop archive -archiveName name -p <parent> [-r <replication factor>] <src>* <dest>
由-archiveName选项指定你要创建的archive的名字。比如foo.har。archive的名字的扩展名应该是*.har。parent参数是为了指定相对路径,例子如下:
-p /foo/bar a/b/c e/f/g
/foo/bar是一个parent路径,a/b/c 和e/f/g是parent的相对路径。注意这是Map/Reduce
job创建的档案,你需要一个map reduce集群来运行,详细的例子接下来会讲到。
-r指出一个复制因子,如果不指定,默认是3。
如果你仅想归档一个单独的目录/foo/bar,那么你可以向下面这样:
hadoop archive -archiveName zoo.har -p /foo/bar -r 3 /outputdir
如果你指定的源文件在加密区,那么他们会先解密然后写进档案目录。如果har文件不在加密区,就是明文格式,如果har文件在加密区就是加密形式。
如何查看档案文件
archive作为文件系统层暴露给外界。所以所有的fs shell命令都能在archive上运行,但是要使用不同的URI。 另外,archive是不可改变的。所以重命名,删除和创建都会返回错误。Hadoop Archives 的URI是:
har://scheme-hostname:port/archivepath/fileinarchive
如果没有scheme-hostname它会使用默认的文件系统。这种情况下URI是这种形式:
har:///archivepath/fileinarchive
怎么删除档案
所有的FS SHELL命令都可以用在档案文件上,删除档案照搬过来就可以。
按顺序删除档案:
hdfs dfs -cp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
使用DistCp并行删除:
hadoop distcp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
实例
hadoop archive -archiveName foo.har -p /user/hadoop -r 3 dir1 dir2 /user/zoo
上面的命令使用/user/hadoop作为相对目录。然后把/user/hadoop/dir1和/user/hadoop/dir2归档到/user/zoo/forr.har文件中。归档并不会删除源文件。如果你想删除源文件,那么你需要自己删除。-r指定为3,也就是复制因子是3。
就像在文件系统上使用ls一样,查看归档文件也是如此简单。你可以使用下面的命令查看上面的归档文件:
hdfs dfs -ls -R har:///user/zoo/foo.har/
为了更好的理解-p的意义,让我们重温一下上面的例子,如果你仅仅使用ls(而不是ls -R),像下面这样:
hdfs dfs -ls har:///user/zoo/foo.har
输出结果如下:
har:///user/zoo/foo.har/dir1
har:///user/zoo/foo.har/dir2
假如你使用下面命令归档:
hadoop archive -archiveName foo.har -p /user/ hadoop/dir1 hadoop/dir2 /user/zoo
那么使用ls查看归档文件如下:
hdfs dfs -ls har:///user/zoo/foo.har
输出结果就是:
har:///user/zoo/foo.har/hadoop/dir1
har:///user/zoo/foo.har/hadoop/dir2
需要注意的是归档文件是相对于/user而不是/user/hadoop
hadoop档案盒MapReduce
在MapReduce中使用档案文件,只需要指定一个不同的输入文件系统。如果在HDFS中存在档案文件/user/zoo/foo.har,此文件需要作为MapReduce的输入,你需要做的就是指定输入目录为:har:///user/zoo/foo.har。因为档案文件是作为一个文件系统暴露给MapReduce的,也可以使用档案中所有的文件作为输入。
checknative
用法:
hadoop checknative [-a] [-h]
- -a:检查所有可用的库
- -h:打印帮助
这个命令检查Hadoop可用的本地代码。查看本地库获得更多信息。
classpath
用法
hadoop classpath [--glob |--jar <path> |-h |--help]
- glob:扩展通配符
- jar:jar文件路径
- h,help:帮助
打印classpath需要获得Hadoop jar和需要的库。如果不带参数调用,那么打印出的就是命令脚本设置的classpath,会带有通配符。额外的选项是使用通配符打印classpath以及写classpath到一个jar文件的manifest中。后者在使用中是很有用的,尤其是当通配符不可用,或者扩展classpath超过了最大命令行长度。
credential
用法:
hadoop credential <subcommand> [options]
命令选项 | 描述 |
---|---|
create alias [-provider provider-path] [-strict] [-value credential-value] | 用一个别名存储用户凭证,除非指定了-provider,要不然需要在core-site.xml中指定hadoop.security.credential.provider.path参数的值。如果provider使用的是默认密码的话,-strict标识会导致命令行失败。使用-value标识提供凭证的值 |
delete alias [-provider provider-path] [-strict] [-f] | 使用别名删除凭证,命令会被询问确认,除非指定了-f |
list [-provider provider-path] [-strict] | 列出所有的凭证别名 |
此命令管理凭证,密码。
CredentialProvider API允许分离应用,以及如何存储他们的密码。为了指定特定的provider类型和位置,使用core-site.xml中的hadoop.security.credential.provider.path属性或者使用命令行选项-provider。provider路径是逗号分开的URL。例如:
user:///,jceks://file/tmp/test.jceks,jceks://[email protected]/my/path/test.jceks
当前用户的凭证文件需要通过User Provider,本地文件/tmp/test.jceks是一个java keystore Provider,HDFS文件 nn1.example.com/my/path/test.jceks也是一个java keystore Provider。
当使用credential 命令时,通常给一个特定的provider指定密码。为了显示的指定使用哪个provider,应该使用-provider选项。否则,如果给定多个provider,那么就会选择第一个非临时的provider。这也许不是你想要的。
Provider通常需要一个密码,如果没有密码,那么就是用默认的。这个时候就会发出一条警告消息,如果使用了-strict标识,这条警告消息就会变一个错误消息并且命令马上返回。
distcp
递归复制目录和文件。查看DistCp手册
之后会翻译到。
fs
此命令查看FS SHELL文档
之后会翻译到。
jar
用法:
hadoop jar <jar> [mainClass] args...
执行一个jar文件。
使用yarn jar启动一个YARN应用。
key
用法:
hadoop key <subcommand> [options]
需要说明的是下面的-provider,-strict,-f选项和credential命令中的一致,这里就不在赘述。
命令选项 | 描述 |
---|---|
create keyname [-cipher cipher] [-size size] [-description description] [-attr attribute=value] [-provider provider] [-strict] [-help] | 创建一个key使用keyname指定名称,使用-provider指定provider。可以使用-cipher来指定cipher ,默认是AES/CTR/NoPadding。默认的key大小是128。你可以使用-size来制定key的长度。-attr来指定任意的键值对,-attr可以指定多次,一次指定一个键值对。 |
roll keyname [-provider provider] [-strict] [-help] | 为key创建一个新的版本 |
delete keyname [-provider provider] [-strict] [-f] [-help] | 通过keyname删除所有的key版本 |
list [-provider provider] [-strict] [-metadata] [-help] | 根据指定的provider列出keyname,-metadata将会展示元数据 |
-help | 打印此命令的用法 |
trace
查看和修改Hadoop的跟踪设置,查看Tracingshouce
version
用法:
hadoop version
打印版本号。
CLASSNAME
用法:
hadoop CLASSNAME
执行名称为CLASSNAME的类。
管理命令
hadoop集群中管理员使用的命令。
daemonlog
用法:
hadoop daemonlog -getlevel <host:httpport> <classname>
hadoop daemonlog -setlevel <host:httpport> <classname> <level>
命令选项 | 描述 |
---|---|
-getlevel host:httpport classname | 打印指定classname的日志水平,这个命令连接http:///logLevel?log= |
-setlevel host:httpport classname level | 给classname设置日志水平,这个命令连接http:///logLevel?log=&level= |
获取或者设置class name的日志水平。
实例:
bin/hadoop daemonlog -setlevel 127.0.0.1:50070 org.apache.hadoop.hdfs.server.namenode.NameNode DEBUG
上一篇: HADOOP基本操作命令
下一篇: sql sum() 求和函数的用法