一、.在eclipse中使用编写程序,然后打成jar包,
程序代码:
package tju.chc;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class ResultFilter {
public static void main(String[] args) throws IOException{
Configuration conf = new Configuration();
//以下两句中,hdfs和local分别对应HDFS实例和本地文件系统实例
FileSystem hdfs = FileSystem.get(conf);
FileSystem local = FileSystem.getLocal(conf);
Path inputDir , localFile;
FileStatus[] inputFiles;
FSDataOutputStream out = null;
FSDataInputStream in = null;
Scanner scan;
String str;
byte[] buf;
int singleFileLines;
int numLines, numFiles, i;
if(args.length != 4) {
//输入参数数量不够,提示参数格式后终止程序执行
System.out.println("usage resultFilter <dfs path><local path><match str><single file lines>");
return;
}
inputDir = new Path(args[0]);
singleFileLines = Integer.parseInt(args[3]);
inputFiles = hdfs.listStatus(inputDir);
numLines = 0;
numFiles = 1;
localFile = new Path(args[1]);
if(local.exists(localFile)){
local.delete(localFile, true);
}
for(i = 0; i < inputFiles.length; i++){
if(inputFiles[i].isDirectory() == true){
continue;
}
System.out.println(inputFiles[i].getPath().getName());
in = hdfs.open(inputFiles[i].getPath());
scan = new Scanner(in);
while(scan.hasNext()){
str = scan.nextLine();
if(str.indexOf(args[2]) == -1){
continue;
}
numLines++;
if(numLines == 1){
localFile = new Path(args[1] + File.separator + numFiles);
out = local.create(localFile);
numFiles++;
}
buf = (str + "\n").getBytes();
out.write(buf, 0 , buf.length);
if(numLines == singleFileLines){
out.close();
numLines = 0;
}
}
scan.close();
in.close();
}
if(out != null){
out.close();
}
}
}
打包可参考
转自http://www.cnblogs.com/mq0036/p/3885407.html
1、首先要确认自己写的程序有没有报错。
2、第一次我写的是Web Project到现在,我一直没有执行成功,所以最好创建的是java Project
打包步骤:
1.在项目上,右键,选择Export。
2.进入到下图界面,选择Java 下面的JAR file
3.选择项目,确认必要的文件是否选中,选择保存jar文件包的路径,如下图
4.完成步骤3之后,点击Next,进入如下图界面:
5.直接点Next,进入下面的界面:
6.直接点Finish,jar文件包完成。
备注:
1.可以根据自己的需要选择一些条件。
2.打开jar文件包下面的META-INF\MANIFEST.MF这个文件,查看信息是否正确。
Class-Path:这个导入的是,本项目需要的一些其他的jar文件包
Main-Class:这个是main()方法所在的类的.class文件的路径,并且在最后有个回车符(如:上面显示的是,main()方法在test包下面的PostgresSQLSync类中。)
在windows下面运行jar包,确认导出的jar包是否存在问题:
1.打开DOS命令:通过cd切换到本项目路径下,然后,输入java -jar xxx.jar。
如果输入的信息,和运行项目时,在控制台输出的信息一样,就表示jar文件包已经完成。
下面是我碰到的一些问题:
1.在DOS命令中,出现如下错误时,表示Main-Class没有在META-INF\MANIFEST.MF这个文件中配置。
2.在DOS命令中,出现如下错误时,表示在Class-Path:或者在Main-Class:后面没有输入空格。
二、进入hadoop根目录,运行
bin/hadoop jar ~/local/chc/resultFilter.jar tju/chc/ResultFilter hdfs://master:9000/test/input/ file:///home/hadoopuser1/local/chc/tmp/ txt 50
注意,
1、运行命令前确保,hdfs已启动。 启动命令: bin/start-dfs.sh (sbin/start-dfs.sh) 或者 sbin/start-all.sh (hadoop 2.6.4版本)
2、运行过程可能会遇到权限问题