`
febird
  • 浏览: 256393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MapReduce Key Revert ——特定数据模式的负载均衡

阅读更多

符号、记法

其中{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 Map1Reduce1之间,按Hash(k2)进行partition

l 每个Reduce1处理的数据就只包含k2的一个子集;因为k2均匀分布,每个子集尺寸相当;最关键之处就在这里,这样一个转换,达到了负载均衡!

l Reduce1维护一个全局的hash_map<k1,hash_set<k2> >,对每条记录,分别进行一次k1k2的查找或插入【m[k1].insert(k2)】。

l Reduce2每读一条输入,要进行一次k1的查找,并累加该k1->cntm[k1]+=cnt】。

0
0
分享到:
评论

相关推荐

    MapReduce操作实例-数据去重.pdf

    这是MapReduce工作流程中的第一步,它接收键值对(`LongWritable key, Text value`)作为输入,这里`key`通常是文件块的偏移量,`value`是该位置的行文本。Mapper的主要任务是处理输入数据并生成中间键值对。在这个...

    mapreduce综合应用案例 - 招聘数据清洗.docx

    ### MapReduce综合应用案例——招聘数据清洗 #### 一、背景 随着互联网技术的迅猛发展,各类在线招聘平台成为连接求职者与企业的桥梁。这些平台不仅提供了海量的招聘信息,也为企业的人才选拔提供了便利。然而,在...

    大数据实验数据——商用车销量数据案例.xlsx

    7W+条数据,大数据实验源数据——商用车销量数据案例.xlsx,可用做大数据实验,数据挖掘、数据分析等

    MapReduce操作实例-倒排索引.pdf

    在计算机科学领域,尤其是大数据处理和搜索引擎技术中,倒排索引(Inverted Index)是一种高效的数据结构,常用于快速定位文档中特定关键词的位置。MapReduce是Apache Hadoop框架下的并行计算模型,用于处理和生成...

    mapreduce框架学习之天气统计

    MapReduce是Apache Hadoop项目的核心组件之一,它是一种分布式计算模型,用于处理和生成大规模数据集。本学习案例聚焦于MapReduce框架在天气统计中的应用,通过实际编程实践加深对框架的理解。 首先,MapReduce的...

    mapreduce项目 数据清洗

    MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。它将复杂的并行计算任务分解成两个主要阶段:Map(映射)和Reduce(化简)。在这个"MapReduce项目 数据清洗"中,我们将探讨...

    MapReduce 设计模式

    这本书由O’Reilly Media出版,并提供了有关MapReduce的多个设计模式,这些模式指导用户如何在特定的场景中实现高效的数据处理。 根据给出的内容,本书可能包括以下知识点: 1. MapReduce设计模式:涉及MapReduce...

    MapReduce暑假大作业——基于紫荆的种子推荐.zip

    在这个“MapReduce暑假大作业——基于紫荆的种子推荐”项目中,我们将会深入理解并实践如何利用MapReduce来解决实际问题,特别是针对大数据环境下的推荐系统。这个项目涉及到的核心知识点包括MapReduce的工作原理、...

    云计算技术之————MapReduce

    "云计算技术之————MapReduce" 云计算技术中的 MapReduce 是一种分布式编程模型,用于大规模群组中的海量数据处理。MapReduce 由 Google 公司的 Jeffrey Dean 和 Sanjay Ghemawat 开发,旨在解决大规模数据处理...

    云计算负载均衡

    云计算负载均衡是一种重要的技术,它在分布式计算环境中扮演着关键角色,特别是在大数据处理和分析的背景下,如Hadoop。负载均衡的主要目标是有效地分配工作负载,确保系统的稳定性和高可用性,同时最大化资源利用率...

    MapReduce综合应用案例 - 招聘数据清洗-结果

    MapReduce综合应用案例 - 招聘数据清洗-结果

    MapReduce实现倒排索引-可运行的jar包

    运行说明:在linux终端输入 $ hadoop jar test-1.0-SNAPSHOT.jar WordCount /input/* /MyOutput1/ 后两个参数是hdfs上面【输入】的文本文件目录和【输出】目录。 记得清空输出目录。

    【MapReduce篇07】MapReduce之数据清洗ETL1

    MapReduce之数据清洗ETL详解 MapReduce是一种基于Hadoop的分布式计算框架,广泛应用于大数据处理领域。数据清洗(Data Cleaning)是数据处理过程中非常重要的一步,旨在清洁和转换原始数据,使其更加可靠和有用。...

    大数据技术原理及应用课实验5 :MapReduce初级编程实践

    **大数据技术原理及应用——MapReduce初级编程实践** MapReduce是一种分布式计算模型,由Google提出,主要用于处理和生成大规模数据集。在这个实验中,我们将学习如何利用MapReduce编程解决实际问题,包括数据去重...

    mapreduce综合应用案例 - 招聘数据清洗

    mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce综合应用案例 — 招聘数据清洗 mapreduce...

    MapReduce海量数据处理

    它极大地简化了在大规模集群上执行数据密集型任务的过程,隐藏了复杂的并行处理、容错、数据分发、负载均衡等底层细节。 1. **MapReduce原理** - **绪论**:MapReduce的核心思想是将大规模数据的处理分解为两个...

    MapReduce设计模式

    它的设计模式是MapReduce编程中实现高效数据处理的核心方法和策略。我们将深入探讨这些模式,并理解它们在大数据处理中的应用。 首先,MapReduce设计模式的书籍由Donald Miner和Adam Shook所著,该书详细介绍了...

    大数据练手项目——Youtube数据源

    评论数据则可以帮助我们理解用户对视频的反馈,识别热门话题、情感分析以及用户之间的互动模式。 在实际操作中,我们首先需要将YouTube数据从原始格式转换为Hadoop友好的格式,如CSV或JSON,然后使用Hadoop的工具...

Global site tag (gtag.js) - Google Analytics