Hadoop读书笔记系列文章:http://blog.csdn.net/caicongyang/article/category/2166855(系列文章会逐步修整完成,添加数据文件格式预计相关注释)
1.说明:
从给定的文件中的找到最大的100个值,给定的数据文件格式如下:
533 16565 17800 2929 11374 9826 6852 20679 18224 21222 8227 5336 912 29525 3382 2100 10673 12284 31634 27405 18015 ...
2.下文代码中使用到TreeMap类,所以先写一个demo
TreeMapDemo.java
package suanfa; import java.util.Map.Entry; import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { TreeMap<Long, Long> tree = new TreeMap<Long, Long>(); tree.put(1333333L, 1333333L); tree.put(1222222L, 1222222L); tree.put(1555555L, 1555555L); tree.put(1444444L, 1444444L); for (Entry<Long, Long> entry : tree.entrySet()) { System.out.println(entry.getKey()+":"+entry.getValue()); } System.out.println(tree.firstEntry().getValue()); //最小值 System.out.println(tree.lastEntry().getValue()); //最大值 System.out.println(tree.navigableKeySet()); //从小到大的正序key集合 System.out.println(tree.descendingKeySet());//从大到小的倒序key集合 } }
3.MapReduce代码
TopKAapp.java
package suanfa; import java.io.IOException; import java.net.URI; import java.util.TreeMap; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; 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.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner; /** * * <p> * Title: TopKAapp.java Package suanfa * </p> * <p> * Description: 从算1000w个数据中找到最大的100个数 * <p> * * @author Tom.Cai * @created 2014-12-10 下午10:56:44 * @version V1.0 * */ public class TopKAapp { private static final String INPUT_PATH = "hdfs://192.168.80.100:9000/topk_input"; private static final String OUT_PATH = "hdfs://192.168.80.100:9000/topk_out"; public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); final FileSystem fileSystem = FileSystem.get(new URI(INPUT_PATH), conf); final Path outPath = new Path(OUT_PATH); if (fileSystem.exists(outPath)) { fileSystem.delete(outPath, true); } final Job job = new Job(conf, TopKAapp.class.getSimpleName()); FileInputFormat.setInputPaths(job, INPUT_PATH); job.setMapperClass(MyMapper.class); job.setPartitionerClass(HashPartitioner.class); job.setNumReduceTasks(1); job.setReducerClass(MyReducer.class); job.setOutputKeyClass(NullWritable.class); job.setOutputValueClass(LongWritable.class); FileOutputFormat.setOutputPath(job, new Path(OUT_PATH)); job.setOutputFormatClass(TextOutputFormat.class); job.waitForCompletion(true); } static class MyMapper extends Mapper<LongWritable, Text, NullWritable, LongWritable> { public static final int K = 100; private TreeMap<Long, Long> tree = new TreeMap<Long, Long>(); public void map(LongWritable key, Text text, Context context) throws IOException, InterruptedException { long temp = Long.parseLong(text.toString()); tree.put(temp, temp); if (tree.size() > K) tree.remove(tree.firstKey()); } @Override protected void cleanup(Context context) throws IOException, InterruptedException { for (Long text : tree.values()) { context.write(NullWritable.get(), new LongWritable(text)); } } } static class MyReducer extends Reducer<NullWritable, LongWritable, NullWritable, LongWritable> { public static final int K = 100; private TreeMap<Long, Long> tree = new TreeMap<Long, Long>(); @Override protected void cleanup(Context context) throws IOException, InterruptedException { for (Long val : tree.descendingKeySet()) { context.write(NullWritable.get(), new LongWritable(val)); } } @Override protected void reduce(NullWritable key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException { for (LongWritable value : values) { tree.put(value.get(), value.get()); if (tree.size() > K) tree.remove(tree.firstKey()); } } } }
欢迎大家一起讨论学习!有用的自己收!
记录与分享,让你我共成长!
欢迎查看我的其他博客;
我的个人博客:http://blog.caicongyang.com;
我的CSDN博客地址:http://blog.csdn.net/caicongyang;
相关推荐
Hadoop介绍,HDFS和MapReduce工作原理
Hadoop 3.x(MapReduce)----【MapReduce 概述】---- 代码 Hadoop 3.x(MapReduce)----【MapReduce 概述】---- 代码 Hadoop 3.x(MapReduce)----【MapReduce 概述】---- 代码 Hadoop 3.x(MapReduce)----...
Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop ...
根据提供的文件信息,本文将深入解析《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》这本书中的关键知识点,主要包括Hadoop的核心组件——MapReduce的设计理念、架构组成及其具体的实现原理。 ### Hadoop...
#### 四、Hadoop MapReduce的实践价值 1. **企业级应用**:许多大型企业和组织采用Hadoop MapReduce来处理大量数据,实现数据驱动的决策制定。 2. **性能提升**:通过合理配置和优化,可以显著提高数据处理的性能,...
在这个"大数据Hadoop MapReduce词频统计"的场景中,我们利用MapReduce来统计文本中的词汇出现频率。这是数据分析中一个常见的任务,有助于理解文本内容的概貌。Map阶段的任务是对输入的文本进行分词,并形成<单词, 1...
接着,安装Hadoop-Eclipse-Plugin插件,该插件允许开发者在Eclipse中直接编写、调试和运行MapReduce程序。配置插件时,要确保指向正确的Hadoop安装路径,以便Eclipse能识别Hadoop环境。通过Eclipse操作HDFS文件,...
在Hadoop生态系统中,我们可以通过Apache Mahout或者Spark MLlib等库实现基于MapReduce的推荐算法。Mahout提供了丰富的推荐算法实现,包括基于用户和物品的协同过滤,而Spark的并行计算能力则使得实时推荐成为可能。...
- 该项目实现了KNN算法在Hadoop平台基于***欧拉距离***,***加权欧拉距离***,***高斯函数***的MapReduce实现。 - 特色或创意:在网上KNN实现的例子上添加了基于***欧拉距离***,***加权欧拉距离***,***高斯函数***...
Hadoop.MapReduce 和 YARN 笔记 本节笔记主要介绍了 Hadoop.MapReduce 和 YARN 的基本概念、组成部分、工作原理以及实践应用。 一、MapReduce 概念 MapReduce 是 Hadoop 的核心组件之一,负责处理大规模数据。...
Hadoop 权威指南读书笔记 我自己画的一张图
这两种算法在分类和聚类分析中具有重要应用,而通过Hadoop的MapReduce框架,可以有效地分布式处理大量数据。 首先,我们来看KNN算法。KNN是一种基于实例的学习方法,它的核心思想是:一个未知类别的数据点可以通过...
Hadoop源码 包含mapred
(1)熟悉Hadoop开发包 (2)编写MepReduce程序 (3)调试和运行MepReduce程序 (4)完成上课老师演示的内容 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 二、实验内容 1.单词计数实验...
hadoop技术内幕 深入解析mapreduce架构设计与实现原理,这本书从底层架构和设计的校对hadoop进行了讲解,比较全面深入。
在这个案例中,我们将深入探讨如何在 Hadoop 环境中使用 MapReduce 实现 WordCount。 【描述】在 Hadoop 环境中,WordCount 的实现主要涉及两个关键阶段:Map 阶段和 Reduce 阶段。Map 阶段将原始输入数据(通常是...
在Hadoop生态系统中,MapReduce是一种分布式计算框架,它允许用户编写并运行处理大量数据的程序。这个"mapred.zip"文件显然包含了与Hadoop MapReduce相关的测试样例、文档和源码,这对于理解MapReduce的工作原理以及...