刘华
实验室:JS测试器
分类专栏
hadoop2篇
mysql1篇
nginx8篇
java5篇
架构设计3篇
信息安全6篇
前端开发2篇
数据同步6篇
AI7篇
其他9篇

单机模式下Hadoop应用的开发和启动方式

liuhua-2018/11/7 19:33:24

hadoop的最简单应用程序包含Mapper类、Reducer类以及main函数类组成。在开发时可以采用eclipse创建普通的java应用项目,在构建路径中引入相关hadoop相关的jar包,如:

360截图20160911213622396.jpg

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函数类名 参数列表

参数列表包含输入数据文档路径和输出路径,其中输出路径应为不存在的目录。

如下图所示:

360截图20160911213854576.jpg

执行完成后,可从输出路径查看结果。



小钉 京ICP备16032583号-1