hadoop的最简单应用程序包含Mapper类、Reducer类以及main函数类组成。在开发时可以采用eclipse创建普通的java应用项目,在构建路径中引入相关hadoop相关的jar包,如:
Mapper类的开发示例如:
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<LongWritable,Text,Text,IntWritable>{ private static final int MISSING=9999; @Override public void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{ String line=value.toString(); String year=line.substring(2,6); int temperature=Integer.parseInt(line.substring(9,13)); context.write(new Text(year), new IntWritable(temperature)); } }
Reducer类的开发示例如:
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<Text,IntWritable,Text,IntWritable> { @Override public void reduce(Text key,Iterable<IntWritable> 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)); } }
Main函数类如下所示:
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.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class MaxTemperature { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub if(args.length!=2){ System.err.println("Usage:MaxTemperature <input path> <output path>"); System.exit(-1); } Job job=new Job(); job.setJarByClass(MaxTemperature.class); job.setJobName("Max Temperature"); 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); System.exit(job.waitForCompletion(true)?0:1); } }
以上3个类开发完成后,将其导出为一个jar包用于运行。
hadoop可以以单机模式、伪分布式、分布式方式运行。
单机模式下应用的启动方式为:
1、确保hadoop的配置文件为单机模式配置(在这种配置下core-site.xml配置fs.defaultFS值file:///,mapred-site.xml中mapreduce.framework.name值为local。其他配置文件不包含配置项。)
2、准备输入数据的文档;
3、将包含Maper类、Reducer类以及main函数类的jar包放到某个本地目录下;
4、进入该jar包所在目录,执行命令:
%export HADOOP_CLASSPATH=jar包名称 %hadoop main函数类名 参数列表 |
参数列表包含输入数据文档路径和输出路径,其中输出路径应为不存在的目录。
如下图所示:
执行完成后,可从输出路径查看结果。