编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
2014-03-11 11:54
295 查看
今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序。
可以在eclipse写好程序,export或用fatjar打包成jar文件。
先给出这个程序所依赖的Maven包:
好了,现在给出程序,代码如下:
Mapper
Reducer:
Main
将上面的程序编译和打包成jar文件,然后开始在Hadoop2.2.0(本文假定用户都部署好了Hadoop2.2.0)上面部署了。下面主要讲讲如何去部署:
首先,启动Hadoop2.2.0,命令如下:
打包编译jar文件有两种方式:
1)直接用export导出jar包,生成默认的MANIFEST.MF文件,不需要写main方法所在的类
使用的命令:
2)用Fat jar工具导出jar包,不需要导出依赖的(hadoop环境有),其实也就是MANIFEST.MF文件有了main方法所在的类。
结果是一样的。
附程序测试的数据的下载地址:http://pan.baidu.com/s/1iSacM
Reference:
可以在eclipse写好程序,export或用fatjar打包成jar文件。
先给出这个程序所依赖的Maven包:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Temperature</groupId> <artifactId>Temperature</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-common</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-jobclient</artifactId> <version>2.2.0</version> </dependency> </dependencies> </project>
好了,现在给出程序,代码如下:
Mapper
package org.ccnt.mr; 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.mapred.MapReduceBase; import org.apache.hadoop.mapred.Mapper; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reporter; public class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private static final int MISSING = 9999; @Override public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); String year = line.substring(15, 19); int airTemperature; if (line.charAt(87) == '+') airTemperature = Integer.parseInt(line.substring(88, 92)); else airTemperature = Integer.parseInt(line.substring(87, 92)); String quality = line.substring(92, 93); if (airTemperature != MISSING && quality.matches("[01459]")) { output.collect(new Text(year), new IntWritable(airTemperature)); } } }
Reducer:
package org.ccnt.mr; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.MapReduceBase; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reducer; import org.apache.hadoop.mapred.Reporter; public class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { @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)); } }
Main
package org.ccnt.mr; import java.io.IOException; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.FileInputFormat; import org.apache.hadoop.mapred.FileOutputFormat; import org.apache.hadoop.mapred.JobClient; import org.apache.hadoop.mapred.JobConf; public class MaxTemperature { public static void main(String[] args) throws IOException { System.out.println(args.length); for (String string : args) { System.out.println(string); } if (args.length != 2) { System.err.println("Error"); System.exit(1); } JobConf conf = new JobConf(MaxTemperature.class); conf.setJobName("Max Temperature"); FileInputFormat.addInputPath(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); conf.setMapperClass(Map.class); conf.setReducerClass(Reduce.class); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); JobClient.runJob(conf); } }
将上面的程序编译和打包成jar文件,然后开始在Hadoop2.2.0(本文假定用户都部署好了Hadoop2.2.0)上面部署了。下面主要讲讲如何去部署:
首先,启动Hadoop2.2.0,命令如下:
sbin/start-dfs.sh sbin/start-yarn.sh
打包编译jar文件有两种方式:
1)直接用export导出jar包,生成默认的MANIFEST.MF文件,不需要写main方法所在的类
使用的命令:
bin/hadoop jar ~/Downlowd/MaxTemperature.jar org.ccnt.mr.MaxTemperature input/data.txt result
2)用Fat jar工具导出jar包,不需要导出依赖的(hadoop环境有),其实也就是MANIFEST.MF文件有了main方法所在的类。
bin/hadoop jar ~/Download/Temperature input/data.txt result2
结果是一样的。
附程序测试的数据的下载地址:http://pan.baidu.com/s/1iSacM
Reference:
[原]编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
相关文章推荐
- [置顶] 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
- 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
- (3)Hadoop 配置部署启动YARN及在YARN上运行MapReduce程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序(这个人T字还有好几篇精华的可以看)
- 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 【学习笔记】用Hadoop在MapReduce中WordCount简单程序运行详细流程
- 编写运行hadoop mapreduce程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- Hadoop 2.x环境搭建之三配置部署启动YARN及在YARN上运行MapReduce程序
- 简单的MapReduce程序(Hadoop2.2.0)
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 简单的MapReduce程序(Hadoop2.2.0)
- Hadoop环境搭建三之配置部署启动YARN以及在YARN上运行MapReduce程序
- 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
- Python之——用Mrjob框架编写Hadoop MapReduce程序(基于Hadoop 2.5.2)
- 在window下远程虚拟机(centos)hadoop运行mapreduce程序
- 国内最全最详细的hadoop2.2.0集群的MapReduce的最简单配置
- 为Hadoop的MapReduce程序编写makefile