GridGain / Scala - 在现有作业中生成作业

时间:2011-03-09 12:22:50

标签: scala mapreduce gridgain

作为概念证明,我正在构建这个非常简单的Twitter Friends抓取工具。以下是它的作用:

  1. 为Twitter帐户执行CrawlJob“twitter-user-1”
  2. 找到所有“twitter-user-1”
  3. 的朋友
  4. 为“twitter-user-1”的所有朋友执行CrawlJob
  5. 以下是我的代码到目前为止的样子:

    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
      }
    
    }
    

    我为所有Twitter交互准备了Java服务。需要一些示例来确定如何在现有作业中创建新作业并将其与原始任务相关联。

    谢谢| Srirangan

1 个答案:

答案 0 :(得分:0)

我是如何解决这个问题的?

从概念上统一GridTasks和GridJobs。 MySpecialGridTask只能有一个MySpecialGridJob。

然后,很容易在Task或Job中执行新的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
  }

}