GridGain / Scala - Создание рабочих мест в рамках существующей работы - PullRequest
1 голос
/ 09 марта 2011

В качестве доказательства концепции я создаю этот чрезвычайно простой сканер Twitter Friends. Вот что он будет делать:

  1. Выполнить CrawlJob для учетной записи Twitter «twitter-user-1»
  2. Найти всех друзей из "twitter-user-1"
  3. Выполнить CrawlJob для всех друзей "twitter-user-1"

Вот как выглядит мой код:

def main( args:Array[String] ) {

  scalar {
    grid.execute(classOf[CrawlTask], "twitter-user-1").get
  }

}

class CrawlTask extends GridTaskNoReduceSplitAdapter[String] {

    def split( gridSize:Int, arg:String): Collection[GridJob] = {
        val jobs:Collection[GridJob] = new ArrayList[GridJob]()
        val initialCrawlJob = new CrawlJob()
        initialCrawlJob.twitterId = arg
        jobs.add(initialCrawlJob)
        jobs
    }

}

class CrawlJob extends GridJob {

  var twitterId:String = new String()

  def cancel() = {
    println("cancel - " + twitterId)
  }

  def execute():Object = {
    println("fetch friends for - " + twitterId)
    // Fetch and execute CrawlJobs for all friends
    return null
  }

}

У меня есть службы Java, подготовленные для всего взаимодействия с твиттером. Нужно несколько примеров, чтобы понять, как создавать новые рабочие места в существующей работе и связать ее с исходной задачей.

Спасибо | Srirangan

1 Ответ

0 голосов
/ 10 марта 2011

Как я справился с этим?

Концептуально объедините GridTasks и GridJobs.MySpecialGridTask может иметь только один MySpecialGridJob.

Тогда можно легко выполнить новые GridTasks в Задании или Задании.

В приведенном выше примере:

class CrawlJob extends GridJob {

  var twitterId:String = new String()

  def cancel() = {
    println("cancel - " + twitterId)
  }

  def execute():Object = {
    println("fetch friends for - " + twitterId)
    // Fetch and execute CrawlJobs for all friends
    // Execute Job Here
    grid.execute(classOf[CrawlTask], "twitter-user-2").get
    grid.execute(classOf[CrawlTask], "twitter-user-3").get
    return null
  }

}
...