我在具有3个节点(1个主节点和2个从节点)的Hadoop集群上按顺序运行三个MapReduce作业(一个输出是另一个输入)。
显然,单个节点群集上单个作业完成所花费的总时间比上述要少得多。 可能的原因是什么?是网络延迟吗?它运行在100Mbps以太网网络上。如果我增加节点数会有帮助吗?
我正在使用Hadoop Streaming,我的代码在python2.7中。
答案 0 :(得分:0)
MapReduce并不是真正意义上处理那么小的输入数据集。 MapReduce框架必须确定哪些节点将运行任务,然后启动JVM以运行每个单独的Map和Reduce任务(任务数量取决于数据集的大小)。这通常具有大约几十秒的延迟。在节点之间传送非本地数据也很昂贵,因为它涉及通过线路发送数据。对于这样一个小型数据集,在分布式集群中设置MapReduce作业的开销可能高于作业本身的运行时间。在单个节点上,您只能看到在本地计算机上启动任务的开销,而不必通过网络进行任何数据复制,这就是为什么作业在单台计算机上完成得更快的原因。如果您有多GB文件,您会在多台计算机上看到更好的性能。