我正在遵循hadoop网站上的教程:https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-common/SingleCluster.html。我在伪分布式模式下运行以下示例。
time hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar grep input output 'dfs[a-z.]+'
它需要1:47分钟才能完成。当我关闭网络(wifi)时,它在大约50秒内完成。
当我使用本地(独立)模式运行相同的命令时,它在大约5秒内完成(在mac上)。
我知道在伪分布式模式下有更多的开销,因此它将花费更多的时间,但在这种情况下,它需要更多的时间。CPU在运行期间完全空闲。
你知道是什么原因导致这个问题吗?
发布于 2019-03-08 02:05:17
首先,我没有解释为什么关闭你的网络会导致更快的时间。您必须深入研究Hadoop日志才能找出问题所在。
这是大多数人在单个节点上运行Hadoop时遇到的典型行为。实际上,你是在尝试使用联邦快递向你的隔壁邻居递送东西。遍历它总是更快,因为操作分布式系统的固有开销。当您运行本地模式时,您仅执行Map-Reduce功能。当您运行伪分布式时,它将使用所有Hadoop服务器(用于数据的NameNode、DataNodes;用于计算的资源管理器、NodeManagers ),您所看到的是其中涉及的延迟。
当您提交作业时,资源管理器必须安排作业。由于您的集群不忙,它将向Node Manager请求资源。Node Manager将为其提供一个容器,该容器将运行您的应用程序主机。通常,此循环大约需要10秒。一旦您的AM开始运行,它就会向资源管理器请求资源来执行它的Map和Reduce任务。这还需要10秒。此外,当您提交作业时,在此作业实际提交到资源管理器之前有大约3秒的等待时间。到目前为止,这已经是23秒了,你还没有做任何计算。
一旦作业开始运行,最有可能的等待原因是内存分配。在较小的系统(> 32 to内存)上,操作系统可能需要一段时间才能分配空间。如果你在Hadoop的商用硬件(16+核心,64+ GB)上运行同样的东西,你可能会看到运行时间接近25-30秒。
https://stackoverflow.com/questions/54953620
复制相似问题