我设置了一个具有4个节点的Hadoop群集,其中一个充当HDFS的NameNode以及Yarn主节点。该节点也是最强大的。
现在,我分发了2个文本文件,一个在node01(名称节点)上,一个在node03(数据节点)上。当运行基本的WordCount MapReduce作业时,我可以在日志中看到只有node01在进行任何计算。
我的问题是,为什么Hadoop不决定在node03上进行MapReduce并转移结果,而不是将整本书转移到node01。我还检查了复制是否被禁用,这本书仅在node03上可用。
因此,Hadoop如何决定在数据传输和设置作业之间进行选择,并且在此决定中,它是否检查哪台计算机具有更大的计算能力(例如,由于node01是4核4gig ram机器与2core 1核对,所以它决定转移到node01节点上的演出)?
我在这个主题上找不到任何东西,因此任何指导将不胜感激。
谢谢!
更多说明:
node01正在运行NameNode以及DataNode和ResourceManager以及NodeManager。因此,它既充当“主节点”又充当“计算节点”。
我确保通过运行以下命令将一个文件放在node01上,并将一个文件放在node03上:
node01上的hdfs dfs -put sample1.txt samples
和node03上的hdfs dfs -put sample02.txt samples
。由于禁用了复制,这导致数据(仅在node01或node03上本地可用)存储在其中。
我使用HDFS Web界面对此进行了验证。对于sample1.txt,它说这些块仅在node01上可用;对于sample2.txt,它说这些块仅在node03上可用。
关于@ cricket_007:
我担心的是sample2.txt仅在node03上可用。 YARN Web界面告诉我,对于“应用程序尝试”,仅在node01上分配了一个容器。如果文件sample2.txt的映射任务,则node03上也会有一个容器。
因此,node01需要从node03获取sample2.txt文件。
是的,我知道Hadoop无法在1gig的RAM上很好地运行,但是我正在与Raspberry Pi集群一起工作,只是为了摸索和学习一些东西。这不是用于生产用途。
最佳答案
YARN应用程序主节点根据可从存储文件的Namenode获得的信息随机选择一个节点来运行计算。 DataNode和NodeManager应在同一台计算机上运行。
如果文件不大于HDFS块大小,则没有理由从其他节点获取数据。
注意:Hadoop服务不能在仅1G的RAM上很好地运行,并且您需要针对不同大小的节点不同地调整YARN设置。
关于hadoop - Hadoop如何分配MapReduce作业的数据/任务?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59724679/