提取hadoop作业的属性

时间:2013-12-10 18:53:46

标签: hadoop

给定一个包含mapper,reducer类的大型数据文件和jar文件,我希望能够知道,应该形成多大的Hadoop集群(我的意思是我需要多少台机器来构建一个集群才能使给定的作业高效运行。) 我在给定的数据文件上运行作业。

1 个答案:

答案 0 :(得分:0)

假设您的MapReduce作业线性扩展,我建议您进行以下测试,以全面了解您需要的内容。当你说“高效运行”时,我假设你有时间......对某人来说这可能是1分钟,对某人来说可能是1小时...这取决于你。

在适合一个节点的数据子集上的一个节点上运行作业...或者更优选的是少量节点。此测试群集应代表您稍后购买的硬件类型。

  [(time job took on your test cluster) x (number of nodes in test cluster)]
x [(size of full data set) / (size of sample data set)]
/ (new time, i.e., "run efficiently")

= (number of nodes in final cluster)

有些注意事项:

  • 如果您将“测试群集上的时间作业”加倍,则需要两倍的节点。
  • 如果你将“新时间”减半,即你希望你的工作运行速度提高一倍,那么你需要两倍的节点。
  • 样本的比例告诉您缩放结果的程度

一个例子:

我的工作在两个节点上需要30分钟。我正在运行4GB的400GB数据集(400/4 GB)。如果我的工作花了12分钟,我想要它。

(30 minutes x 2 nodes) x (400 / 4) GB / 12 = 500 nodes

这在许多方面都是不完美的:

  • 有一个或两个节点,我没有完全考虑通过网络传输内容需要多长时间......这是mapreduce工作的一个主要部分。所以,你可以假设它需要比这个估计更长的时间。如果可以,请测试4-10个节点的作业并从那里进行缩放。
  • Hadoop并没有“缩小”。有一定的速度限制,您将无法与MapReduce交叉。在我见过的大多数集群上大概2-3分钟左右。也就是说,通过拥有一百万个节点,您将不会在3秒内运行MapReduce作业。
  • 您的工作可能无法线性扩展,在这种情况下,此练习存在缺陷。
  • 也许你找不到代表性的硬件。在这种情况下,您必须考虑您认为新系统的速度有多快。

总之,没有超级准确的方式来做你说的话。你现在真正做的最好的是实验和外推。您可以进行测试的节点越多越好,因为外推部分会更准确。

根据我的经验,当从200个节点到800个节点进行测试时,该指标非常准确。从1个节点或2个节点到800个,我感到很紧张。但20个节点到800个节点可能没问题。