使用命令行编译打包运行HDFS程序的小示例

写在前面

本文以 Hadoop 2.7.7 分布式集群环境下的一个HDFS的判断文件存不存在的小实例来介绍Hadoop2.x 版本中如何使用命令行编译打包运行HDFS程序。

将 Hadoop 的classhpath 信息添加到 CLASSPATH 变量

Hadoop 2.x 版本中 jar 不再集中在一个 hadoop-core*.jar 中,而是分成多个 jar,如使用 Hadoop 2.7.7 运行 WordCount 实例至少需要如下三个 jar:

  • $HADOOP_HOME/share/hadoop/common/hadoop-common-2.7.7.jar
  • $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.7.jar
  • $HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar

实际上,通过命令 hadoop classpath 我们可以得到运行 Hadoop 程序所需的全部 classpath 信息。

在这里插入图片描述
我们将 Hadoop 的classhpath 信息添加到 CLASSPATH 变量中,在 ~/.bashrc 中增加如下几行:

export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH

别忘了执行 source ~/.bashrc 使变量生效。

编译、打包和执行HDFS程序

编写HDFS程序,这里以一个判断指定文件存不存在的小栗子为例

vi FileExist.java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileExist {
	public static void main(String[] args){
		try{
			String fileName = "test";
             Configuration conf = new Configuration();
             conf.set("fs.defaultFS", "hdfs://Master:9000");
             conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
             FileSystem fs = FileSystem.get(conf);
             if(fs.exists(new Path(fileName))){
				System.out.println("文件存在");
             }else{
             	 System.out.println("文件不存在");
             }
		}catch (Exception e){
			e.printStackTrace();
		}
	}
}

javac 命令编译FileExist.java

javac FileExist.java 

编译后可以看到生成了一个 .class 文件

在这里插入图片描述

接着把 .class 文件打包成 jar,才能在 Hadoop 中运行

jar -cvf FileExist.jar ./FileExist*.class

打包完成后,可以发现生成了一个FileExist.jar包
在这里插入图片描述

接下来我们可以运行jar包

hadoop jar FileExist.jar FileExist

FileExist.jar为我们运行的jar包,FileExist为jar包的main方法所在的类

运行结果

在这里插入图片描述
使用命令行编译打包运行HDFS程序的小示例就写到这里,当然你也可以使用命令行编译打包运行MapReduce程序,与编译打包运行HDFS程序异曲同工,具体可参考 使用命令行编译打包运行自己的MapReduce程序

发布了23 篇原创文章 · 获赞 16 · 访问量 9515

猜你喜欢

转载自blog.csdn.net/atuo200/article/details/105629703
今日推荐