Hadoop eclipse使用jar运行实例

来源:互联网 发布:java语法分析器 编辑:程序博客网 时间:2024/06/05 07:12

一、.在eclipse中使用编写程序,然后打成jar包,

程序代码:

[java] view plain copy
在CODE上查看代码片派生到我的代码片
  1. package tju.chc;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.Scanner;  
  6.   
  7. import org.apache.hadoop.conf.Configuration;  
  8. import org.apache.hadoop.fs.FSDataInputStream;  
  9. import org.apache.hadoop.fs.FSDataOutputStream;  
  10. import org.apache.hadoop.fs.FileStatus;  
  11. import org.apache.hadoop.fs.FileSystem;  
  12. import org.apache.hadoop.fs.Path;  
  13.   
  14. public class ResultFilter {  
  15.   
  16.     public static void main(String[] args) throws IOException{  
  17.         Configuration conf = new Configuration();  
  18.         //以下两句中,hdfs和local分别对应HDFS实例和本地文件系统实例  
  19.         FileSystem hdfs = FileSystem.get(conf);  
  20.         FileSystem local = FileSystem.getLocal(conf);  
  21.           
  22.         Path inputDir , localFile;  
  23.           
  24.         FileStatus[] inputFiles;  
  25.         FSDataOutputStream out = null;  
  26.         FSDataInputStream in = null;  
  27.           
  28.         Scanner scan;  
  29.         String str;  
  30.         byte[] buf;  
  31.         int singleFileLines;  
  32.         int numLines, numFiles, i;  
  33.           
  34.         if(args.length != 4) {  
  35.             //输入参数数量不够,提示参数格式后终止程序执行  
  36.             System.out.println("usage resultFilter <dfs path><local path><match str><single file lines>");  
  37.             return;  
  38.         }  
  39.           
  40.         inputDir = new Path(args[0]);  
  41.         singleFileLines = Integer.parseInt(args[3]);  
  42.           
  43.         inputFiles = hdfs.listStatus(inputDir);  
  44.         numLines = 0;  
  45.         numFiles = 1;  
  46.         localFile = new Path(args[1]);  
  47.         if(local.exists(localFile)){  
  48.             local.delete(localFile, true);  
  49.         }  
  50.         for(i = 0; i < inputFiles.length; i++){  
  51.             if(inputFiles[i].isDirectory() == true){  
  52.                 continue;  
  53.             }  
  54.             System.out.println(inputFiles[i].getPath().getName());  
  55.             in = hdfs.open(inputFiles[i].getPath());  
  56.             scan = new Scanner(in);  
  57.             while(scan.hasNext()){  
  58.                 str = scan.nextLine();  
  59.                 if(str.indexOf(args[2]) == -1){  
  60.                     continue;  
  61.                 }  
  62.                 numLines++;  
  63.                 if(numLines == 1){  
  64.                     localFile = new Path(args[1] + File.separator + numFiles);  
  65.                     out = local.create(localFile);  
  66.                     numFiles++;  
  67.                 }  
  68.                 buf = (str + "\n").getBytes();  
  69.                 out.write(buf, 0 , buf.length);  
  70.                 if(numLines == singleFileLines){  
  71.                     out.close();  
  72.                     numLines = 0;  
  73.                 }  
  74.                   
  75.             }  
  76.             scan.close();  
  77.             in.close();  
  78.         }  
  79.         if(out != null){  
  80.             out.close();  
  81.         }  
  82.           
  83.           
  84.     }  
  85. }  


  打包可参考

转自http://www.cnblogs.com/mq0036/p/3885407.html

1、首先要确认自己写的程序有没有报错。

2、第一次我写的是Web Project到现在,我一直没有执行成功,所以最好创建的是JavaProject

打包步骤:

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根目录,运行    

[java] view plain copy
在CODE上查看代码片派生到我的代码片
  1. 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、运行过程可能会遇到权限问题

0 0
原创粉丝点击