021_在Eclipse Indigo中安装插件hadoop-eclipse-plugin-1.2.1.jar,直接运行wordcount程序

1、工具介绍

 Eclipse Idigo、JDK1.7-32bit、hadoop1.2.1、hadoop-eclipse-plugin-1.2.1.jar(自己网上下载)

2、插件安装步骤

  1)将hadoop-eclipse-plugin-1.2.1.jar放到eclipse安装目录的plugins文件夹中,重新启动eclipse。

  
  2)打开Window-->Preferens,发现Hadoop Map/Reduce选项,说明插件安装成功,配置Hadoop installation directory为本地Hadoop 安装解压的目录。此处选择是hadoop1.2.1软件包在windows中的文件夹,其中的各种文件可以都不用配置,与Linux中的hadoop没有什么特殊的联系,原生态的hadoop1.2.1.tar.gz解压的就行。

  
  3)选择window -> open perspective  -> Other... , 选择有大象图标的 Map/Reduce,打开Map/Reduce的开发环境,右下角多了一个Map/Reduce Locations的框。

  

4)选择Map/Reduce Locations 标签,点击标签最右边的大象图标,即齿轮状图标右侧的大象图标,打开参数设置页面。

 Location Name : 参数设置名称
 Map/Reduce Master :Hadoop集群的Map/Reduce地址,应与mapredsite.xml中的mapred.job.tracker设置相同
 Host: hadoop-master.dragon.org
 port: 9001
 DFS Master :Hadoop的master服务器地址,应与core-site.xml中的 fs.default.name 设置相同
 Host: hadoop-master.dragon.org
 Port: 9000
设置完成后,点击Finish

5)接着点击 【Advanced parameters】从中找见【hadoop.tmp.dir】,修改为Hadoop集群【core-site.xml】中配置的值

6)重启hadoop配置一下两步(若不重启能找到的话也可以直接配置,本次测试时重启了,否则找不到)

配置【dfs.permissions】,修改为Hadoop集群【hdfs-site.xml】中配置的值【false】
配置【dfs.replication】,修改为Hadoop集群【hdfs-site.xml】中配置的值【1】

3、跑wordcount程序测试

因为本人已经测试完成,这个是后期整理,借用几张梦琪老师的图用一下,不影响运行,节省时间;

1)使用Eclipse  创建MapReduce工程,你会发现多了好多配置的jar文件,自动导入到项目中了。

2)将wordcount程序拷贝到该工程目录src文件夹下;程序同上一篇博客的wordcount程序。

  1 package org.dragon.hadoop.mr;
  2 
  3 import java.io.IOException;
  4 import java.util.StringTokenizer;
  5 
  6 import org.apache.hadoop.conf.Configuration;
  7 import org.apache.hadoop.fs.Path;
  8 import org.apache.hadoop.io.IntWritable;
  9 import org.apache.hadoop.io.LongWritable;
 10 import org.apache.hadoop.io.Text;
 11 import org.apache.hadoop.mapreduce.Job;
 12 import org.apache.hadoop.mapreduce.Mapper;
 13 import org.apache.hadoop.mapreduce.Reducer;
 14 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 15 
 16 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 17 import org.apache.hadoop.util.GenericOptionsParser;
 18 
 19 import com.sun.accessibility.internal.resources.accessibility;
 20 import com.sun.org.apache.xpath.internal.Arg;
 21 
 22 /**
 23  * 
 24  * @author ZhuXY  
 25  * @time   2016-3-7 下午3:37:54
 26  * 
 27  * MapReduce 初级案例 wordcount程序
 28  */
 29 public class MyWorldCount {
 30     
 31     //Mapper 区域
 32     /**
 33      * <KEYIN,         VALUEIN,         KEYOUT,         VALUEOUT>
 34      * 输入key类型    输入value类型    输出key类型        输出value类型
 35      *
 36      */
 37     
 38     /**
 39      * WordCount程序map类
 40      *
 41      */
 42     static  class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
 43         
 44         private Text word=new Text();
 45         private final static IntWritable one=new IntWritable(1);
 46         
 47         //快捷键alt+shift+s
 48         //map方法每次只读取一行数据,换句话说就是每行启动一个map函数
 49         @Override
 50         protected void map(LongWritable key, Text value, Context context)
 51                 throws IOException, InterruptedException {
 52             
 53             //获取每行数据的值
 54             String lineValue=value.toString();
 55             
 56             //进行分割
 57             StringTokenizer stringTokenizer=new StringTokenizer(lineValue);
 58             
 59             //遍历
 60             while (stringTokenizer.hasMoreElements()) {
 61                 
 62                 //获取每个值
 63                 String worldValue=stringTokenizer.nextToken();
 64                 
 65                 //设置map, 输入的key值
 66                 word.set(worldValue);
 67                 context.write(word, one); //如果出现就出现一次,存在每行出现几次,这时候键的值一样,多个键值对
 68             }
 69         }
 70     }
 71     
 72     //Reducer 区域
 73     /**
 74      * <KEYIN, VALUEIN, KEYOUT, VALUEOUT>
 75      * KEYIN key, Iterable<VALUEIN> values, Context context
 76      */
 77     
 78     /**
 79      * WordCount程序reduce类
 80      *
 81      */
 82     static class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
 83 
 84         private IntWritable resultIntWritable=new IntWritable();
 85         //这里key还是key。但是value变成了values
 86         @Override
 87         protected void reduce(Text key, Iterable<IntWritable> values,
 88                 Context context)
 89                 throws IOException, InterruptedException {
 90             //用于累加的变量
 91             
 92             int sum=0;
 93             //循环遍历Interable
 94             for(IntWritable value:values)
 95             {
 96                 //累加
 97                 sum+=value.get();
 98             }
 99             
100             //设置总次数
101             resultIntWritable.set(sum);
102             context.write(key, resultIntWritable);
103         }
104     }
105     
106     //Client  区域
107     public static void main(String[] args) throws Exception {
108         
109         //方便起见直接在此处写死了,可以在run as的配置中配置参数
110         args=new String[]{
111                 "hdfs://hadoop-master.dragon.org:9000/wc/wcinput/",
112                 "hdfs://hadoop-master.dragon.org:9000/wc/wcoutput/"            
113         };
114         
115         //获取配置文件信息
116         Configuration configuration=new Configuration();
117         
118         //当命令格式不正确的时候,提示,类似于shell中的命令提示
119 //        String[] otherArgs = new GenericOptionsParser(configuration, 
120 //                args).getRemainingArgs();
121 //                if (otherArgs.length != 2) {
122 //                System.err.println("Usage: wordcount <in> <out>");
123 //                System.exit(2);
124 //                }
125         
126         //创建job。设置配置文件信息和Job名称
127         Job job=new Job(configuration,"wc");
128         
129         //1、设置Job运行的类
130         job.setJarByClass(MyWorldCount.class);
131         
132         //2、设置Mapper类和Reducer类
133         job.setMapperClass(MyMapper.class);
134         job.setReducerClass(MyReducer.class);
135         
136         //3、设置输入文件的目录和输出文件目录
137         FileInputFormat.addInputPath(job, new Path(args[0]));
138         FileOutputFormat.setOutputPath(job, new Path(args[1]));
139         
140         //4、设置输出结果的key和value的类型
141         job.setOutputKeyClass(Text.class);
142         job.setOutputValueClass(IntWritable.class);
143         
144         //5、提交Job等待运行结果,并在客户端显示运行信息
145         boolean isSuccess=job.waitForCompletion(true);
146         
147         //6、结束程序
148         System.exit(isSuccess?0:1);
149     }
150 }
View Code

 

   3)直接在类中右击-->Run on hadoop

  4)报错如下;Hadoop PriviledgedActionException

  解决方案:

  a、简称“修改源码”——找到hadoop1.2.1的源码,就是你第二步添加的源码,

修改%HADOOP_HOME%/src/core/org/apache/hadoop/fs/FileUtil.java里面checkReturnValue方法,注释掉方法内容:

  b、简称“导入包修改”。显然第一种办法不是很合适。

  到源码中找到该java文件,在该项目中建立与该文件所在的packet相同的packet,然后将FileUtils.java拷贝到该packet下面,注释掉上述注释掉的内容。

  原因:Eclipse对packet的加载规则是先用本项目下面的,在用库中的。

  5)再次运行wordcount程序没有问题了。

  6)备注:如还有问题参考下面一张图片:

到此结束,以后插件就可以用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值