概念:
reduce-side join技术是灵活的,但是有时候它仍然会变得效率极低。由于join直到reduce()阶段才会开始,我们将会在网络中传递shuffle所有数据,而在大多数情况下,我们会在join阶段丢掉大多数传递的数据。因此我们期望能够在map阶段完成整个join操作。
主要技术难点:
在map阶段完成join的主要困难就是mapper可能需要与一个它自己不能获得的数据进行join操作,如果我们能够保证这样子的数据可被mapper获得,那我们这个技术就可用。举个例子,如果我们知道两个源数据被分为同样大小的partition,而且每个partition都以适合作为join key的key值排序的话,那每个mapper()就可以获取所有join操作需要的数据。事实上,Hadoop的org.apache.hadoop.mared.join包中包含了这样的帮助类来实现mapside
join,但不幸的是,这样的情况太少了。而且使用这样的类会造成额外的开销。因此,我们不会继续讨论这个包。
什么情况下使用?
情况1:如果我们知道两个源数据被分为同样大小的partition,而且每个partition都以适合作为join key的key值排序
情况2:当join大型数据时,通常只有一个源数据十分巨大,另一个数据可能就会呈数量级的减小。例如,一个电话公司的用户数据可能只有千万条用户数据,但他的交易记录数据可能会有十亿条数量级以上的具体电话记录。当小的数据源可以被分配到mapper的内存中时,我们可以获得效果明显的性能提高,只要通过将小的数据源拷贝到每一台mapper机器上,使mapper在map阶段就进行join操作。这个操作就叫做replicate
join。
解决方案:
Hadoop有一个叫做分布式缓存(distributed cache)的机制来将数据分发到集群上的所有节点上。它通常用来分发所有mapper需要的包含“background”数据的文件。例如你使用Hadoop来分类文档,你可能会有一个关键字的列表,你将使用distributed cache来保证所有mapper能够获得这些keywords("background data")。
操作步骤:
1.将数据分发到每个节点上:
- DistributedCache.addCacheFile(newPath(args[0]).toUri(),conf);
2.在每个mapper上使用DistributedCache.getLocalCacheFiles()来获取文件,之后再进行相应的操作:
- DistributedCache.getLocalCacheFiles();
新出现的问题:
我们的又一个限制是我们其中一个join的表必须足够小以至于能保存到内存中。尽管在不对称大小的输入数据中,较小的那个数据可能仍然不够小(不够小到可以放入内存中。)
1.我们可以通过重新安排数据加工步骤来使它们有效。例如:如果你需要一个所有用户在415区的排序数据时,在滤除一定记录前就将Orders以及Customers表连接起来虽然正确,但是效率却不高。Customers和Orders表都可能大到不能放入内存中。此时我们可以预处理数据使Customers或者Orders表变小。
2.有时候我们不论怎样预处理数据都不能使数据足够小,那我们应该在map时过滤掉不属于415 area的用户。详见《Hadoop in Action》 Chapter5.2.3 semijoin
转载:http://blog.csdn.net/jokes000/article/details/7084351
分享到:
相关推荐
# 基于Hadoop MapReduce的分布式数据处理系统 ## 项目简介 本项目是一个基于Hadoop MapReduce框架的分布式数据处理系统,旨在处理大规模数据集并实现高效的数据分析和处理。项目涵盖了从数据输入、处理、输出到...
在这个案例中,我们将深入探讨如何在 Hadoop 环境中使用 MapReduce 实现 WordCount。 【描述】在 Hadoop 环境中,WordCount 的实现主要涉及两个关键阶段:Map 阶段和 Reduce 阶段。Map 阶段将原始输入数据(通常是...
这份源码提供了深入理解Hadoop如何管理和利用分布式缓存的机会,对于想要优化Hadoop集群或者进行二次开发的人来说极具价值。 分布式缓存的工作原理: 1. **缓存机制**:当用户在提交MapReduce作业时,可以指定一组...
MapReduce是一种分布式计算模型,由Google提出,Hadoop对其进行了实现。在MapReduce中,数据处理分为两个主要阶段:Map阶段和Reduce阶段。Map阶段将原始数据分解成小块,然后对每个小块进行并行处理;Reduce阶段则...
通过使用Redis作为分布式缓存,可以提高Hadoop任务对共享数据的访问速度。实验结果表明,Redis分布式缓存的吞吐率与集群规模有较好的线性关系,所提出的方法能够较好地解决Hadoop任务对共享数据的访问问题。 下面是...
《Hadoop MapReduce实战手册》是一本专注于大数据处理技术的专著,主要针对Apache Hadoop中的MapReduce框架进行了深入的探讨。MapReduce是Hadoop生态系统中的核心组件之一,用于处理和生成大规模数据集。该书旨在...
《Hadoop MapReduce Cookbook 源码》是一本专注于实战的书籍,旨在帮助读者通过具体的例子深入理解并掌握Hadoop MapReduce技术。MapReduce是大数据处理领域中的核心组件,尤其在处理大规模分布式数据集时,它的重要...
本文将深入探讨如何使用Python来编写Hadoop MapReduce程序,以实现微博关注者之间的相似用户分析。这个任务的关键在于理解并应用分布式计算原理,以及熟悉Python编程语言在大数据环境下的应用。 首先,Hadoop ...
首先,Hadoop是一个开源的分布式存储与计算框架,它使用MapReduce作为其核心编程模型。MapReduce的设计思想是将一个复杂的问题分解为多个小问题,然后并行地解决这些小问题。Hadoop和MapReduce的结合,为处理大规模...
而Hadoop MapReduce则是一个分布式计算框架,能够处理和存储海量数据。现在我们详细探讨这两个概念以及它们如何协同工作。 首先,让我们理解Apriori算法的基本原理。Apriori算法由Raghu Ramakrishnan和Gehrke在1994...
在大数据处理领域,Hadoop MapReduce 是一种广泛使用的计算框架,尤其在处理大规模数据集时。决策树(Decision Tree)是一种流行的机器学习算法,常用于分类和回归问题。本项目结合了两者,实现了一个名为 MR_...
Hadoop MapReduce v2 Cookbook (第二版), Packt Publishing
根据提供的文件信息,以下是有关Hadoop入门进阶课程中Hive介绍和安装部署的知识点: ...通过掌握Hive的安装和使用,数据仓库开发者可以充分利用Hadoop的分布式存储和计算能力,实现复杂的数据分析任务。
本文提出了基于Hadoop云计算平台的分布式转码方案,通过整合Hadoop的两个核心组件:HDFS(Hadoop Distributed File System,分布式文件系统)和MapReduce编程模型,实现视频数据的分布式转码。 Hadoop作为一个开源...
在大数据处理领域,Hadoop MapReduce 是一个至关重要的框架,它允许开发者编写分布式应用程序来处理海量数据。"Hadoop MapReduce HelloWorld 能调试" 的主题意味着我们将深入理解如何设置、运行以及调试 MapReduce ...
在大数据处理领域,Hadoop MapReduce 是一种广泛使用的分布式计算框架,它允许高效地处理海量数据。KMeans 是一种常见的无监督机器学习算法,用于聚类分析,将数据集中的对象按照相似性分组成不同的簇。现在我们来...
本书《Hadoop MapReduce v2 Cookbook》会详细介绍如何使用Hadoop MapReduce v2进行大数据处理,包括编写MapReduce程序、调试、性能优化等方面的知识。读者将学习到如何利用Java API实现自定义Mapper和Reducer,以及...
Hadoop是一个分布式系统基础架构,由Apache基金会开发,它实现了MapReduce编程模型,用于大规模数据集的存储与计算。MapReduce是一种编程模型,用于处理和生成大数据集,它将任务分成两个阶段:Map阶段和Reduce阶段...
Hadoop MapReduce是一种编程模型,用于在大型数据集上进行分布式数据处理。它最初由Google提出,并在Apache Hadoop项目中实现了这一模型。MapReduce模型通过将数据处理任务分解为两个阶段——Map(映射)和Reduce...