源代码
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
分享到:
相关推荐
3. **运行WordCount程序**:调用Hadoop自带的Java程序`hadoop-mapreduce-examples-2.7.7.jar`,指定输入和输出参数。 ### 四、实验结果 成功运行WordCount后,可以在指定的输出文件夹(例如/output)中看到统计...
#### 一、Hadoop简介与WordCount程序的重要性 Hadoop 是一个由Apache基金会所开发的分布式系统基础架构。它能够处理非常庞大的数据集,并且能够在集群上运行,通过将大数据分割成小数据块进行并行处理来实现高效的...
在标题中的"WordCount2_hadoopwordcount_"可能指的是Hadoop WordCount的第二个版本,通常是在Hadoop 2.x环境下运行。这个程序的核心任务是对输入文本进行分词,统计每个单词出现的次数,并将结果输出。在这个过程中...
### Hadoop WordCount项目打包与部署详解 #### 一、Hadoop WordCount...通过以上步骤,可以成功地在Hadoop环境下部署并运行WordCount程序。这不仅是一个基础的数据处理练习,也是深入了解Hadoop生态系统的重要一步。
hadoop wordCount 程序 hadoop wordCount 程序是一种基于 Hadoop платформы的数据处理程序,用于统计文本文件中的单词出现次数。下面是该程序的详细知识点: Hadoop 介绍 Hadoop 是一个由 Apache ...
为了运行Hadoop项目,你需要一个配置完善的Hadoop环境,包括安装Hadoop和配置Hadoop的环境变量。同时,为了方便管理和构建项目,通常会使用Maven作为构建工具。Maven是一个项目管理和依赖管理工具,可以帮助我们管理...
### Ubuntu上运行Hadoop WordCount实例详解 #### 一、环境搭建与配置 在Ubuntu系统上部署并运行Hadoop WordCount实例,首先需要确保已经安装了Hadoop环境,并且版本为hadoop-0.20.2。此版本较旧,主要用于教学或...
编译完成后,我们可以使用Hadoop的jar命令来运行WordCount程序。最后,我们可以使用Hadoop的命令行工具来查看输出结果。 WordCount程序的实现主要包括三个部分:Mapper、Reducer和Driver。Mapper部分负责将输入文件...
实验2的目的是在Hadoop平台上部署WordCount程序,以此来理解和体验云计算的基础应用。这个实验主要涉及以下几个关键知识点: 1. **Linux系统基础**:实验要求学生具备Linux系统的使用知识,包括基本的命令行操作、...
在实际环境中,我们需要配置 Hadoop 集群,设置输入文件路径,编译并打包 WordCount 程序,最后通过 Hadoop 的 `hadoop jar` 命令提交作业到集群运行。调试时,可以查看日志输出,检查错误信息,优化性能。 通过...
【描述】:本实验旨在让学生掌握如何在Hadoop平台上部署并运行WordCount程序,这是Hadoop入门的经典案例,旨在统计文本中的单词出现次数。通过实践,学生将了解Hadoop分布式文件系统(HDFS)的工作原理以及MapReduce...
运行WordCount程序时,Hadoop会自动将数据分发到集群的各个节点上,每个节点上的TaskTracker会执行对应的Map任务。当Map任务完成,中间结果会被排序和分区,然后传递给Reduce任务。Reduce任务最终将结果写回到HDFS,...
在编译完成后,我们可以使用以下命令来运行 WordCount 程序: ``` hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output ``` 其中 input 是输入文件的路径,output 是输出文件的路径。 ...
Hadoop单机伪分布式搭建和运行第一个WordCount程序 Hadoop是Apache基金会下的一个开源的大数据处理框架,它广泛应用于数据处理、数据分析和机器学习等领域。下面是关于Hadoop单机伪分布式搭建和运行第一个WordCount...
最详细hadoop配置教程!centos下完美运行wordcount程序,从无到有,初学者必备!我自己亲自试了一遍并加以修改,准确无误~
这个jar包是运行Hadoop WordCount程序的关键,它集成了所有的类和依赖库。运行这个程序,你需要先配置好Hadoop环境,确保Hadoop集群运行正常。然后,将输入数据(例如,一个文本文件)上传到HDFS,最后通过Hadoop的...
本篇文档深入浅出地介绍了Hadoop集群的WordCount运行详解,从MapReduce理论到WordCount程序的运行,再到源码分析,内容丰富且详细,对于想要入门和深入了解Hadoop分布式计算和MapReduce模型的读者来说,是一份宝贵的...
### Hadoop-1.2.1 运行WordCount...总之,运行Hadoop-1.2.1下的WordCount示例涉及多个步骤,从环境搭建、数据准备到程序执行及结果验证都需要仔细操作。特别是在遇到问题时,应根据具体错误信息逐一排查并解决问题。
通过这个实验,学生不仅掌握了Linux操作系统和虚拟化技术,还深入理解了Hadoop分布式计算框架,特别是MapReduce模型的运作机制,以及如何在实际环境中部署和运行Hadoop程序。这些技能对于理解和开发云计算应用至关...