Hadoop--08--WordCount

<span style="font-family:SimSun;font-size:18px;">import java.io.IOException;
import java.util.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;  

public class WordCount {  </span>
<span style="font-family:SimSun;font-size:18px;">
	<span style="white-space:pre">	</span>public static class WordCountMap 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 tokenizer = new StringTokenizer(line);
			 while (tokenizer.hasMoreTokens()) {
			   word.set(tokenizer.nextToken());
			   output.collect(word, one);
			 }
			}
		}  

		public static class WordCountReduce 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));
			}  

		}  

		public static void main(String[] args) throws Exception {
			JobConf conf = new JobConf(WordCount.class);
			conf.setJobName("wordcount");  

			conf.setOutputKeyClass(Text.class);
			conf.setOutputValueClass(IntWritable.class);  

			conf.setMapperClass(Map.class);
			conf.setReducerClass(Reduce.class);  

			conf.setInputFormat(TextInputFormat.class);
			conf.setOutputFormat(TextOutputFormat.class);  

			FileInputFormat.setInputPaths(conf, new Path(args[0]));
			FileOutputFormat.setOutputPath(conf, new Path(args[1]));  

			JobClient.runJob(conf);
			}
	}  </span>

程序分析

1、WordCountMap类继承了org.apache.hadoop.mapreduce.Mapper,4个泛型类型分别是map函数输入key的类型,输入value的类型,输出key的类型,输出value的类型。

2、WordCountReduce类继承了org.apache.hadoop.mapreduce.Reducer,4个泛型类型含义与map类相同。

3、map的输出类型与reduce的输入类型相同,而一般情况下,map的输出类型与reduce的输出类型相同,因此,reduce的输入类型与输出类型相同。

4、hadoop根据以下代码确定输入内容的格式:

job.setInputFormatClass(TextInputFormat.class);

TextInputFormat是hadoop默认的输入方法,它继承自FileInputFormat。在TextInputFormat中,它将数据集切割成小数据集InputSplit,每一个InputSplit由一个mapper处理。此外,InputFormat还提供了一个RecordReader的实现,将一个InputSplit解析成<key,value>的形式,并提供给map函数:

key:这个数据相对于数据分片中的字节偏移量,数据类型是LongWritable。

value:每行数据的内容,类型是Text。

因此,在本例中,map函数的key/value类型是LongWritable与Text。

5、Hadoop根据以下代码确定输出内容的格式:

job.setOutputFormatClass(TextOutputFormat.class);

TextOutputFormat是hadoop默认的输出格式,它会将每条记录一行的形式存入文本文件,如

the 30

happy 23

……

时间: 2024-08-02 23:29:03

Hadoop--08--WordCount的相关文章

Hadoop中WordCount代码-直接加载hadoop的配置文件

Hadoop中WordCount代码-直接加载hadoop的配置文件 在Myeclipse中,直接编写WordCount代码,代码中直接调用core-site.xml,hdfs-site.xml,mapred-site.xml配置文件 package com.apache.hadoop.function; import java.io.IOException; import java.util.Iterator; import java.util.StringTokenizer; import 

在ubuntu上安装eclipse同时连接hadoop运行wordcount程序

起先我是在win7 64位上远程连接hadoop运行wordcount程序的,但是这总是需要网络,考虑到这一情况,我决定将这个环境转移到unbuntu上 需要准备的东西 一个hadoop的jar包,一个连接eclipse的插件(在解压的jar包里有这个东西),一个hadoop-core-*.jar(考虑到连接的权限问题) 一个eclipse的.tar.gz包(其它类型的包也可以,eclipse本身就是不需要安装的,这里就不多说了) 因为我之前在win7上搭建过这个环境,所以一切很顺利,但还是要在

5行代码怎么实现Hadoop的WordCount?

初学编程的人,都知道hello world的含义,当你第一次从控制台里打印出了hello world,就意味着,你已经开始步入了编程的大千世界,这和第一个吃螃蟹的人的意义有点类似,虽然这样比喻并不恰当. 如果说学会了使用hello world就代表着你踏入了单机编程的大门,那么学会在分布式环境下使用wordcount,则意味着你踏入了分布式编程的大门.试想一下,你的程序能够成百上千台机器的集群中运行,是不是一件很有纪念意义的事情呢?不管在Hadoop中,还是Spark中,初次学习这两个开源框架做

[hadoop]命令行编译并运行hadoop例子WordCount

首先保证JDK.Hadoop安装设置成功 可以参考[linux]ubuntu下安装hadoop [linux]ubutnu12.04 下安装jdk1.7 使用hadoop版本为1.2.1,jdk为1.7 在hadoop-1.2.1\src\examples\org\apache\hadoop\examples找到WordCount.java 源码如下: 1 /** 2 * Licensed under the Apache License, Version 2.0 (the "License&q

Hadoop下面WordCount运行详解

单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版"Hello World",该程序的完整代码可以在Hadoop安装包的"src/examples"目录下找到.单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数,如下图所示. 现在我们以"hadoop"用户登录"Master.Hadoop"服务器. 1. 创建本地的示例数据文件: 依次进入[Home]-[hadoop]-[ha

[Linux][Hadoop] 运行WordCount例子

紧接上篇,完成Hadoop的安装并跑起来之后,是该运行相关例子的时候了,而最简单最直接的例子就是HelloWorld式的WordCount例子.   参照博客进行运行:http://xiejianglei163.blog.163.com/blog/static/1247276201443152533684/   首先创建一个文件夹,并创建两个文件,目录随意,为以下文件结构: examples --file1.txt --file2.txt 文件内容随意填写,我是从新闻copy下来的一段英文: 执

【Hadoop】Hadoop mr wordcount基础

1.基本概念 2.Mapper package com.ares.hadoop.mr.wordcount; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; //Long, String,

hadoop的WordCount样例

package cn.lmj.mapreduce; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.FileInputFormat; import org

使用hadoop实现wordcount 自己的实现过程

1[[email protected] ~]$ start-all.sh 2 [[email protected] ~]$ jps 2465 NameNode 2594 DataNode 3333 Jps 2759 SecondaryNameNode 3017 NodeManager 2909 ResourceManager 3 [[email protected] ~]$ cd file (注意 之前已存在file文件夹) 4 [[email protected] file]$ echo "d

hadoop的wordcount例子运行

可以通过一个简单的例子来说明MapReduce到底是什么: 我们要统计一个大文件中的各个单词出现的次数.由于文件太大.我们把这个文件切分成如果小文件,然后安排多个人去统计.这个过程就是”Map”.然后把每个人统计的数字合并起来,这个就是“Reduce". 上面的例子如果在MapReduce去做呢,就需要创建一个任务job,由job把文件切分成若干独立的数据块,并分布在不同的机器节点中.然后通过分散在不同节点中的Map任务以完全并行的方式进行处理.MapReduce会对Map的输出地行收集,再将结