符号、记法
其中{k,v}指一个Key,Value对,{..} 中第一个分量是Key,第二个是Value。
[e]指一个集合,其中的元素为e。
[{k,v}]就指一个{k,v}的集合。
问题
给定巨大的集合S=[{k1,k2}],对S中每个k1,计算k1相同,而k2不同的元素个数。生成[{k1,distinct_count([k2])}]。
其中S数据的特点是:
1. 不同k1的数目很少(少于1K,很可能小于机器数目);
2. 不同k2的数目很大(大于20M);
3. 总的记录数目很大(大于1G);
4. k1的分布很不均匀,最频繁的k1,其记录数占到总数的1/3,对应的独立k2几乎包括整个k2集合;
5. k2的分布可以认为是均匀分布。
数据集的这些特点,也正是这种方法的适用条件。如果k1,k2的分布都很均匀,并且不同k1的数目远大于机器数目,还是用传统方案比较简单。
MapReduce解决方案
传统方案
Map.Input={k1,k2}
Map.Output={k1,k2}
Partition=Hash(k1)
Reduce.Input={k1,k2}
Reduce.Output={k1,distinct_count(k2)}
Reduce中,对每个k1,需要做set_union,计算
distinct_count(k2)=count(set_union([[k2]]))
这种方法的问题是因为k1的分布不均匀,导致负载不平衡,最频繁的k1,成为计算的瓶颈,无法提高并行度。
倒转Key
Map1.Input={k1,k2}
Map1.Output={k2,k1}
Partition1=Hash(k2)
Reduce1.Input=Map1.Output={k2,k1}
Reduce1.Output={k1,cnt=distinct_count([{k1,k2}])}
Map2.Input=Reduce1.Output
Map2=Identity
Partition2=Hash(k1)
Reduce2.Input=Map2.Output={k1,cnt}
Reduce2.Output={k1,sum([cnt])}
l 在Map1和Reduce1之间,按Hash(k2)进行partition。
l 每个Reduce1处理的数据就只包含k2的一个子集;因为k2均匀分布,每个子集尺寸相当;最关键之处就在这里,这样一个转换,达到了负载均衡!
l Reduce1维护一个全局的hash_map<k1,hash_set<k2> >,对每条记录,分别进行一次k1和k2的查找或插入【m[k1].insert(k2)】。
l Reduce2每读一条输入,要进行一次k1的查找,并累加该k1->cnt【m[k1]+=cnt】。
分享到:
相关推荐
这是MapReduce工作流程中的第一步,它接收键值对(`LongWritable key, Text value`)作为输入,这里`key`通常是文件块的偏移量,`value`是该位置的行文本。Mapper的主要任务是处理输入数据并生成中间键值对。在这个...
### MapReduce综合应用案例——招聘数据清洗 #### 一、背景 随着互联网技术的迅猛发展,各类在线招聘平台成为连接求职者与企业的桥梁。这些平台不仅提供了海量的招聘信息,也为企业的人才选拔提供了便利。然而,在...
7W+条数据,大数据实验源数据——商用车销量数据案例.xlsx,可用做大数据实验,数据挖掘、数据分析等
在计算机科学领域,尤其是大数据处理和搜索引擎技术中,倒排索引(Inverted Index)是一种高效的数据结构,常用于快速定位文档中特定关键词的位置。MapReduce是Apache Hadoop框架下的并行计算模型,用于处理和生成...
MapReduce是Apache Hadoop项目的核心组件之一,它是一种分布式计算模型,用于处理和生成大规模数据集。本学习案例聚焦于MapReduce框架在天气统计中的应用,通过实际编程实践加深对框架的理解。 首先,MapReduce的...
MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。它将复杂的并行计算任务分解成两个主要阶段:Map(映射)和Reduce(化简)。在这个"MapReduce项目 数据清洗"中,我们将探讨...
这本书由O’Reilly Media出版,并提供了有关MapReduce的多个设计模式,这些模式指导用户如何在特定的场景中实现高效的数据处理。 根据给出的内容,本书可能包括以下知识点: 1. MapReduce设计模式:涉及MapReduce...
在这个“MapReduce暑假大作业——基于紫荆的种子推荐”项目中,我们将会深入理解并实践如何利用MapReduce来解决实际问题,特别是针对大数据环境下的推荐系统。这个项目涉及到的核心知识点包括MapReduce的工作原理、...
"云计算技术之————MapReduce" 云计算技术中的 MapReduce 是一种分布式编程模型,用于大规模群组中的海量数据处理。MapReduce 由 Google 公司的 Jeffrey Dean 和 Sanjay Ghemawat 开发,旨在解决大规模数据处理...
云计算负载均衡是一种重要的技术,它在分布式计算环境中扮演着关键角色,特别是在大数据处理和分析的背景下,如Hadoop。负载均衡的主要目标是有效地分配工作负载,确保系统的稳定性和高可用性,同时最大化资源利用率...
MapReduce综合应用案例 - 招聘数据清洗-结果
运行说明:在linux终端输入 $ hadoop jar test-1.0-SNAPSHOT.jar WordCount /input/* /MyOutput1/ 后两个参数是hdfs上面【输入】的文本文件目录和【输出】目录。 记得清空输出目录。
MapReduce之数据清洗ETL详解 MapReduce是一种基于Hadoop的分布式计算框架,广泛应用于大数据处理领域。数据清洗(Data Cleaning)是数据处理过程中非常重要的一步,旨在清洁和转换原始数据,使其更加可靠和有用。...
**大数据技术原理及应用——MapReduce初级编程实践** MapReduce是一种分布式计算模型,由Google提出,主要用于处理和生成大规模数据集。在这个实验中,我们将学习如何利用MapReduce编程解决实际问题,包括数据去重...
mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce...
它极大地简化了在大规模集群上执行数据密集型任务的过程,隐藏了复杂的并行处理、容错、数据分发、负载均衡等底层细节。 1. **MapReduce原理** - **绪论**:MapReduce的核心思想是将大规模数据的处理分解为两个...
它的设计模式是MapReduce编程中实现高效数据处理的核心方法和策略。我们将深入探讨这些模式,并理解它们在大数据处理中的应用。 首先,MapReduce设计模式的书籍由Donald Miner和Adam Shook所著,该书详细介绍了...
评论数据则可以帮助我们理解用户对视频的反馈,识别热门话题、情感分析以及用户之间的互动模式。 在实际操作中,我们首先需要将YouTube数据从原始格式转换为Hadoop友好的格式,如CSV或JSON,然后使用Hadoop的工具...