`
j小虫
  • 浏览: 18824 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Map Reduce WordCount入门全过程

阅读更多

最近我们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这个路径干掉,否则会提示输出路径已存在的异常

 

分享到:
评论

相关推荐

    大数据处理map,reduce,wordcount代码

    MapReduce分为两个主要阶段:Map阶段和Reduce阶段。Map阶段是数据的预处理,它接收输入数据(通常是键值对),并将其转化为一系列中间键值对。Reduce阶段接着对这些中间结果进行聚合,输出最终的结果。这种分而治之...

    Hadoop入门脚本WordCount

    《Hadoop入门脚本WordCount详解》 在大数据处理领域,Hadoop是一个不可或缺的重要工具,它的分布式计算模型为海量数据的处理提供了强大的支持。而WordCount则是Hadoop入门的经典示例,通过它,我们可以深入理解...

    Hadoop mapreduce实现wordcount

    这个文件可能是 Hadoop 官方文档中关于 WordCount 示例的一个章节,详细介绍了如何编写 Map 和 Reduce 函数,以及如何配置和运行 WordCount 作业。可能包括了 Java 代码示例,讲解如何创建 MapReduce 程序,并将其...

    Hadoop Map Reduce教程

    该框架将任务分解为一系列较小的任务(Map 和 Reduce),并在集群中的多台计算机上并行执行这些任务。 - **应用场景**:适用于大数据分析、搜索引擎索引构建、日志文件分析等场景。 #### 二、MapReduce 工作原理 1...

    Hadoop示例程序WordCount运行及详解

    Hadoop平台上进行WordCount是非常重要的,掌握了WordCount可以更好地理解Hadoop的map-reduce编程模型。本文将详细讲解Hadoop平台上WordCount的运行和实现。 基于Hadoop的map-reduce模型,WordCount程序可以将输入的...

    hadoop入门例子wordcount

    hadoop入门例子wordcount

    spark下实现wordcount

    ### Spark 下实现 WordCount #### 一、简介 在大数据处理领域,Apache Spark 是...WordCount 作为入门级的大数据处理案例,帮助开发者快速掌握 Spark 的基本使用方法,并为进一步探索复杂的数据处理场景打下了基础。

    最简单MR WordCount

    "详细讲述了WordCount的map和reduce过程"表明该资源会深入解析这两个关键步骤的功能和实现细节。"给出了详细注释和解释"意味着它提供了清晰的代码注解,便于读者理解代码逻辑。"便于快速学习"则暗示了这是一个友好的...

    WordCount2_hadoopwordcount_

    `Hadoop WordCount`的工作流程分为两个主要阶段:Map阶段和Reduce阶段。在Map阶段,输入数据(通常是文本文件)被分割成多个块,每个块由一个Map任务处理。Map任务读取数据,对每一行进行分词,然后将每个单词与计数...

    hadoop入门java代码hdfs文件操作 wordCount源码

    hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计

    Python入门Demo-WordCount

    【Python入门Demo-WordCount】是一个适合初学者的Python编程示例,主要目的是介绍如何使用Python进行基础的数据处理,特别是文本分析中的词频统计。在这个Demo中,我们将学习到Python语言的一些基本语法、文件操作、...

    Hadoop集群-WordCount运行详解.pdf

    1.3.2旧的WordCount分析与1.3.3新的WordCount分析,从源码层面解读了旧版和新版的WordCount程序实现,展示了程序如何定义Map和Reduce函数以及它们的工作机制。 1.4WordCount处理过程描述了WordCount程序在MapReduce...

    Windows平台下Hadoop的Map/Reduce开发

    通过以上步骤,初学者可以逐步熟悉Windows环境下Hadoop的安装、配置和开发流程,从而顺利入门Map/Reduce编程。随着经验的增长,可以进一步探索更复杂的数据处理任务和优化策略,如Combiner的使用、Shuffle和Sort过程...

    Hadoop的WordCount实例代码

    Reduce任务接收来自所有Map任务的输出,对每个单词(键)的值(计数)进行累加,最终得到每个单词的总出现次数。这样,我们就可以得到整个文本中每个单词的全局计数。 4. **WordCount代码实现**: WordCount的...

    WordCount 源码浅析(1)

    Reduce 阶段则负责聚合 Map 阶段产生的结果,对相同单词的计数值进行累加。 MapReduce 模型是 Hadoop 处理大数据的核心机制。Map 阶段是由多个 Map 任务并行执行的,这些任务通常分配在集群的不同节点上,实现了...

    hadoop wordCount程序

    MapReduce 将数据处理过程分为两个阶段:Map 阶段和 Reduce 阶段。在 Map 阶段,输入数据被分割成小块,并由多个 Map 任务处理。在 Reduce 阶段,Map 任务的输出结果被聚合和合并,生成最终结果。 Eclipse 中 ...

    hadoop之wordcount例程代码

    WordCount是Hadoop入门学习中的一个经典示例,用于统计文本中各个单词出现的次数。这个程序简单直观,很好地展示了MapReduce的工作原理。接下来,我们将深入探讨Hadoop的WordCount实例及其背后的原理。 首先,我们...

    hadoop 运行成功代码(wordcount)

    2. `WordCount.java` - 实现WordCount的Java代码,包含Map和Reduce函数。 3. `main` 方法 - 用于运行MapReduce任务的入口点。 4. 测试数据文件 - 用于测试WordCount程序的文本文件。 运行流程如下: 1. 使用Maven...

    wordCount.zip

    WordCount程序分为两个阶段:Map阶段和Reduce阶段。在Map阶段,输入的数据(通常是文本文件)被分割成多个小块,每个块由一个Map任务处理。Map任务将输入文本逐行读取,然后对每一行进行分词,生成键值对(&lt;单词,1&gt;...

Global site tag (gtag.js) - Google Analytics