Hadoop如何为MapReduce作业分发数据/任务?

Hadoop如何为MapReduce作业分发数据/任务?,hadoop,hdfs,Hadoop,Hdfs,我已经设置了一个具有4个节点的Hadoop集群,其中一个节点用作HDFS的NameNode以及纱线主节点。这个节点也是最强大的 现在,我已经分发了两个文本文件,一个在node01(namenode)上,一个在node03(datanode)上。运行基本WordCount MapReduce作业时,我可以在日志中看到只有node01在进行任何计算 我的问题是为什么Hadoop没有决定在node03上使用MapReduce并传输结果,而不是将整本书传输到node01。我还检查了,复制被禁用,该书仅在

我已经设置了一个具有4个节点的Hadoop集群,其中一个节点用作HDFS的NameNode以及纱线主节点。这个节点也是最强大的

现在,我已经分发了两个文本文件,一个在node01(namenode)上,一个在node03(datanode)上。运行基本WordCount MapReduce作业时,我可以在日志中看到只有node01在进行任何计算

我的问题是为什么Hadoop没有决定在node03上使用MapReduce并传输结果,而不是将整本书传输到node01。我还检查了,复制被禁用,该书仅在node03上可用

那么,Hadoop是如何在传输数据和设置作业之间做出决定的?在这个决定中,它是否检查了哪台机器的计算能力更强(例如,它是否决定传输到node01,因为node01是一台4核4gig ram机器,而node03上是2核1G)

我找不到关于这个话题的任何东西,所以如果有任何指导,我将不胜感激

谢谢大家!


还有一些澄清: node01正在运行NameNode、DataNode、ResourceManager以及NodeManager。因此,它既是“主节点”又是“计算节点”

通过运行以下命令,我确保将一个文件放在node01上,将一个文件放在node03上:
hdfs-dfs-在node01上放置sample1.txt样本
,在node03上放置sample02.txt样本。由于复制被禁用,这导致数据(在节点01和节点03上本地可用)仅存储在那里

我使用HDFS Webinterface验证了这一点。对于sample1.txt,它说这些块只在node01上可用;对于sample2.txt,它说这些块只在node03上可用

关于@cricket_007: 我担心的是sample2.txt仅在node03上可用。Thread Webinterface告诉我,对于应用程序尝试,节点01上只分配了一个容器。如果映射文件sample2.txt的任务,那么node03上也会有一个容器

因此,node01需要从node03获取sample2.txt文件


是的,我知道Hadoop在1gig的RAM上运行得不好,但我正在使用Raspberry Pi集群,只是为了摆弄和学习一些东西。这不适用于生产使用。

纱线应用程序主控程序随机选择一个节点,根据存储文件的名称节点中的可用信息运行计算。DataNodes和NodeManager应在相同的计算机上运行

如果文件不大于HDFS块大小,则没有理由从其他节点获取数据


注意:Hadoop服务仅在1G内存上运行不太好,您需要为不同大小的节点调整不同的纱线设置

对于任何想知道:

至少对我来说,HistoryServer UI(需要手动启动)正确显示node03和node01正在运行映射作业。因此,我的说法是不正确的。我仍然想知道为什么应用程序尝试UI提到一个容器,但我想这并不重要


谢谢你们

你说“我已经分发了2个文本文件”是什么意思?你是怎么把它们送到那些节点的?您能指定您实际执行的命令吗?另外,当MapReduce作业运行时,您在日志中看到了什么,实际上认为只有node01在做一些工作?Namenode不存储HDFS数据文件,那么您是如何在那里获得该文件的?@cricket_007我已经在编辑中回复了您的评论,谢谢!