将eclipse下编译的class文件打包成hadoop集群可以运行的jar包的过程

转载 2012年12月06日 20:29:10

把eclipse下编译的class文件打包成hadoop集群可用文件的过程

首先要在eclipse下运行成功,在工程项目下打bin文件夹为jar文件,

                          压缩方式为: jar -cvf sort.jar -C bin/ .

      这个是一个排序程序,代码如下

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class Sort {
   public static class Map extends Mapper<Object, Text, IntWritable, IntWritable>{
    private static IntWritable data= new IntWritable();
    public void map(Object key, Text value,Context context)throws IOException, InterruptedException{
     String line = value.toString();
     data.set(Integer.parseInt(line));
     context.write(data, new IntWritable(1));
    }
   }
  
   public static class Reduce extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable>{
    private static IntWritable linenum = new IntWritable(1);
   
    public void reduce (IntWritable key, Iterable<IntWritable> value, Context context)throws IOException , InterruptedException{
     for(IntWritable val:value){
      context.write(linenum, key);
     }
     linenum = new IntWritable(linenum.get()+1);
    }
   }
  
   public static void main(String[] args)throws Exception{
    Configuration conf = new Configuration();
    String [] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if(otherArgs.length!=2){
     System.err.println("Usage: wordcount <in> <out>");
     System.exit(2);
    }
    Job job=new Job(conf,"Sort");
    job.setJarByClass(Sort.class);
    job.setMapperClass(Map.class);
    job.setReducerClass(Reduce.class);
    job.setOutputKeyClass(IntWritable.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0:1 );
   }
}

压缩完以后就可以在集群上运行该程序了,运行方式为:

hadoop jar  sort.jar  Sort /tmp/sort/inputfile/ /tmp/sort/outputfile
然后在项目中刷新后即可看到输出结果:


顺便再加一些关于添加bash程序和python程序到hadoop流中的方法:

首先说一下bash文件,例如是reduce.sh,内容很简单就是grep xxx

要调用它的方式为:

hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar -input input -output output -mapper /bin/cat -reducer reduce.sh -file reduce.sh

再说一个python的例子,假如文件叫reduce.py

调用方式:

hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar -input input -output output -mapper reduce.py -reducer aggregate -file reduce.py

这里解释一下,aggregate这个是hadoop提供的一个包,它提供的是一个reduce函数以及一个combine函数。它的功能是类似求和、取极值等功能。

Eclipse将class文件重新打包成jar

有时候会遇到这样的问题,明明也用了和别人一样的库,但是自己的程序就不能运行,各种诡异的问题,很明显这可能是库版本的“锅”-_-!,为此需要把class文件(存在于他人的jar中)重新打包成jar。利用...
  • hz_1943
  • hz_1943
  • 2016年07月07日 14:43
  • 1945

Hadoop小兵笔记【三】利用Eclipse将wordcount打包成可以运行在hadoop上的jar包

hadoop版本为hadoop1.2.1 eclipse版本为eclipse-standard-kepler-SR2-win32-x86_64 WordCount.java为hadoop-...
  • cafuc46wingw
  • cafuc46wingw
  • 2015年05月04日 16:14
  • 1606

eclipse打包成可运行.jar文件

问题背景因为之前一直在开发测试安卓,没有涉足PC平台,一般的java程序也是直接在ecplise中编辑完成后,直接运行的,没有进行过其他考虑,现在因为要用云或者虚拟机进行程序调用,这样直接在ecpli...
  • weiqiang_1989
  • weiqiang_1989
  • 2016年10月12日 17:22
  • 3905

如何在eclipse中编写好程序,然后打包成jar文件,在hadoop分布式集群上运行

(1)首先将下载好的hadoop源码解压,将解压后顶级目录和lib中的压缩文件加载到你的工程中(他们包括了hadoop源码和一些需要的第三方源码),然后就可以编写hadoop程序了。 (2)编写好h...
  • WitsMakeMen
  • WitsMakeMen
  • 2012年12月06日 21:17
  • 10691

为何Eclipse编译后的class文件不能在cmd下用java运行?

原因1:存储class的文件的路径中含有空格,这样的classpath中存储的路径只是空格之前的,所以路径不正确,自然jvm运行时就会出现”错误: 找不到或无法加载主类“。 原因2:在Eclipse...
  • u011120118
  • u011120118
  • 2014年12月21日 17:17
  • 469

得到.java文件的.class文件、将目录打包成jar文件

1.将.java文件转换成.class文件 对于数量较少的文件可以按以下步骤: 第一步:在开始菜单,搜索框中输入“cmd”,进入黑口; 第二步:切换到java文件的存放路径; 第三步:输入...
  • qingmengwuhen1
  • qingmengwuhen1
  • 2016年12月20日 15:07
  • 921

Linux下用Eclipse开发调试Hadoop程序后打jar包后,到Hadoop集群上运行

Linux系统(Ubuntu14.10)下Hadoop开发环境搭建 下载Eclipse,解压安装,下载hadoop-eclipse-plugin-2.5.1.jar插件,放至/eclipse/pl...
  • shanyuelanhua
  • shanyuelanhua
  • 2015年05月21日 14:33
  • 1391

如何将多个Java源文件打包成jar包

1.在存放Java源文件的文件夹下对所有源文件进行编译生成 .class 文件 如:f:\JSON-java-master>javac *.java (注意:多个类互相引用的时候,要一起编译,不...
  • ly969434341
  • ly969434341
  • 2015年06月30日 17:13
  • 8395

eclipse -- 手把手教你如何把java代码,打包成jar文件以及转换为exe可执行文件

1、背景:       学习java时,教材中关于如题问题,只有一小节说明,而且要自己写麻烦的配置文件,最终结果却只能转换为jar文件。实在是心有不爽。此篇博客教你如何方便快捷地把java代码,打...
  • TheSnowBoy_2
  • TheSnowBoy_2
  • 2016年06月30日 08:47
  • 13247

多个.class 打包成 .jar

2009-05-21 16:35java jar命令 比如您的class包存放路径为 d:/com/demo (demo是个目录,下面含有子文件夹及class文件) 具体操作如下: 1、打开dos窗口...
  • FG2006
  • FG2006
  • 2010年08月18日 14:11
  • 10019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将eclipse下编译的class文件打包成hadoop集群可以运行的jar包的过程
举报原因:
原因补充:

(最多只允许输入30个字)