当前位置: > Linux集群 > Hadoop >

Hadoop伪分布配置与基于Eclipse开发环境搭建(3)

时间:2014-09-04 22:29来源:linux.it.net.cn 作者:it
  •     
  •          @Override 
  •            public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output,Reporter reporter)  
  •                throws IOException{  
  •              int maxValue = Integer.MIN_VALUE;  
  •              while (values.hasNext()) {  
  •                maxValue = Math.max(maxValue, values.next().get());  
  •              }  
  •              output.collect(key, new IntWritable(maxValue));  
  •            }  
  •     
  • TestHadoop.java

    
    
    1. package com.my.hadoop.test.main;  
    2.     
    3. import org.apache.hadoop.fs.Path;  
    4. import org.apache.hadoop.io.IntWritable;  
    5. import org.apache.hadoop.io.Text;  
    6. import org.apache.hadoop.mapred.FileInputFormat;  
    7. import org.apache.hadoop.mapred.FileOutputFormat;  
    8. import org.apache.hadoop.mapred.JobClient;  
    9. import org.apache.hadoop.mapred.JobConf;  
    10.     
    11. import com.my.hadoop.mapper.TestMapper;  
    12. import com.my.hadoop.reducer.TestReducer;  
    13.     
    14. public class TestHadoop {  
    15.            
    16.          public static void main(String[] args) throws Exception{  
    17.                      
    18.                    if (args.length != 2) {  
    19.                          System.err  
    20.                              .println("Usage: MaxTemperature <input path> <output path>");  
    21.                          System.exit(-1);  
    22.                        }  
    23.                    JobConf job = new JobConf(TestHadoop.class);  
    24.              job.setJobName("Max temperature");  
    25.              FileInputFormat.addInputPath(job, new Path(args[0]));  
    26.              FileOutputFormat.setOutputPath(job, new Path(args[1]));  
    27.              job.setMapperClass(TestMapper.class);  
    28.              job.setReducerClass(TestReducer.class);  
    29.              job.setOutputKeyClass(Text.class);  
    30.              job.setOutputValueClass(IntWritable.class);  
    31.              JobClient.runJob(job);  
    32.          }  
    33.            

    为了方便对于Hadoop的HDFS文件系统操作,我们可以在Eclipse下面的Map/Reduce Locations窗口与Hadoop建立连接,直接右键新建Hadoop连接即可:

    连接配置如下:

    然后点击完成即可,新建完成后,我们可以在左侧目录中看到HDFS的文件系统目录:

    这里不仅可以显示目录结构,还可以对文件及目录进行删除、新增等操作,非常方便。

    当上面的工作都做好之后,就可以把这个项目导出来了(导成jar文件放到Hadoop服务器上运行):

    点击完成,然后把这个testt.jar文件上传到Hadoop服务器(192.168.8.184)上,目录(其实可以放到其他目录,你自己喜欢)是:

    
    
    1. /usr/mywind/hadoop/share/hadoop/mapreduce  

    如下图:

    4、运行Hadoop程序及查看运行日志

    当上面的工作准备好了之后,我们运行自己写的Hadoop程序很简单:

    
    
    1. $ hadoop  jar  /usr/mywind/hadoop/share/hadoop/mapreduce/testt.jar com.my.hadoop.test.main.TestHadoop   input  output 

    注意这是output文件夹名称不能重复哦,假如你执行了一次,在HDFS文件系统下面会自动生成一个output文件夹,第二次运行时,要么把output文件夹先删除($ hdfs dfs -rmr /user/a01513/output),要么把命令中的output改成其他名称如output1、output2等等。

    如果看到以下输出结果,证明你的运行成功了:

    
    
    1. a01513@hadoop :~$ hadoop jar /usr/mywind/hadoop/share/hadoop/mapreduce/testt.jar                                                                              com.my.hadoop.test.main.TestHadoop input output  
    2. 14/09/02 11:14:03 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0                                                                             :8032   (责任编辑:IT)
    ------分隔线----------------------------