编译并安装Hadoop分布式运行环境之后,第一个要用到的命令行就是hadoop。需要注意的是:每个发行版的命令行语法有些不一样,可以通过hadoop -help进行查看。

0x00 hadoop命令行的语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
CLASSNAME run the class named CLASSNAME
or
where COMMAND is one of:
fs run a generic filesystem user client
version print the version
jar <jar> run a jar file
note: please use "yarn jar" to launch
YARN applications, not this command.
checknative [-a|-h] check native hadoop and compression libraries availability
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath prints the class path needed to get the
credential interact with credential providers
Hadoop jar and the required libraries
daemonlog get/set the log level for each daemon
trace view and modify Hadoop tracing settings

Most commands print help when invoked w/o parameters.

每个命令的具体含义如下:

命令 说明
version 打印hadoop版本
checknative 检测native库和压缩库的可用性
fs hdfs命令行的客户端
jar 运行jar包里的mapreduce程序(推荐使用yarn jar)
distcp 用于大规模集群内部和集群之间拷贝的工具
archive 将小文件进行hadoop存档
classpath 打印类路径
credential 管理凭证供应商
daemonlog 获取/设置每个守护程序的日志级别
trace 查看和修改Hadoop跟踪设置

其中,最常用的有 fs jar archive distcp 。

0x01 hadoop fs

调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式。所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。一个HDFS文件或目录比如/parent/child可以表示成hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child(假设你配置文件中的默认值是namenode:namenodeport)。大多数FS Shell命令的行为和对应的Unix Shell命令类似。

1
2
3
4
5
6
7
8
hadoop fs -ls /
hadoop fs -mkdir /external
hadoop fs -touchz /external/readme
hadoop fs -put ${HADOOP_HOME}README.txt /external
hadoop fs -du -h /external
hadoop fs -find /external readme
hadoop fs -tail /external/README.txt
hadoop fs -rm /external/readme

还有很多命令,这里就不一一演示了。

0x02 hadoop archive

Hadoop archives是特殊的档案格式。一个Hadoop archive对应一个文件系统目录。Hadoop archive的扩展名是*.har。Hadoop archive包含元数据(形式是_index和_masterindx)和数据(part-*)文件。_index文件包含了档案中的文件的文件名和位置信息。

1
2
3
hadoop archive -archiveName readme.har -p / external /archive
hadoop fs -ls -R har:///archive/readme.har
hadoop fs -cat har:///archive/readme.har/external/README.txt

0x03 hadoop distcp

DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。

DistCp最常用在集群之间的拷贝:

1
hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo

这条命令会把nn1集群的/foo/bar目录下的所有文件或目录名展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务,然后每个TaskTracker分别执行从nn1到nn2的拷贝操作。注意DistCp使用绝对路径进行操作。

参考文献

Hadoop Commands Guide
数据仓库的初级手册