更多IT互联网学习资源,尽在“通通学 - 知识学习与分享平台”
学习过Hadoop的都知道中,里面有一个经典实例就是统计文档每个单词出现的次数,即WordCount实例。这里利用Executor框架及带返回值的多线程实现Word?Count实例。
以下是核心代码:
WordCountMapper.java
package com.tongtongxue.wordcount; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; import java.util.concurrent.Callable; public class WordCountMapper implements Callable<Map> { private int start; private int end; private File[] files; public WordCountMapper() { } public WordCountMapper(File[] files, int start, int end) { this.files = files; this.start = start; this.end = end; } @Override public Map call() throws Exception { BufferedReader reader = null; Map result = new HashMap(); String line = null; for (int i = start; i < end; i++) { File file = files[i]; try { reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8")); while ((line = reader.readLine()) != null) { StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { String word = tokenizer.nextToken(); if (result.containsKey(word)) { result.put(word, result.get(word) + 1L); } else { result.put(word, 1L); } } } } finally { if (reader != null) { reader.close(); } } } return result; } }
WordCount.java
package com.tongtongxue.wordcount; import java.io.File; import java.io.FileFilter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; public class WordCount { private ExecutorService executorService; private int threadNum; private List<Future<Map>> tasks = new ArrayList<Future<Map>>(); private File[] txtFiles; public WordCount() { // 以cup的个数,作为线程个数 threadNum = Runtime.getRuntime().availableProcessors(); executorService = Executors.newFixedThreadPool(threadNum); } public WordCount(int threadNum) { this.threadNum = threadNum; executorService = Executors.newFixedThreadPool(threadNum); } public void count(String dirPath) throws Exception { File dir = new File(dirPath); txtFiles = dir.listFiles(new FileFilter() { @Override public boolean accept(File file) { String fileName = file.getName(); if (fileName.endsWith(".txt") || fileName.endsWith(".TXT")) { return true; } return false; } }); int size = txtFiles.length; for (int i = 0; i size) { end = size; } WordCountMapper mapper = new WordCountMapper(txtFiles, start, end); FutureTask<Map> futureTask = new FutureTask<Map>(mapper); tasks.add(futureTask); if (!executorService.isShutdown()) { executorService.submit(futureTask); } } showResult(); } public void close() { executorService.shutdown(); } public void showResult() throws Exception { Map map = new HashMap(); for (Future<Map> task : tasks) { Map result = task.get(); for (Entry entry : result.entrySet()) { String word = entry.getKey(); Long num = entry.getValue(); if (map.containsKey(word)) { map.put(word, map.get(word) + num); } else { map.put(word, num); } } } System.out.println(map.size()); for (Entry entry : map.entrySet()) { System.out.println(entry.getKey() + " ------> " + entry.getValue()); } } }
转载本文链接为:http://www.tongtongxue.com/archives/1141.html
相关推荐
### Hadoop运行WordCount实例详解 #### 一、Hadoop简介与WordCount程序的重要性 Hadoop 是一个由Apache基金会所开发的分布式系统基础架构。它能够处理非常庞大的数据集,并且能够在集群上运行,通过将大数据分割...
**使用Hadoop实现WordCount实验报告** 实验报告的目的是详细记录使用Hadoop在Windows环境下实现WordCount应用的过程,包括环境配置、WordCount程序的实现以及实验结果分析。本实验旨在理解Hadoop分布式计算的基本...
总之,Hadoop的WordCount实例是学习和理解分布式计算的一个重要起点,它展示了如何利用Hadoop框架进行数据处理,同时也为更复杂的分布式应用程序开发提供了基础。通过对WordCount的深入研究,我们可以更好地理解和...
在这个案例中,我们将深入探讨如何在 Hadoop 环境中使用 MapReduce 实现 WordCount。 【描述】在 Hadoop 环境中,WordCount 的实现主要涉及两个关键阶段:Map 阶段和 Reduce 阶段。Map 阶段将原始输入数据(通常是...
Hadoop的WordCount实例代码是Hadoop MapReduce编程模型的经典示例,通过对大文件中的单词出现次数的统计,展示了MapReduce编程模型的基本思想和实现细节。 Hadoop MapReduce编程模型 Hadoop MapReduce编程模型是...
这是一个wordcount的一个简单实例jar包,仅仅用来做测试。 map类:org.apache.hadoop.wordcount.WordCountMapReduce$WordCountMapper reduce类 org.apache.hadoop.wordcount.WordCountMapReduce$WordCountReducer
接下来,我们将深入探讨Hadoop的WordCount实例及其背后的原理。 首先,我们要理解Hadoop的核心组件——HDFS(Hadoop Distributed File System)和MapReduce。HDFS是Hadoop的分布式文件系统,将大文件分割成多个块并...
总结来说,"hadoop实现wordcount"是一个利用Hadoop的MapReduce模型处理大规模文本数据的实例,不仅可以统计词频,还可以扩展到情感分析等复杂任务。这个过程涉及到数据分片、并行处理、结果聚合等多个关键步骤,对于...
### Ubuntu上运行Hadoop WordCount实例详解 #### 一、环境搭建与配置 在Ubuntu系统上部署并运行Hadoop WordCount实例,首先需要确保已经安装了Hadoop环境,并且版本为hadoop-0.20.2。此版本较旧,主要用于教学或...
通过这个Wordcount实例,我们可以学习到Hadoop MapReduce的基本工作原理,同时也可以了解到如何在Java中编写Hadoop程序。这只是一个基本的应用,实际的Hadoop项目可能会涉及更复杂的逻辑和优化,如分块、分区、压缩...
大数据实验报告 Hadoop 编程实现 wordcount 单词统计程序附源码 本实验报告旨在介绍使用 Hadoop 编程实现 wordcount 单词统计程序的步骤和代码实现。实验的目的在于熟悉 Hadoop 虚拟机的安装与环境的配置,初步理解...
在标题中的"WordCount2_hadoopwordcount_"可能指的是Hadoop WordCount的第二个版本,通常是在Hadoop 2.x环境下运行。这个程序的核心任务是对输入文本进行分词,统计每个单词出现的次数,并将结果输出。在这个过程中...
Hadoop开发WordCount源码程序详细讲解,每一行都带注释说明。
Hadoop 是一种基于分布式处理的大数据处理框架,其中 WordCount 程序是一个经典的示例程序,用于统计文本文件中的词频信息。在 Hadoop 1.2.1 版本下,我们可以修改 WordCount 程序以便在控制台输出结果。 在 ...
hadoop-wordcount测试程序,jar包,单词统计的不二之选
【Hadoop Demo WordCount】是Hadoop初学者入门的经典示例,它展示了如何利用Hadoop分布式计算框架处理大规模文本数据。这个程序的核心在于统计文本中各个单词出现的次数,是理解MapReduce编程模型的一个基础应用。 ...
Hadoop环境搭建及wordcount实例运行.pdf
WordCount是Hadoop入门的经典示例,用于统计文本中单词出现的次数。本项目将详细介绍如何在Hadoop环境中成功运行WordCount程序,以及涉及到的相关知识点。 首先,`Hadoop`是一个基于Java的框架,设计用来处理和存储...
Hadoop WordCount 是一个经典的示例程序,用于演示如何利用Hadoop MapReduce框架进行大规模数据处理。WordCount 的基本任务是计算文本文件中每个单词出现的次数。通过这个简单的例子,可以了解Hadoop的基本操作流程...