无论是从不同的客户端服务器提交一堆hadoop作业还是从同一个客户端服务器提交一堆hadoop作业,它对资源是否有任何可衡量的影响?我想不会因为所有工作都是在集群中完成的。这是对的吗?
答案 0 :(得分:6)
提交到Hadoop集群的客户端上唯一需要资源的是计算输入拆分。当输入数据很大或者从同一客户端提交的作业太多时,由于输入拆分计算,作业提交可能会变得有点慢。
我无法回想起Hadoop版本或参数,但是包含了一个可配置参数,用于将输入拆分的计算从提交作业的客户端移动到Hadoop集群。
答案 1 :(得分:3)
从哪里提交你的工作真的不重要。客户端本身并没有做太多工作,它使用RPC协议来联系服务,然后只是闲置直到工作完成。
此外,最重要的是您使用什么样的调度程序来分配资源,这可能会产生最显着的差异,并决定分配给哪个作业的资源。有关作业安排的更多信息here。
答案 2 :(得分:1)
我认为您不能将输入拆分计算移动到“经典”版本的Job Tracker中。在YARN中,您可以使用
移动它“yarn.app.mapreduce.am.compute-拆分式群集”
我猜,Hadoop人不希望使用输入拆分创建来重载Job跟踪器。类似于在HDFS中没有为Namenode分配太多工作的设计决定。
在YARN中,每个工作都有自己的应用程序主服务器,因此不必担心像工作跟踪器那样超载SPOF /瓶颈主服务器。
在参考原始问题时,客户端作业必须联系到namenode以获取块位置(我已经看到块存储类的部分代码调用数据节点的某些元数据...不确定是否这些发生在输入拆分创建期间或任务跟踪器节点中)。如果您在同一客户机节点上处理大量作业,这可能会成为一个问题。 如果您使用YARN,如果所有这些通信都发生在群集内,则会略微提高性能。
需要检查Oozie如何处理此问题。
希望这有帮助! 阿伦