最近我们team做了一个推荐系统,整个系统分为算法和平台两部分,而算法又分为hive sql算法和map reduce算法,因此,近几个月都在学这些东东,感觉分布式的计算还是蛮强的,hive就不说了,这里把map reduce的入门例子记录一下入门过程。
一.编写main方法
package com.taobao.aladdin.biz.core.mapreduce.test;
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;
/*
*@author huangdou
*created on 2011-4-1下午03:20:11
*/
public class WordCount2 {
public static void main(String[] args) throws Exception {
//不配置一个入口类会导致底层无法调用setJarByClass方法,运行时ClassNotFound
JobConf conf = new JobConf(WordCount2.class);
//设置map类
conf.setMapperClass(WordCountMapper.class);
//设置reduce类
conf.setReducerClass(WordCountReducer.class);
//设置输出类型
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
//输入参数除最后一个外都是input path,最后一个是output path
for (int i = 0; i < args.length - 1; i++) {
FileInputFormat.addInputPath(conf, new Path(args[i]));
}
FileOutputFormat.setOutputPath(conf, new Path(args[args.length - 1]));
JobClient.runJob(conf);
}
}
二.编写Map方法,输入来自文件.
package com.taobao.aladdin.biz.core.mapreduce.test;
import java.io.IOException;
import java.util.StringTokenizer;
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;
/*
*@author huangdou
*created on 2011-4-1上午10:50:54
*/
public class WordCountMapper extends MapReduceBase implements
Mapper<LongWritable, Text, Text, IntWritable> {
private IntWritable one = new IntWritable(1);
@Override
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
//StringTokenizer 就是一个用来拆字符串的,默认是/t/n/f/r,也可自定义
StringTokenizer st = new StringTokenizer(value.toString());
Text text = new Text();
while (st.hasMoreTokens()) {
text.set(st.nextToken());
//把每个单词以1记数
output.collect(text, one);
}
}
}
其实map的输入来源就是input path指定的文件
三.编写Reduce方法,输入来自Map,输出即为最终结果
package com.taobao.aladdin.biz.core.mapreduce.test;
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;
/*
*@author huangdou
*created on 2011-4-1上午10:51:53
*/
public class WordCountReducer 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 {
Integer sum = 0;
while (values.hasNext()){
//map的输出其实会在每一个map中汇总,即同一个map如果出现"word"2次,那么map的输出就是word 2
//然后在进入reduce前会进行一个排序,即各个map的word统计会排在一起,同key的结果进入同一个reduce
sum += values.next().get();
}
//最终结果
output.collect(key, new IntWritable(sum));
}
}
四.安装hadoop
hadoop可以在本地windows装个测试环境,不过是单机的,也可以直接使用公司的集群,至于安装我下1篇再写,这里直接用公司的吧,但要先把文件传上去。rz,选择文件
五.编译该java文件
因为编译的时候需要用hadoop下的包,所以这里classpath打一下hadoop的core包,这个core包其实就在你的hadoop安装路径下。 我这里是javac -classpath /home/hadoop/hadoop-0.19.2/hadoop-0.19.2-core.jar -d . *.java ,编译完后,当前目录会出现一个com包
六.打成jar文件
jar -cvf wc14.jar com/ 打包后会出现一个wc.jar文件
七.运行map reduce
进入hadoop的bin目录下,运行.
这里需要说一下,我第一个main方法里写过,最后一个参数是输出路径,而前面的多个参数都是输入路径,因此命令如下:
./hadoop jar wc14.jar com.taobao.aladdin.biz.core.mapreduce.test.WordCount2 /group/aladdin/huangdou/huangdou1.txt /group/aladdin/huangdou/huangdou2.txt /group/aladdin/huangdou/huangdou14
这里huangdou1.txt和huangdou2.txt都是input path,而huangdou3为output path,值得注意的是,huangdou3只是一个路径,在它的下面存在一些文件碎片,这个碎片才是最终结果,可以查看一下。
./hadoop dfs -cat /group/aladdin/huangdou/huangdou3/part-00000
八.最后,如果下次还要运行这个map reduce,需要把原来的huangdou3这个路径干掉,否则会提示输出路径已存在的异常
分享到:
相关推荐
MapReduce分为两个主要阶段:Map阶段和Reduce阶段。Map阶段是数据的预处理,它接收输入数据(通常是键值对),并将其转化为一系列中间键值对。Reduce阶段接着对这些中间结果进行聚合,输出最终的结果。这种分而治之...
《Hadoop入门脚本WordCount详解》 在大数据处理领域,Hadoop是一个不可或缺的重要工具,它的分布式计算模型为海量数据的处理提供了强大的支持。而WordCount则是Hadoop入门的经典示例,通过它,我们可以深入理解...
这个文件可能是 Hadoop 官方文档中关于 WordCount 示例的一个章节,详细介绍了如何编写 Map 和 Reduce 函数,以及如何配置和运行 WordCount 作业。可能包括了 Java 代码示例,讲解如何创建 MapReduce 程序,并将其...
该框架将任务分解为一系列较小的任务(Map 和 Reduce),并在集群中的多台计算机上并行执行这些任务。 - **应用场景**:适用于大数据分析、搜索引擎索引构建、日志文件分析等场景。 #### 二、MapReduce 工作原理 1...
Hadoop平台上进行WordCount是非常重要的,掌握了WordCount可以更好地理解Hadoop的map-reduce编程模型。本文将详细讲解Hadoop平台上WordCount的运行和实现。 基于Hadoop的map-reduce模型,WordCount程序可以将输入的...
hadoop入门例子wordcount
### Spark 下实现 WordCount #### 一、简介 在大数据处理领域,Apache Spark 是...WordCount 作为入门级的大数据处理案例,帮助开发者快速掌握 Spark 的基本使用方法,并为进一步探索复杂的数据处理场景打下了基础。
"详细讲述了WordCount的map和reduce过程"表明该资源会深入解析这两个关键步骤的功能和实现细节。"给出了详细注释和解释"意味着它提供了清晰的代码注解,便于读者理解代码逻辑。"便于快速学习"则暗示了这是一个友好的...
`Hadoop WordCount`的工作流程分为两个主要阶段:Map阶段和Reduce阶段。在Map阶段,输入数据(通常是文本文件)被分割成多个块,每个块由一个Map任务处理。Map任务读取数据,对每一行进行分词,然后将每个单词与计数...
hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计
【Python入门Demo-WordCount】是一个适合初学者的Python编程示例,主要目的是介绍如何使用Python进行基础的数据处理,特别是文本分析中的词频统计。在这个Demo中,我们将学习到Python语言的一些基本语法、文件操作、...
1.3.2旧的WordCount分析与1.3.3新的WordCount分析,从源码层面解读了旧版和新版的WordCount程序实现,展示了程序如何定义Map和Reduce函数以及它们的工作机制。 1.4WordCount处理过程描述了WordCount程序在MapReduce...
通过以上步骤,初学者可以逐步熟悉Windows环境下Hadoop的安装、配置和开发流程,从而顺利入门Map/Reduce编程。随着经验的增长,可以进一步探索更复杂的数据处理任务和优化策略,如Combiner的使用、Shuffle和Sort过程...
Reduce任务接收来自所有Map任务的输出,对每个单词(键)的值(计数)进行累加,最终得到每个单词的总出现次数。这样,我们就可以得到整个文本中每个单词的全局计数。 4. **WordCount代码实现**: WordCount的...
Reduce 阶段则负责聚合 Map 阶段产生的结果,对相同单词的计数值进行累加。 MapReduce 模型是 Hadoop 处理大数据的核心机制。Map 阶段是由多个 Map 任务并行执行的,这些任务通常分配在集群的不同节点上,实现了...
MapReduce 将数据处理过程分为两个阶段:Map 阶段和 Reduce 阶段。在 Map 阶段,输入数据被分割成小块,并由多个 Map 任务处理。在 Reduce 阶段,Map 任务的输出结果被聚合和合并,生成最终结果。 Eclipse 中 ...
WordCount是Hadoop入门学习中的一个经典示例,用于统计文本中各个单词出现的次数。这个程序简单直观,很好地展示了MapReduce的工作原理。接下来,我们将深入探讨Hadoop的WordCount实例及其背后的原理。 首先,我们...
2. `WordCount.java` - 实现WordCount的Java代码,包含Map和Reduce函数。 3. `main` 方法 - 用于运行MapReduce任务的入口点。 4. 测试数据文件 - 用于测试WordCount程序的文本文件。 运行流程如下: 1. 使用Maven...
WordCount程序分为两个阶段:Map阶段和Reduce阶段。在Map阶段,输入的数据(通常是文本文件)被分割成多个小块,每个块由一个Map任务处理。Map任务将输入文本逐行读取,然后对每一行进行分词,生成键值对(<单词,1>...