Linux环境下,Eclipse运行hadoop的本地模式

JDK和Hadoop的安装可以参考我的博客:

Linux安装JDK完整步骤(centOS7):https://blog.csdn.net/Henry_Lin_Wind/article/details/80884975

Hadoop本地模式安装:https://blog.csdn.net/Henry_Lin_Wind/article/details/88802339

一、下载Eclipse

Eciipse 官网:https://www.eclipse.org/downloads/packages/ ,我下载的是最新版本 eclipse-jee-2019-03-R-linux-gtk-x86_64.tar.gz

Linux环境下,Eclipse运行hadoop的本地模式_第1张图片

 

二、解压安装Eclipse

将下载好的安装包放到待安装目录,执行如下命令:

tar -zxvf eclipse-jee-photon-R-linux-gtk-x86_64.tar.gz -C /usr/local

 Linux环境下,Eclipse运行hadoop的本地模式_第2张图片

三、配置Eclipse和Hadoop关联起来 

将Eclipse和Hadoop关联起来需要用到 hadoop-eclipse-plugin -2.x.x.jar 的插件。这个插件的选择与hadoppy和eclipse的版本以及插件自身的完整度有关,很容易出现装好插件部分功能无法使用的情况。推荐一个插件,已经在多个环境(Windows/Linux)中搭配不同版本的hadoop(2.7.2 / 2.9.2)以及eclipse(eclipse-java-mars-2-win32-x86_64/)成功使用。

下载链接 :https://download.csdn.net/download/henry_lin_wind/11060396

将下载的hadoop-eclipse-plugin-2.x.x.jar文件放到Eclipse的plugins文件夹下,即放在/usr/local/eclipse/plugins/下,重启eclipse即可看到该插件生效,如图:  

Linux环境下,Eclipse运行hadoop的本地模式_第3张图片

在本博客中,该插件安装的意义在于可以新建 Map/Reduce Project ,其他用处在后续博客中体现。

Linux环境下,Eclipse运行hadoop的本地模式_第4张图片

为了成功新建Map/Reduce Project,还需要关联到hadoop的安装目录。点击“Window –> Preferences –> Hadoop Map/Reduce”选择Hadoop安装目录,点击“Apply”和“Apply and Close”,如图: 

Linux环境下,Eclipse运行hadoop的本地模式_第5张图片

 

四、创建Map/Reduce Project

File - New - Other

Linux环境下,Eclipse运行hadoop的本地模式_第6张图片

Linux环境下,Eclipse运行hadoop的本地模式_第7张图片

Linux环境下,Eclipse运行hadoop的本地模式_第8张图片

Linux环境下,Eclipse运行hadoop的本地模式_第9张图片

 

五、新建测试类

1、MaxTemperature

package hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class MaxTemperature extends Configured implements Tool {

         @SuppressWarnings("deprecation")
         @Override
         public int run(String[] args) throws Exception {                  
                   if (args.length != 2){
                            System.err.printf("Usage: %s ",getClass().getSimpleName());
                            ToolRunner.printGenericCommandUsage(System.err);
                            return -1;                  
                   }                  
                   Configuration conf = getConf();                
                   Job job = new Job(getConf());
                   job.setJobName("Max Temperature");                  
                   job.setJarByClass(getClass());
                   FileInputFormat.addInputPath(job,new Path(args[0]));
                   FileOutputFormat.setOutputPath(job,new Path(args[1]));                  
                   job.setMapperClass(MaxTemperatureMapper.class);
                   job.setReducerClass(MaxTemperatureReducer.class);                  
                   job.setOutputKeyClass(Text.class);
                   job.setOutputValueClass(IntWritable.class);                  
                   return job.waitForCompletion(true)?0:1;                  
         }

         public static void main(String[] args)throws Exception{   
                   int exitcode = ToolRunner.run(new MaxTemperature(), args);
                   System.exit(exitcode);                  
         }   
}

2、MaxTemperatureMapper

package hadoop;

import java.io.IOException; 
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MaxTemperatureMapper extends Mapper { 

         @Override
         public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{                                    
                   String line = value.toString();  
                   if( !line.equals("") ){
                       try {
                                String year = line.substring(0,4);
                                int airTemperature = Integer.parseInt(line.substring(5));            
                                context.write(new Text(year),new IntWritable(airTemperature));                           
                       } catch (Exception e) {
                                System.out.print("Error in line:" + line);
                       }  
                    } else {
                          return;
                    }                   
         }        
}

3、MaxTemperatureReducer

package hadoop;

import java.io.IOException; 
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; 

public class MaxTemperatureReducer extends Reducer {        

         @Override
         public void reduce(Text key, Iterable values, Context context)throws IOException, InterruptedException        {
                   int maxValue = Integer.MIN_VALUE;                  
                   for(IntWritable value: values){
                            maxValue = Math.max(maxValue,value.get());                
                   }        
                   context.write(key, new IntWritable(maxValue));                 
         } 
}

4、新建测试数据

 新建一个input文件夹,新建两个测试用的txt文件,里面包含不同年份的气温数据。保存项目。Linux环境下,Eclipse运行hadoop的本地模式_第10张图片

5、运行测试

Run - Run Configurations 

Linux环境下,Eclipse运行hadoop的本地模式_第11张图片

点选Java Application ,如果MaxTemperature未存在,可以尝试保存刷新项目或者重启软件。在Arguments一栏填入数据的输入路径以及结果的输出路径。

Linux环境下,Eclipse运行hadoop的本地模式_第12张图片

点击Run 运行,程序会统计input目录下的所有文件的气温数据,输出各年份的最高气温。

Linux环境下,Eclipse运行hadoop的本地模式_第13张图片

 刷新下项目,可以看到生成了output文件夹,SUCCESS代表操作成功,part-r-00000代表操作结果。

Linux环境下,Eclipse运行hadoop的本地模式_第14张图片

 也查看该项目所在目录,同样可以看到自动生成一个输出目录,其中包含两个文件(SUCCESS代表操作成功,part-r-00000代表操作结果)

Linux环境下,Eclipse运行hadoop的本地模式_第15张图片

打开文件 part-r-00000 ,可以看到input文件夹的两个气温数据被统计整理成每个年份的最高气温。

Linux环境下,Eclipse运行hadoop的本地模式_第16张图片

你可能感兴趣的:(hadoop)