我们将购买一些新硬件用于 Hadoop 集群,但我们不知道应该购买什么。假设我们的预算是 5000 美元,我们应该购买两台超级好用的机器,每台 2500 美元,还是购买四台,每台 1200 美元左右,或者购买八台,每台 600 美元左右?Hadoop 是需要较慢的机器才能更好地运行,还是需要较少的较快的机器才能更好地运行?或者,就像大多数事情一样,“视情况而定”?:-)
答案1
如果可以的话,我会考虑使用云基础设施服务,例如亚马逊网络服务(AWS) 弹性计算云(EC2),至少在您确定投资自己的硬件是合理的之前。很容易陷入购买闪亮装备的泥潭(我每天都要抵制这种欲望)。通过在云中购买之前进行尝试,您可以学到很多东西,并回答以下问题:我公司的软件 X 或针对此数据集的 map/reduce 框架是否最适合小型、中型或大型服务器集。我在 AWS 上运行了许多组合,在几天内以极低的价格进行了扩展、缩小、进出。我们对测试非常满意,因此决定继续使用 AWS,而不再购买必须冷却、供电、维护等的大型机器集群。实例类型包括:
标准实例
- 小型实例(默认)1.7 GB 内存、1 个 EC2 计算单元(1 个虚拟核心和 1 个 EC2 计算单元)、160 GB 实例存储、32 位平台
- 大型实例 7.5 GB 内存、4 个 EC2 计算单元(2 个虚拟核心,每个核心有 2 个 EC2 计算单元)、850 GB 实例存储、64 位平台
- 超大型实例 15 GB 内存、8 个 EC2 计算单元(4 个虚拟核心,每个核心有 2 个 EC2 计算单元)、1690 GB 实例存储、64 位平台
高 CPU 实例
高 CPU 中型实例 1.7 GB 内存、5 个 EC2 计算单元(2 个虚拟核心,每个核心有 2.5 个 EC2 计算单元)、350 GB 实例存储、32 位平台
高 CPU 超大型实例 7 GB 内存、20 个 EC2 计算单元(8 个虚拟核心,每个核心有 2.5 个 EC2 计算单元)、1690 GB 实例存储、64 位平台
EC2 计算单元 (ECU) – 一个 EC2 计算单元 (ECU) 提供相当于 1.0-1.2 GHz 2007 Opteron 或 2007 Xeon 处理器的 CPU 容量。
标准按需实例 Linux/UNIX 使用情况 Windows 使用情况
小型(默认) 每小时 0.10 美元 每小时 0.125 美元
大型 每小时 0.40 美元 每小时 0.50 美元
超大型 每小时 0.80 美元 每小时 1.00 美元
高 CPU 按需实例 Linux/UNIX 使用率 Windows 使用率
中型 每小时 0.20 美元 每小时 0.30 美元
超大型 每小时 0.80 美元 每小时 1.20 美元
很抱歉,我的回答听起来像是供应商的推销,但如果您的环境允许您走这条路,我想您会很高兴,并且在您将来购买自己的硬件时会做出更好的购买决定。
答案2
我认为您不应该考虑服务器的数量,而应该考虑 CPU 核心数和内存量。据我所知,Hadoop 非常依赖内存。核心越多,您可以同时运行的作业进程就越多。
我认为这取决于你的工作量。你的作业划分得如何?较少的较大块可能有利于少数快速服务器,而较多的较小作业可能有利于较慢的机器。
答案3
这完全取决于你的工作量。你的任务是高度并行的吗?还是它有一个很大的串行组件?如果它的扩展性很好,你应该尝试用你的钱获得尽可能多的核心。如果它的扩展性不好,那么你应该找到扩展性崩溃的点。然后尝试购买与该数量的核心相匹配的最强大的 CPU。
这只是一个一般的指导方针,但我认为 Hadoop 并没有什么特别之处,除了其他并行化框架之外,没有任何特殊要求。
答案4
还要记住,非常小的 Hadoop 集群无法很好地工作,尤其是在发生故障的情况下。问题在于,许多启发式方法都是基于集群将有 20 台以上的机器这一假设进行调整的。其中一些启发式方法在非常小的集群上会失败。
一个很好的例子(即使在最新版本中可能仍未修复)是当您写入块时发生的情况。假设复制数 = 3,则随机选择三个节点来托管副本。如果其中一个节点在写入期间发生故障,则将向 namenode 查询另一个随机的三个节点。在大型集群中,新的三个节点包含故障节点的可能性可以忽略不计,但在非常小的集群(例如 6 个节点)中,故障节点很有可能出现在新列表中。写入将再次失败,甚至可能再次失败。这足以使工作陷入困境。修复是显而易见的,但对于大多数提交者来说,可能性太低,无法快速集成。
Hadoop 目前还没有一个能够解决全方位可扩展性(向上和向下)的企业级发行版。也许很快就会有,但目前还不是。
在明确需求之前,建议使用 EC2/EMR,这是一个很好的建议。它不仅能让你更好地了解你的约束和需求,还能让你拥有比你正在购买的集群大得多的集群。