gpt4 book ai didi

java - 使用 Hadoop,我可以在没有运行数据节点的机器上创建任务跟踪器吗?

转载 作者:可可西里 更新时间:2023-11-01 14:55:10 26 4
gpt4 key购买 nike

这是我的情况:

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

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

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

我意识到在没有数据节点的机器上运行的 tasktracker 将无法享受数据局部性的好处。但实际上,这意味着什么?我在想象,当在其中一台“一次性”机器上安排工作时,jobtracker 将通过网络向 tasktracker 发送一行输入,然后 tasktracker 接受该行输入并将其直接提供给 Mapper,而无需向光盘写入任何内容。这是怎么回事?

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

最佳答案

I'm imagining that, when scheduling a job on one of the "disposable" machines, the jobtracker will send a line of input over the network to the tasktracker, which then takes that line of input and feeds it directly to a Mapper, without writing anything to the disc. Is this what happens?

不完全是,作业跟踪器分配一个任务跟踪器来运行映射任务来处理输入拆分。 JobTracker不向task tracker传递数据,更多的是传递序列化的分割信息(文件名、起始偏移量和长度)。 TaskTracker 运行 MapTask,MapTask 为分割信息实例化 InputFormat 和关联的 RecordReader——将输入键/值传递给 Mapper。

如果你没有本地数据节点,或者你有一个本地数据节点,但数据没有复制到本地数据节点上,数据将从另一个数据节点跨网络读取(希望是本地机架,但仍可能来自其他地方)。

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

关于java - 使用 Hadoop,我可以在没有运行数据节点的机器上创建任务跟踪器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10343397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com