所以这是我的情况:
我有一个使用 HBase 的 mapreduce 作业。我的映射器接受一行文本输入并更新 HBase。我没有减速器,也没有将任何输出写入光盘。我希望能够在预期利用率激增时向集群添加更多处理能力,然后在利用率下降时缩减规模。让我们暂时假设我不能使用 Amazon 或任何其他云提供商;我在私有集群中运行。
一种解决方案是在我需要更多容量时将新机器添加到我的集群中。但是,我希望能够添加和删除这些机器而无需任何等待或麻烦。我不想在每次需要添加或删除节点时重新平衡 HDFS。
因此,一个好的策略似乎是拥有一个“核心”集群,其中每台机器都运行一个任务跟踪器和一个数据节点,当我需要增加容量时,我可以启动一些运行任务跟踪器的“一次性”机器,但不是数据节点。这可能吗?如果是这样,有什么影响?
我意识到在没有数据节点的机器上运行的任务跟踪器不会受益于数据局部性。但在实践中,这意味着什么?我在想象,当在其中一台“一次性”机器上安排作业时,jobtracker 将通过网络向 tasktracker 发送一行输入,然后 tasktracker 接收该输入行并将其直接提供给 Mapper,而无需将任何内容写入光盘。这是怎么回事?
哦,我正在使用 Cloudera cdh3u3。不知道这是否重要。