使用 Hadoop,我可以在未运行数据节点的计算机上创建任务跟踪器吗?

2024-02-22

所以这是我的情况:

我有一个使用 HBase 的 MapReduce 作业。我的映射器接受一行文本输入并更新 HBase。我没有减速器,并且我没有将任何输出写入光盘。我希望能够在预期利用率激增时向集群添加更多处理能力,然后在利用率下降时缩减处理能力。我们暂时假设我无法使用亚马逊或任何其他云提供商;我正在私人集群中运行。

一种解决方案是当我需要更多容量时向集群添加新机器。但是,我希望能够添加和删除这些机器,而无需任何等待或麻烦。我不想每次需要添加或删除节点时都重新平衡 HDFS。

因此,似乎一个好的策略是拥有一个“核心”集群,其中每台机器都运行一个任务跟踪器和一个数据节点,当我需要增加容量时,我可以启动一些运行任务跟踪器的“一次性”机器,但不是数据节点。这可能吗?如果是这样,会有什么影响?

我意识到在没有数据节点的机器上运行的任务跟踪器将无法获得数据局部性的好处。但在实践中,这意味着什么?我想象,当在其中一台“一次性”机器上安排作业时,作业跟踪器将通过网络向任务跟踪器发送一行输入,然后任务跟踪器获取该输入行并将其直接提供给映射器,而无需将任何内容写入光盘。是这样的情况吗?

哦,我正在使用 Cloudera cdh3u3。不知道这是否重要。


我想象,当在其中一台“一次性”机器上安排作业时,作业跟踪器将通过网络向任务跟踪器发送一行输入,然后任务跟踪器获取该输入行并将其直接提供给映射器,而无需将任何内容写入光盘。是这样的情况吗?

不完全是这样,作业跟踪器要求任务跟踪器运行映射任务来处理输入拆分。 JobTracker不会将数据传递给任务跟踪器,更多的是传递序列化的分割信息(文件名、起始偏移量和长度)。 TaskTracker运行MapTask,正是MapTask实例化了用于分割信息的InputFormat和关联的RecordReader——将输入Key/Value传递给Mapper。

如果您没有本地数据节点,或者您确实有本地数据节点,但数据未在本地数据节点上复制,则数据将从另一个数据节点(希望是机架)通过网络读取本地的,但仍然可能来自其他地方)。

您可以在 Hadoop 计数器输出中查看数据块位于任务本地或机架本地的频率的统计信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Hadoop,我可以在未运行数据节点的计算机上创建任务跟踪器吗? 的相关文章

随机推荐