`
samwalt
  • 浏览: 285523 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

运行hadoop的WordCount程序

阅读更多
源代码
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

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.LongWritable;
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;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class WordCount extends Configured implements Tool {

	public static class MapClass extends MapReduceBase implements
			Mapper<LongWritable, Text, Text, IntWritable> {

		private final static IntWritable one = new IntWritable(1);
		private Text word = new Text();

		public void map(LongWritable key, Text value,
				OutputCollector<Text, IntWritable> output, Reporter reporter)
				throws IOException {
			String line = value.toString();
			StringTokenizer itr = new StringTokenizer(line);
			while (itr.hasMoreTokens()) {
				word.set(itr.nextToken());
				output.collect(word, one);
			}
		}
	}

	/**
	 * A reducer class that just emits the sum of the input values.
	 */
	public static class Reduce extends MapReduceBase implements
			Reducer<Text, IntWritable, Text, IntWritable> {

		public void reduce(Text key, Iterator<IntWritable> values,
				OutputCollector<Text, IntWritable> output, Reporter reporter)
				throws IOException {
			int sum = 0;
			while (values.hasNext()) {
				sum += values.next().get();
			}
			output.collect(key, new IntWritable(sum));
		}
	}

	static int printUsage() {
		System.out.println("wordcount [-m <maps>] [-r <reduces>] <input> <output>");
		ToolRunner.printGenericCommandUsage(System.out);
		return -1;
	}

	/**
	 * The main driver for word count map/reduce program. Invoke this method to
	 * submit the map/reduce job.
	 *
	 * @throws IOException
	 *             When there is communication problems with the job tracker.
	 */
	public int run(String[] args) throws Exception {
		JobConf conf = new JobConf(getConf(), WordCount.class);
		conf.setJobName("wordcount");

		// the keys are words (strings)
		conf.setOutputKeyClass(Text.class);
		// the values are counts (ints)
		conf.setOutputValueClass(IntWritable.class);

		conf.setMapperClass(MapClass.class);
		conf.setCombinerClass(Reduce.class);
		conf.setReducerClass(Reduce.class);

		List<String> other_args = new ArrayList<String>();
		for (int i = 0; i < args.length; ++i) {
			try {
				if ("-m".equals(args[i])) {
					conf.setNumMapTasks(Integer.parseInt(args[++i]));
				} else if ("-r".equals(args[i])) {
					conf.setNumReduceTasks(Integer.parseInt(args[++i]));
				} else {
					other_args.add(args[i]);
				}
			} catch (NumberFormatException except) {
				System.out.println("ERROR: Integer expected instead of "
						+ args[i]);
				return printUsage();
			} catch (ArrayIndexOutOfBoundsException except) {
				System.out.println("ERROR: Required parameter missing from "
						+ args[i - 1]);
				return printUsage();
			}
		}

		// Make sure there are exactly 2 parameters left.
		if (other_args.size() != 2) {
			System.out.println("ERROR: Wrong number of parameters: "
					+ other_args.size() + " instead of 2.");
			return printUsage();
		}
		FileInputFormat.setInputPaths(conf, other_args.get(0));
		FileOutputFormat.setOutputPath(conf, new Path(other_args.get(1)));

		JobClient.runJob(conf);
		return 0;
	}

	public static void main(String[] args) throws Exception {
		int res = ToolRunner.run(new Configuration(), new WordCount(), args);
		System.exit(res);
	}

}


hadoop配置成伪分布模式。本机上新建一个目录,如:~/code/hadoop/WordCount,编译WordCount.java。
javac -classpath /usr/local/hadoop-0.20.2/hadoop-0.20.2-core.jar WordCount.java

编译后生成三个class文件,WordCount.class,WordCount$Map.class,WordCount$Reduce.class。
打包成jar文件,
jar -cvf WordCount.jar *.class

新建input1.txt和input2.txt文件,输入一些单词。

在hdfs上新建目录,上传输入文件
hadoop fs -mkdir /tmp/input
hadoop fs -put input1.txt /tmp/input/
hadoop fs -put input2.txt /tmp/input/


运行程序
hadoop jar WordCount.jar WordCount /tmp/input /tmp/output
分享到:
评论
2 楼 samwalt 2012-05-19  
tgwiloveyou 写道
谢了,不过 hadoop fs -mkdir /tmp/output  这一步应该不要吧,我加了这一步反而在最后执行的时候报/tmp/output is already exsit错误,此时我把已建好的/tmp/output删掉,再执行最后一步就OK了    

是的,输出目录事先存在的话会出错,多谢指正啊。
1 楼 tgwiloveyou 2012-05-19  
谢了,不过 hadoop fs -mkdir /tmp/output  这一步应该不要吧,我加了这一步反而在最后执行的时候报/tmp/output is already exsit错误,此时我把已建好的/tmp/output删掉,再执行最后一步就OK了    

相关推荐

    使用hadoop实现WordCount实验报告.docx

    3. **运行WordCount程序**:调用Hadoop自带的Java程序`hadoop-mapreduce-examples-2.7.7.jar`,指定输入和输出参数。 ### 四、实验结果 成功运行WordCount后,可以在指定的输出文件夹(例如/output)中看到统计...

    hadoop运行wordcount实例

    #### 一、Hadoop简介与WordCount程序的重要性 Hadoop 是一个由Apache基金会所开发的分布式系统基础架构。它能够处理非常庞大的数据集,并且能够在集群上运行,通过将大数据分割成小数据块进行并行处理来实现高效的...

    WordCount2_hadoopwordcount_

    在标题中的"WordCount2_hadoopwordcount_"可能指的是Hadoop WordCount的第二个版本,通常是在Hadoop 2.x环境下运行。这个程序的核心任务是对输入文本进行分词,统计每个单词出现的次数,并将结果输出。在这个过程中...

    hadoop wordcount 打包部署

    ### Hadoop WordCount项目打包与部署详解 #### 一、Hadoop WordCount...通过以上步骤,可以成功地在Hadoop环境下部署并运行WordCount程序。这不仅是一个基础的数据处理练习,也是深入了解Hadoop生态系统的重要一步。

    hadoop wordCount程序

    hadoop wordCount 程序 hadoop wordCount 程序是一种基于 Hadoop платформы的数据处理程序,用于统计文本文件中的单词出现次数。下面是该程序的详细知识点: Hadoop 介绍 Hadoop 是一个由 Apache ...

    hadoop 运行成功代码(wordcount)

    为了运行Hadoop项目,你需要一个配置完善的Hadoop环境,包括安装Hadoop和配置Hadoop的环境变量。同时,为了方便管理和构建项目,通常会使用Maven作为构建工具。Maven是一个项目管理和依赖管理工具,可以帮助我们管理...

    ubuntu运行hadoop的wordcount

    ### Ubuntu上运行Hadoop WordCount实例详解 #### 一、环境搭建与配置 在Ubuntu系统上部署并运行Hadoop WordCount实例,首先需要确保已经安装了Hadoop环境,并且版本为hadoop-0.20.2。此版本较旧,主要用于教学或...

    Hadoop示例程序WordCount运行及详解

    编译完成后,我们可以使用Hadoop的jar命令来运行WordCount程序。最后,我们可以使用Hadoop的命令行工具来查看输出结果。 WordCount程序的实现主要包括三个部分:Mapper、Reducer和Driver。Mapper部分负责将输入文件...

    实验2-在Hadoop平台上部署WordCount程序-孙淼1

    实验2的目的是在Hadoop平台上部署WordCount程序,以此来理解和体验云计算的基础应用。这个实验主要涉及以下几个关键知识点: 1. **Linux系统基础**:实验要求学生具备Linux系统的使用知识,包括基本的命令行操作、...

    Hadoop mapreduce实现wordcount

    在实际环境中,我们需要配置 Hadoop 集群,设置输入文件路径,编译并打包 WordCount 程序,最后通过 Hadoop 的 `hadoop jar` 命令提交作业到集群运行。调试时,可以查看日志输出,检查错误信息,优化性能。 通过...

    实验2-在Hadoop平台上部署WordCount程序1

    【描述】:本实验旨在让学生掌握如何在Hadoop平台上部署并运行WordCount程序,这是Hadoop入门的经典案例,旨在统计文本中的单词出现次数。通过实践,学生将了解Hadoop分布式文件系统(HDFS)的工作原理以及MapReduce...

    hadoop之wordcount例程代码

    运行WordCount程序时,Hadoop会自动将数据分发到集群的各个节点上,每个节点上的TaskTracker会执行对应的Map任务。当Map任务完成,中间结果会被排序和分区,然后传递给Reduce任务。Reduce任务最终将结果写回到HDFS,...

    hadoop1.2.1修改WordCount并编译

    在编译完成后,我们可以使用以下命令来运行 WordCount 程序: ``` hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output ``` 其中 input 是输入文件的路径,output 是输出文件的路径。 ...

    Hadoop的单机伪分布式搭建和运行第一个WordCount程序

    Hadoop单机伪分布式搭建和运行第一个WordCount程序 Hadoop是Apache基金会下的一个开源的大数据处理框架,它广泛应用于数据处理、数据分析和机器学习等领域。下面是关于Hadoop单机伪分布式搭建和运行第一个WordCount...

    centos下配置hadoop环境并运行wordcount程序

    最详细hadoop配置教程!centos下完美运行wordcount程序,从无到有,初学者必备!我自己亲自试了一遍并加以修改,准确无误~

    wordCount.zip

    这个jar包是运行Hadoop WordCount程序的关键,它集成了所有的类和依赖库。运行这个程序,你需要先配置好Hadoop环境,确保Hadoop集群运行正常。然后,将输入数据(例如,一个文本文件)上传到HDFS,最后通过Hadoop的...

    Hadoop集群-WordCount运行详解.pdf

    本篇文档深入浅出地介绍了Hadoop集群的WordCount运行详解,从MapReduce理论到WordCount程序的运行,再到源码分析,内容丰富且详细,对于想要入门和深入了解Hadoop分布式计算和MapReduce模型的读者来说,是一份宝贵的...

    hadoop-1.2.1运行WordCount

    ### Hadoop-1.2.1 运行WordCount...总之,运行Hadoop-1.2.1下的WordCount示例涉及多个步骤,从环境搭建、数据准备到程序执行及结果验证都需要仔细操作。特别是在遇到问题时,应根据具体错误信息逐一排查并解决问题。

    在最终部署的Hadoop上运行WordCount程序实验报告.pdf

    通过这个实验,学生不仅掌握了Linux操作系统和虚拟化技术,还深入理解了Hadoop分布式计算框架,特别是MapReduce模型的运作机制,以及如何在实际环境中部署和运行Hadoop程序。这些技能对于理解和开发云计算应用至关...

Global site tag (gtag.js) - Google Analytics