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
Eciipse 官网:https://www.eclipse.org/downloads/packages/ ,我下载的是最新版本 eclipse-jee-2019-03-R-linux-gtk-x86_64.tar.gz
将下载好的安装包放到待安装目录,执行如下命令:
tar -zxvf eclipse-jee-photon-R-linux-gtk-x86_64.tar.gz -C /usr/local
将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即可看到该插件生效,如图:
在本博客中,该插件安装的意义在于可以新建 Map/Reduce Project ,其他用处在后续博客中体现。
为了成功新建Map/Reduce Project,还需要关联到hadoop的安装目录。点击“Window –> Preferences –> Hadoop Map/Reduce”选择Hadoop安装目录,点击“Apply”和“Apply and Close”,如图:
File - New - Other
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
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文件,里面包含不同年份的气温数据。保存项目。
5、运行测试
Run - Run Configurations
点选Java Application ,如果MaxTemperature未存在,可以尝试保存刷新项目或者重启软件。在Arguments一栏填入数据的输入路径以及结果的输出路径。
点击Run 运行,程序会统计input目录下的所有文件的气温数据,输出各年份的最高气温。
刷新下项目,可以看到生成了output文件夹,SUCCESS代表操作成功,part-r-00000代表操作结果。
也查看该项目所在目录,同样可以看到自动生成一个输出目录,其中包含两个文件(SUCCESS代表操作成功,part-r-00000代表操作结果)
打开文件 part-r-00000 ,可以看到input文件夹的两个气温数据被统计整理成每个年份的最高气温。