我正在运行Giraph,它在我们的五个主机(四个计算节点和一个头节点)的小CDH4 Hadoop集群上执行 - 称它们为0-3和' w& #39;) - 请参阅以下版本。所有五个主机都运行mapreduce tasktracker服务,并且' w'也在运行jobtracker。我的特定Giraph应用程序(一种路径查找)的资源很紧张,我发现自动调度的主机配置的某些配置比其他配置更好。
更具体地说,我的Giraph命令(见下文)指定了四个Giraph工作者,在执行时,Hadoop(Zookeeper实际上,IIUC)创建了五个任务,我可以在jobtracker Web UI中看到:一个主人和四个奴隶。当它将三个或更多的地图任务放在' w' (例如,01www或1wwww),然后该主机最大化ram,cpu和swap,并且作业挂起。但是,当系统将工作分散得更均匀时,以便' w'只有两个或更少的任务(例如,123ww或0321w),然后工作完成。
我的问题是,1)什么程序决定任务到主机的分配,2)我该如何控制?
非常感谢!
hadoop jar $GIRAPH_HOME/giraph-ex.jar org.apache.giraph.GiraphRunner \
-Dgiraph.zkList=wright.cs.umass.edu:2181 \
-libjars ${LIBJARS} \
relpath.RelPathVertex \
-wc relpath.RelPathWorkerContext \
-mc relpath.RelPathMasterCompute \
-vif relpath.JsonAdjacencyListVertexInputFormat \
-vip $REL_PATH_INPUT \
-of relpath.JsonAdjacencyListTextOutputFormat \
-op $REL_PATH_OUTPUT \
-ca RelPathVertex.path=$REL_PATH_PATH \
-w 4