我正在运行Giraph ,它在我们的五个主机(四个计算节点和一个头节点 - 称它们为 0-3 和“w”)的小型CDH4 Hadoop 集群上执行 - 请参见下面的版本。所有五台主机都在运行 mapreduce tasktracker 服务,并且“w”也在运行 jobtracker。对于我的特定 Giraph 应用程序(一种寻路)来说,资源很紧张,而且我发现任务的自动调度主机的某些配置比其他配置更好。
更具体地说,我的 Giraph 命令(见下文)指定了四个 Giraph 工作人员,并且在执行时,Hadoop(实际上是Zookeeper,IIUC)创建了五个我可以在 jobtracker Web UI 中看到的任务:一个主服务器和四个从服务器。当它将三个或更多映射任务放在“w”上(例如,01www 或 1wwww)时,该主机会最大化 ram、cpu 和 swap,并且作业会挂起。但是,当系统更均匀地分配工作以使“w”只有两个或更少的任务(例如,123ww 或 0321w)时,工作就可以正常完成。
我的问题是,1)什么程序决定了任务到主机的分配,以及 2)我如何控制它?
非常感谢!
版本
- CDH:4.7.3
- Giraph:编译为“giraph-1.0.0-for-hadoop-2.0.0-alpha”(变更日志开始于:版本 1.0.0 - 2013-04-15)
- Zookeeper 客户端环境:zookeeper.version=3.4.5-cdh4.4.0--1,构建于 09/04/2013 01:46 GMT
Giraph 命令
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