B.3 Hadoop使用

B.3.1 命令行管理Hadoop集群

在使用Hadoop时,最常用的就是使用命令行来管理HDFS,可以上传下载文件,管理集群节点,查看集群状态,运行指定进程等,命令的运行格式如下:


bin/hadoop command[genericOptions][commandOptions]


这里以运行文件系统工具的几个简单命令为例进行说明,有关命令行管理集群的详细内容请参见本书第九章。


bin/hadoop fs-ls hdfs_path//查看HDFS目录下的文件和子目录

bin/hadoop fs-mkdir hdfs_path//在HDFS上创建文件夹

bin/hadoop fs-rmr hdfs_path//删除HDFS上的文件夹

bin/hadoop fs-put local_file hdfs_path//将本地文件copy到HDFS上

bin/hadoop fs-get hdfs_file local_path//复制HDFS文件到本地

bin/hadoop fs-cat hdfs_file//查看HDFS上某文件的内容


B.3.2 运行MapReduce框架程序

本小节介绍如何编译自己编写的MapReduce框架程序,并在Hadoop上运行。假设自己编写的程序文件名为MyMapred.java,并放置在Hadoop安装目录下,即/home/u/hadoop-1.0.1。

1)首先在hadoop安装目录下创建MyMapred文件夹,然后编译自己的程序。命令:


javac-classpath hadoop-core-1.0.1.jar:lib/commons-cli-1.2.jar-d MyMapred MyMapred.java


2)将编译好的程序打包成JAR文件,命令:


jar-cvf MyMapred.jar-C MyMapred.


3)在Hadoop上运行JAR文件。

在单节点方式的Hadoop下,只需要在准备好本地的输入文件之后(此处假设为/home/u/input),在命令行输入下面的命令就可以运行程序(output文件夹应不存在):


bin/hadoop jar MyMapred.jar MyMapred/home/u/input output


运行结束之后就可以在output路径下查看程序的输出结果。

在伪分布方式和完全分布方式的Hadoop集群下,首先在集群上创建输入数据路径(此处为input),然后将本地的程序输入数据文件上传到HDFS上的输入路径中,这两个步骤需要使用的命令在“命令行管理Hadoop集群”小节已讲到,此处不再赘述。准备好输入路径之后就使用同样的命令运行JAR文件:


bin/hadoop jar MyMapred.jar MyMapred input output


需要注意的是,命令中的input和output都是Hadoop集群上的路径,而非单节点下的本地目录。这里同样需要保证output路径在HDFS上并不存在。运行结束之后,就可以使用前面介绍的命令行命令来查看output文件夹下的输出文件名和输出文件的内容。