为什么hadoop对于简单的hello world工作很慢

时间:2019-03-01 23:19:05

标签: hadoop

我正在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完全处于空闲状态。

您知道什么会导致此问题吗?

1 个答案:

答案 0 :(得分:1)

首先,我没有解释为什么关闭网络会缩短时间的原因。您必须仔细阅读Hadoop日志才能找出问题所在。

这是大多数人在单个节点上运行Hadoop时遇到的典型行为。实际上,您正在尝试使用Fedex将某些东西传递给您的隔壁邻居。由于运行分布式系统的内在开销,将始终更快。在运行本地模式时,您仅执行Map-Reduce功能。当您运行伪分布式时,它将使用所有Hadoop服务器(NameNode,用于数据的DataNode;资源管理器,用于计算的NodeManager),您所看到的是其中涉及的延迟。

提交作业时,资源管理器必须安排作业。由于群集不忙,它将从节点管理器中请求资源。节点管理器将为它提供一个容器,该容器将运行您的Application Master。通常,此循环大约需要10秒钟。 AM运行后,它将从资源管理器要求其Map和Reduce任务的资源。这又需要10秒钟。同样,当您提交作业时,大约需要等待3秒钟,才能将该作业实际提交给资源管理器。到目前为止,这是23秒,您还没有执行任何计算。

作业运行后,最可能的等待原因是分配内存。在较小的系统(> 32GB内存)上,操作系统可能需要一段时间才能分配空间。如果要在Hadoop的商用硬件(16+核心,64 + GB)上运行相同的事情,则运行时间可能会接近25-30秒。