Масштабируемость кластера Apache hama

Я программирую для Apache Hama, используя API графа 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");

        }

0 ответов

Другие вопросы по тегам