package com.my.wordcount;
import java.io.IOException;
import java.net.URI;
import java.net.URL;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/**
*
* 新的API的WordCount写法
* 源文件hellow,内容如下:
* hellow hadoop
* hellow world
* 注意:
* 重写map函数时,保留@Override关键字
* 重写reduce函数时,一定要注意@Override关键字,否则不会执行reduce阶段的<k3,v3>
* 步骤如下:
* 1:这是在map阶段。
* 1.1:读取hdfs中的文件,每一行解析为一个<k,v>,并且每一个键值对调用一次map函数。
* 如下:
* hdfs上传的文件经过InputFormat(按照偏移量处理:每一行的文本偏移量为key,每一行的内容为value)解析为:
* <0 ,hellow hadoop>
* <14,hellow world>
* 两个键值对<k1,v1>,每一个键值对分别调用Map函数,按照空格拆分单词,获取到每一行文本中的单词
*
* 1.2:覆盖map函数,接受1产生的<k,v>进行处理后转换为新的<k,v>输出。
* 如下:
* <hellow,1>,<hadoop,1>,<hellow,1>,<world,1>
*
* 1.3:对2输出的<k,v>进行分区,默认为1个分区。
* 1.4:对不同分区中的数据进行排序(按k排序),分组。分组是指相同key的value放到一个集合中。
* 如下:
* 排序后<hadoop,1>,<hellow,1>,<hellow,1>,<world,1>
* 分组后<hadoop,{1}>,<hellow,{1,1}>,<world,{1}>
*
* 1.5:(可选,涉及到了数据算法)对分组后的数据进行规约。
* 如下:
* 这里的算法为单词计数法
*
* 2:这是在reduce阶段。
* 2.1:多个map任务的输出,按照不同的分区通过网络copy到不同的reduce节点。
* 如下:
* 将分组后的<hadoop,{1}>,<hellow,{1,1}>,<world,{1}>复制到每个节点
*
* 2.2:对多个map的输出进行排序,合并,覆盖reduce函数,接受分组后的数据按照业务逻辑处理后产生新的<k,v>。
* 如下:
* 通过遍历相同key的value计算总和,得到每个单词的出现的次数
* <hadoop,1>,<hellow,2>,<world,1>
*
* 2.3:对reduce的输出写入到hdfs中。
* 如下:
* 写入到hefs的文件中
*
*/
public class WordCount extends Configured implements Tool {
public final static String HDFS_INPUT = "hdfs://pc1:9000/hellow";
public final static String HDFS_OUTPUT = "hdfs://pc1:9000/hellowOut";
public static void main(String[] args) throws Exception {
String[] paths = {HDFS_INPUT,HDFS_OUTPUT};
int status = ToolRunner.run(new WordCount(), paths);
System.out.println("System.gc("+status+");");
}
@Override
public int run(String[] args) throws Exception{
boolean status = false;
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
Job job = null;
try {
job = new Job(getConf());
job.setJarByClass(WordCount.class);
job.setJobName(WordCount.class.getSimpleName());
} catch (IOException e) {
e.printStackTrace();
}
FileSystem fileSystem = FileSystem.get(new URI(HDFS_OUTPUT),new Configuration());
if (fileSystem.exists(new Path(args[1]))){
System.out.println("如果"+args[1]+"存在则删除!");
fileSystem.delete(new Path(args[1]), true);
}
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
status = job.waitForCompletion(true);
return status?0:1;
}
/**
*
* @author
*
*/
static class Map extends Mapper<LongWritable, Text, Text, LongWritable>{
public void map(LongWritable k1, Text v1, Context context) throws IOException ,InterruptedException {
System.out.println("k1:"+k1.get()+",v1:"+v1.toString());
final String[] splited = v1.toString().split(" ");
for (String word : splited) {
context.write(new Text(word), new LongWritable(1l));
}
};
}
static class Reduce extends Reducer<Text, LongWritable, Text, LongWritable>{
public void reduce(Text k2, java.lang.Iterable<LongWritable> v2, Context context) throws java.io.IOException ,InterruptedException {
System.out.println("k2:"+k2+",v2:"+v2.toString());
long count = 0L;
for (LongWritable item : v2) {
count += item.get();
}
context.write(k2, new LongWritable(count));
};
}
}
以上代码复制可用
分享到:
相关推荐
【标题】Hadoop MapReduce 实现 WordCount MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的...
### Spark 下实现 WordCount #### 一、简介 在大数据处理领域,Apache Spark 是一个非常流行的框架,它能够高效地处理大规模数据集。WordCount 是一个经典的示例程序,用于统计文本文件中每个单词出现的次数。本篇...
**使用Hadoop实现WordCount实验报告** 实验报告的目的是详细记录使用Hadoop在Windows环境下实现WordCount应用的过程,包括环境配置、WordCount程序的实现以及实验结果分析。本实验旨在理解Hadoop分布式计算的基本...
在Hadoop生态系统中,`WordCount`程序是一个经典的示例,用于演示分布式计算的基本原理。在标题中的"WordCount2_hadoopwordcount_"可能指的是Hadoop WordCount的第二个版本,通常是在Hadoop 2.x环境下运行。这个程序...
【标题】"最简单MR WordCount" 涉及到的是MapReduce编程模型中的一个经典示例,WordCount。在Hadoop生态系统中,WordCount是一个基础但非常重要的应用,用于统计文本文件中每个单词出现的次数。这个程序展示了...
WordCount是Hadoop中的一个经典示例程序,用于演示如何在Hadoop环境中进行简单的数据处理。这个程序的基本任务是对输入文本中的每个单词进行计数,统计出每个单词出现的频率。 Hadoop的核心组件包括HDFS(Hadoop ...
### Hadoop运行WordCount实例详解 #### 一、Hadoop简介与WordCount程序的重要性 Hadoop 是一个由Apache基金会所开发的分布式系统基础架构。它能够处理非常庞大的数据集,并且能够在集群上运行,通过将大数据分割...
"Hadoop 1.2.1 版本下修改 WordCount 程序并编译" Hadoop 是一种基于分布式处理的大数据处理框架,其中 WordCount 程序是一个经典的示例程序,用于统计文本文件中的词频信息。在 Hadoop 1.2.1 版本下,我们可以修改...
大数据实验报告 Hadoop 编程实现 wordcount 单词统计程序附源码 本实验报告旨在介绍使用 Hadoop 编程实现 wordcount 单词统计程序的步骤和代码实现。实验的目的在于熟悉 Hadoop 虚拟机的安装与环境的配置,初步理解...
《Hadoop入门脚本WordCount详解》 在大数据处理领域,Hadoop是一个不可或缺的重要工具,它的分布式计算模型为海量数据的处理提供了强大的支持。而WordCount则是Hadoop入门的经典示例,通过它,我们可以深入理解...
在本文中,我们将深入探讨如何在Eclipse IDE中安装Hadoop插件,并通过该插件运行WordCount示例,特别关注Windows环境下的配置。首先,我们需要了解Eclipse Hadoop插件的作用,它允许开发者在Eclipse环境中直接创建、...
Hadoop示例程序WordCount运行及详解 Hadoop平台上进行WordCount是非常重要的,掌握了WordCount可以更好地理解Hadoop的map-reduce编程模型。本文将详细讲解Hadoop平台上WordCount的运行和实现。 基于Hadoop的map-...
**Spark上的WordCount程序详解** Spark作为一个分布式计算框架,提供了高效、灵活的数据处理能力。在Spark上实现WordCount是入门的经典示例,它演示了如何处理大规模文本数据并进行简单的统计分析。在这个程序中,...
### Hadoop WordCount项目打包与部署详解 #### 一、Hadoop WordCount简介 Hadoop WordCount 是一个经典的示例程序,用于演示如何利用Hadoop MapReduce框架进行大规模数据处理。WordCount 的基本任务是计算文本文件...
WordCount是Hadoop入门的经典示例,用于统计文本中单词出现的次数。本项目将详细介绍如何在Hadoop环境中成功运行WordCount程序,以及涉及到的相关知识点。 首先,`Hadoop`是一个基于Java的框架,设计用来处理和存储...
### Ubuntu上运行Hadoop WordCount实例详解 #### 一、环境搭建与配置 在Ubuntu系统上部署并运行Hadoop WordCount实例,首先需要确保已经安装了Hadoop环境,并且版本为hadoop-0.20.2。此版本较旧,主要用于教学或...
实验2的目的是在Hadoop平台上部署WordCount程序,以此来理解和体验云计算的基础应用。这个实验主要涉及以下几个关键知识点: 1. **Linux系统基础**:实验要求学生具备Linux系统的使用知识,包括基本的命令行操作、...
WordCount是Hadoop入门学习中的一个经典示例,用于统计文本中各个单词出现的次数。这个程序简单直观,很好地展示了MapReduce的工作原理。接下来,我们将深入探讨Hadoop的WordCount实例及其背后的原理。 首先,我们...
**Spark 最简单WordCount** Spark是一款高性能的分布式计算框架,主要设计用于大数据处理。它提供了弹性分布式数据集(RDD)的概念,这是一种可分区、容错且可以并行操作的数据结构。在Spark中,我们可以通过Scala...
### Hadoop-1.2.1 运行WordCount实例详解 #### 一、环境准备与搭建 在开始运行WordCount实例之前,首先确保已经按照之前的步骤完成了Hadoop-1.2.1环境的搭建。这包括但不限于安装JDK、配置Hadoop环境变量以及设置...