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");
}