题外话:
《Hadoop in Action》 是一本非常不错的交Hadoop的入门书,而且建议看英文版。此书作者的英文表达非常简单易懂。相信有一定英文阅读能力的同学直接用英文版就能非常容易的上手~
进入正题。 这个题目是《Hadoop in Action》 上面的一道题目,求出Top K的值。
我自己随便弄了一个输入文件:
g 445 a 1117 b 222 c 333 d 444 e 123 f 345 h 456
讲讲我的思路:
对于Top K的问题,首先要在每个block/分片之中找到这部分的Top K。并且由于只能输出一次,所以输出的工作需要在cleanup方法之中进行。为了简单,使用的是java之中的TreeMap,因为这个数据结构天生就带有排序功能。 而Reducer的工作流程跟Map其实是完全一致的,只是光Map一步还不够,所以只能再加一个Reduce步骤。
最终输出的格式为如下:(K=2)
1117 a 456 g
所以需要使用map。 如果只需要输出大小的话,直接使用TreeSet会更高效一点。
下面是实现的代码:
package hadoop_in_action_exersice; import java.io.IOException; import java.util.TreeMap; import org.apache.hadoop.conf.Configuration; 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.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; public class TopK { public static final int K = 2; public static class KMap extends Mapper<LongWritable, Text, IntWritable, Text> { TreeMap<Integer, String> map = new TreeMap<Integer, String>(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); if(line.trim().length() > 0 && line.indexOf("\t") != -1) { String[] arr = line.split("\t", 2); String name = arr[0]; Integer num = Integer.parseInt(arr[1]); map.put(num, name); if(map.size() > K) { map.remove(map.firstKey()); } } } @Override protected void cleanup( Mapper<LongWritable, Text, IntWritable, Text>.Context context) throws IOException, InterruptedException { for(Integer num : map.keySet()) { context.write(new IntWritable(num), new Text(map.get(num))); } } } public static class KReduce extends Reducer<IntWritable, Text, IntWritable, Text> { TreeMap<Integer, String> map = new TreeMap<Integer, String>(); public void reduce(IntWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException { map.put(key.get(), values.iterator().next().toString()); if(map.size() > K) { map.remove(map.firstKey()); } } @Override protected void cleanup( Reducer<IntWritable, Text, IntWritable, Text>.Context context) throws IOException, InterruptedException { for(Integer num : map.keySet()) { context.write(new IntWritable(num), new Text(map.get(num))); } } } public static void main(String[] args) { // TODO Auto-generated method stub Configuration conf = new Configuration(); try { Job job = new Job(conf, "my own word count"); job.setJarByClass(TopK.class); job.setMapperClass(KMap.class); job.setCombinerClass(KReduce.class); job.setReducerClass(KReduce.class); job.setOutputKeyClass(IntWritable.class); job.setOutputValueClass(Text.class); FileInputFormat.setInputPaths(job, new Path("/home/hadoop/DataSet/Hadoop/WordCount-Result")); FileOutputFormat.setOutputPath(job, new Path("/home/hadoop/DataSet/Hadoop/TopK-output1")); System.out.println(job.waitForCompletion(true)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关推荐
这里我们关注的是一个使用Hadoop框架,基于MapReduce方法来统计服务器日志中的TopK数据的项目。这个项目名为"TopK-Log-Map-Reduce-master",它揭示了如何利用分布式计算技术处理海量日志数据,找出出现频率最高的前K...
总结来说,基于项目K临近的协同过滤在Hadoop上的实现,是对大数据时代推荐系统的一种高效解决方案。它结合了人工智能的理论与Hadoop的分布式计算能力,实现了大规模数据的快速处理,为实际应用提供了强大的支持。
以及在大数据环境下所面临的内存容量和CPU处理速度的瓶颈问题,从改进初始中心选择方案和中心替换策略入手,利用Hadoop分布式计算平台结合基于Top [K]的并行随机采样策略,实现了一种高效稳定的[K]-Medoids并行算法...
1. 获取前 1K 个最大数:可以使用 Top K 算法,例如使用最小堆数据结构,维护一个大小为 1K 的堆,遍历所有数据,每次遇到比堆顶元素大的数就替换堆顶并重新调整堆。 2. 爬虫设计:需要实现 URL 规则配置、深度限制...
内容涵盖HDFS的JAVA API操作,如文件读取、写入、删除、元数据查询和文件列表等,以及MapReduce编程模型的多个应用,包括求平均数、Join操作、TopK算法、二次排序,并涉及自定义InputFormat、OutputFormat和shuflle...
目录 第1章二次排序:简介 19 第2章二次排序:详细示例 42 第3章 Top 10 列表 54 第4章左外连接 96 第5章反转排序 127 第6章移动平均 137 第7章购物篮分析 155 第8章共同好友 182 第9章使用MapReduce实现推荐引擎 ...
3. **Hadoop Shuffle过程**:在MapReduce中,Shuffle阶段是Map任务完成后,数据被分区并排序的过程,确保相同键的数据被分发到同一个Reducer。 4. **Spark集群运算模式**:Spark支持三种运算模式:本地模式(Local...
MRCube 在这个项目中,我实现了MRCube算法,该算法在Arnab Nandi,丛瑜,Philip Bohannon,...考虑一个仓库:(城市,州,国家,日,月,年,销售) ,其中: (城市,州,国家/地区) :位置维度 (日,月,年)
* 使用 MapReduce 实现 TopK 问题的示例:现在有 10 个文件夹,每个文件夹都有 1000000 个 URL,找出 top 1000000 URL。 10. 集群管理 * 可以使用 Puppet、Pdsh、Cloudera Manager、Zookeeper 等工具来管理 Hadoop...
这个任务是数据处理和算法优化的一个典型场景,通常涉及到大规模数据的排序和统计。下面将详细讨论相关知识点。 首先,面对一亿个数字的数据量,我们需要考虑的是数据处理的效率。由于数据规模巨大,如果使用传统的...
在每次划分操作中,我们选择一个枢轴元素,将小于枢轴的元素放在其左侧,大于枢轴的元素放在右侧。通过选取合适的枢轴,可以在O(n)的时间复杂度内找到第k小(大)的元素,对于找中位数,我们只需找到第(n/2)小的元素...
6.1 至6.4 未给出的章节可能涉及了Top K频繁模式挖掘、Reducer数量的选择以及如何处理大数据量的挑战。 7.1 至9.4 可能涵盖了实验设置、结果分析和未来研究方向。 总结,搜索记录频繁模式挖掘是通过Hadoop和...
4. **Top-k查询**:Top-k查询是数据挖掘和数据库查询中的一个重要概念,它返回查询结果中排名前k个最重要的条目。在实时移动空间查询中,这可能意味着找出最相关的k个设备、最频繁出现的k个故障模式或者最活跃的k个...
2.7 使用 MapReduce 来实现 TopK 问题,可以使用自定义的Mapper 和 Reducer 来实现数据的处理和排序。 大数据工程师面试题涵盖了 Hadoop 相关的知识点,包括 HDFS、MapReduce、YARN 等,旨在考察应聘者的 Hadoop ...
- **数据倾斜**: Hadoop作业中出现的一个常见问题是数据倾斜,即部分Reducer处理的数据量远大于其他Reducer,导致整个作业的执行效率低下。 - **解决方案**: 一种常见的解决方法是在数据进入Hadoop作业之前,对数据...
在实现上,文中提到了一个具体的硬件配置环境,例如使用了IBM的Hadoop集群环境,配置为5.3.20GHz的CPU和8G的内存,操作系统为Linux。利用这样的环境,可以进行大规模并行处理,满足实时监控系统的需求。 本文对于...
1. **Hadoop**:Hadoop是Apache基金会的一个开源框架,用于处理和存储大量数据。它以分布式文件系统HDFS为基础,允许数据在多台服务器之间进行分布式存储和处理。Hadoop MapReduce是Hadoop的核心组件之一,用于大...
- **找出Top K URL**:可以使用MapReduce实现,例如使用TreeMap保持前K个URL。 这些面试题涵盖了Hadoop的基础知识,包括架构、存储、计算模型以及实际应用,对于理解Hadoop生态系统及其工作原理至关重要。在准备...