我正在使用 Hama 图形 API 为 Apache Hama 编程。在集群中运行我的程序时,我的可伸缩性存在问题。问题是当我增加集群中的机器数量时,我希望执行时间更短,但我得到的是更长的执行时间。
我正在使用由 8500 个顶点组成的图形运行我的程序。当使用 2 台机器的集群时,作业需要 479 秒,当使用 3 台机器时,作业需要 503 秒,当使用 10 台机器时,作业需要 530 秒。有人可以告诉我我错过了什么吗?
hama-site.xml
这是我在文件中的配置详细信息:
<configuration>
<property>
<name>bsp.master.address</name>
<value>master</value>
</property>
<property>
<name>bsp.system.dir</name>
<value>/tmp/hama-hadoop/bsp/system</value>
</property>
<property>
<name>bsp.local.dir</name>
<value>/tmp/hama-hadoop/bsp/local</value>
</property>
<property>
<name>hama.tmp.dir</name>
<value>/tmp/hama-hadoop</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
</property>
<property>
<name>hama.zookeeper.quorum</name>
<value>master,slave1,slave2,slave3</value>
</property>
</configuration>
文件内容groomservers
为:
master
slave1
slave2
slave3
在我工作的主要方法中,我有以下代码:
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration config = new Configuration();
FileSystem hdfs = FileSystem.get(config);
HamaConfiguration conf = new HamaConfiguration();
GraphJob job = new GraphJob(conf, run.class);
job.setJobName("job");
BSPJobClient jobClient = new BSPJobClient(conf);
ClusterStatus cluster = jobClient.getClusterStatus(true);
job.setNumBspTask(cluster.getGroomServers());
...
job.setPartitioner(HashPartitioner.class);
....
if (matcherJob.waitForCompletion(true)) {
System.out.println("Job Finished");
}