今天做了一个简单的mapreduce小程序,目的是熟悉一下怎么在真实的集群上跑自己的mr程序,之前写的都是在单机模拟运行的。功能很简单就是求一个key对应值里面最大的。
开发环境:
hadoop2.5
jdk1.6
eclipse3.7
1、创建一个java工程,加入如下jar包:
hadoop-common-2.5.2.jar
hadoop-mapreduce-client-common-2.5.2.jar
hadoop-mapreduce-client-core-2.5.2.jar
hadoop-mapreduce-client-jobclient-2.5.2.jar
2、主要类
MaxNumberDriver.java用于启动mapreduce程序的入口
[code="java"]package org.qhy.mapreduce.maxnumber;
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.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class MaxNumberDriver extends Configured implements Tool{
@Override
public int run(String[] arg0) throws Exception {
if(arg0.length {
@Override
protected void map(LongWritable key, Text value, Mapper.Context context)
throws IOException, InterruptedException {
String lineVal = value.toString();
String[] arrayVal = lineVal.split(",");
String year= arrayVal[0],number=arrayVal[1];
context.write(new Text(year), new IntWritable(Integer.parseInt(number)));
}
}
MaxNumberReducer.java reducer实现类
package org.qhy.mapreduce.maxnumber;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class MaxNumberReducer extends Reducer {
// @Override
// protected void reduce(Text year, java.lang.Iterable numbers,
// org.apache.hadoop.mapreduce.Reducer.Context context)
// throws java.io.IOException, InterruptedException {
// int maxValue = Integer.MIN_VALUE;
// for(IntWritable value: numbers){
// maxValue = Math.max(maxValue,value.get());
// }
// context.write(year, new IntWritable(maxValue));
// }
/**
* {@inheritDoc}使用第三方Apache Lang包
* @see org.apache.hadoop.mapreduce.Reducer#reduce(KEYIN, java.lang.Iterable, org.apache.hadoop.mapreduce.Reducer.Context)
*/
@Override
protected void reduce(Text year, java.lang.Iterable numbers,
org.apache.hadoop.mapreduce.Reducer.Context context)
throws java.io.IOException, InterruptedException {
Iterator itr = numbers.iterator();
int length=0;
List list = new ArrayList();
while(itr.hasNext()){
IntWritable iwVal = itr.next();
list.add(iwVal.get());
length++;
}
int[] array = new int[length];
for(int i=0;iexport->jar->选择导出路径(一路next)-> 记得选一下main函数类
4、运行
将jar放到系统上linux上
./hadoop jar ~/testData/MRMaxNumber.jar hdfs://hdp01nn:9000/maxnumber hdfs://hdp01nn:9000/testOut/maxnumber4
分享到:
相关推荐
在这个例子中,我们需要从NCDC的历史天气数据中找出每年的最高气温。map阶段会读取每行数据,解析出年份和温度,生成(年份,温度)的键值对。reduce阶段接收到这些键值对,通过比较找到每个年份的最高温度。 3. ...
在提供的压缩包文件名称“HadoopMapReduce_WordCount-master”中,我们可以推测这是一个Hadoop MapReduce WordCount项目的源代码仓库。用户可能需要下载这个压缩包,解压后编译和运行代码,以实际体验和理解...
在压缩包文件"HadoopMapReduce-master"中,可能包含了这个MapReduce程序的源代码、测试数据、构建脚本等资源,帮助开发者更好地理解和实践Hadoop MapReduce编程。通过深入研究这些文件,我们可以学习如何设置和运行...
- "drwhoami":这可能是项目或例子的特定部分,但在这里没有详细信息,我们不作深入讨论。 - "Java":再次强调作业的编程语言。 在Hadoop MapReduce实践中,数据集链接通常涉及以下步骤: 1. **数据预处理**:根据...
java8 集合源码分析 ...一个简单的例子,有一些小朋友,他们想要吃水果,我们用一张表列出小朋友们的需求。 名字 水果 Sam apple,pear Amy apple Jim strawberry Jackie watermelon Harry strawberry Lily w
7. HadoopMapReduce的运行机制:了解HadoopMapReduce框架的内部工作机制,包括MapReduce程序的执行流程以及各个组件的作用和交互方式。 8. 实际的例子:通过实际的例子,比如Pi值估算程序,可以更深入理解Hadoop ...
他举了Instagram的例子,这个平台只有7个工程师,却完成了十亿美金的交易额,关键在于大量使用amazon云服务。他强调了保持简单、不重复制造轮子、采用已经被证明了的技术的重要性。 百川通联在架构上选择建立在公共...