0

假设我有 15 个数据块和两个集群。第一个集群有 5 个节点,复制因子为 1,而第二个集群的复制因子为 3。如果我运行我的映射作业,我应该期望映射作业的性能或执行时间有任何变化吗?

换句话说,复制如何影响集群上映射器的性能?

4

2 回答 2

1

编辑:我的这部分答案现在已经过时了,因为另一个答案已被编辑:“另一个答案并不完全正确。” 这是为了解决更少的副本=更少的并行性的错误暗示。我的其余答案(如下)仍然适用。

任何节点都可以执行您的任务,无论数据是否位于该节点中。Hadoop 将尝试实现数据局部性(优先顺序是:节点本地,然后机架本地,然后是任何节点),但如果不能,那么它将选择任何具有可用计算能力的节点来运行您的任务。

性能方面,在典型的多机架安装中,rack-local 的性能几乎与 node-local 一样好,因为在跨机架传输数据时会出现瓶颈。但是,对于高端网络设备(即全二等分带宽),您的计算是否是机架本地的并不重要。有关这方面的更多详细信息,请阅读本文

拥有更多副本(从而实现更高的数据局部性)可以带来多大的性能提升?不多; 最大提升 5-20%。但这是一个上限,当您在这个这个项目中实施额外的基于流行度的复制时。注意:我不只是弥补那些性能改进数字;它们来自我链接的文件。

由于 vanilla Hadoop 没有这些机制,我希望您的性能最多提高 1-5%。这只是一个大概的猜测,但您可以轻松地自己运行一些测试。这样做的原因是,更多的副本可以提高您的某些地图任务的性能(现在能够使用块的数据本地副本运行的那些),但它不会改善您的 shuffle 和 reduce 阶段。此外,即使只有一个映射器比其他映射器花费更长的时间,这个映射器也会决定整个映射阶段的长度;所以对于许多工作来说,增加局部性很可能根本不会改善它们的运行时间。最后,I/O 绑定作业可以是 map-input IO bound、shuffle IO bound(map output heavy)或 reduce output IO bound。只有第一种类型(映射输入 IO 绑定)会受益于局部性。本文中有关 MapReduce 工作负载特征的更多详细信息。

如果您对此进一步感兴趣,您还可以阅读这篇论文,其中它们改善了映射器的运行时间,但将所有映射器的输入数据都保存在内存中。

于 2013-10-15T14:22:47.447 回答
1

当 JobTracker 将作业分配给 HDFS 上的 TaskTracker 时,会根据数据的位置将作业分配给特定的节点(优先选择相同的节点,然后是相同的网络交换机/帧)。通过具有不同的复制因子,您限制了 JobTracker 为数据分配本地节点的能力(JobTracker 仍将分配任务节点,但没有本地性的好处)。其效果是限制数据本地的 TaskTracker 节点的数量(任务节点上的数据或同一切换帧上的数据),从而影响任务工作的性能(减少并行化)。

您的较小集群可能只有一个交换机,因此数据是网络/框架的本地数据,因此您可能遇到的唯一瓶颈是将数据从一个 TaskTracker 传输到另一个,因为 JobTracker 可能会将作业分配给所有可用的 TaskTracker。

但是对于更大的 hadoop 集群,复制因子 = 1 将限制数据本地的 TaskTracker 节点的数量,从而能够有效地对您的数据进行操作。

有几篇支持数据局部性的论文, http : //web.eecs.umich.edu/~michjc/papers/tandon_hpdic_minimizeRemoteAccess.pdf,你引用的这篇论文也支持数据局部性,http://assured-cloud-computing。 illinois.edu/sites/default/files/PID1974767.pdf和这个http://www.eng.auburn.edu/~xqin/pubs/hcw10.pdf(它测试了一个 5 节点集群,与 OP 相同)。

本文引用了数据局部性的显着好处,http://grids.ucs.indiana.edu/ptliupages/publications/InvestigationDataLocalityInMapReduce_CCGrid12_Submitted.pdf,并观察到复制因子的增加提供了更好的局部性。

请注意,本文声称网络吞吐量和本地磁盘访问之间几乎没有差异 (8%),http://www.cs.berkeley.edu/~ganesha/disk-irrelevant_hotos2011.pdf,但报告本地之间的性能差异数量级内存访问和磁盘或网络访问。此外,该论文引用了很大一部分作业(64%)发现他们的数据缓存在内存中“在很大程度上是由于工作负载的重尾性”,因为大多数作业“仅访问一小部分块”

于 2013-10-15T02:43:14.030 回答