2011-02-24 12 views
2

私はamazon ec2でmapreduceタスクを実行しようとしています。 すべての設定パラメータを設定し、AmazonElasticMapReduceサービスのrunFlowJobメソッドを呼び出します。 ジョブが完了したかどうか、ステータスは何かを知る方法はありますか? (私は、後で処理するためにs3からmapreduceの結果を取り出すことができるのを知っておく必要があります)amazon mapreduceタスクが完了したら、どうすればわかりますか?

現在のところ、runJobFlowの呼び出しはノンブロッキングです。

public void startMapReduceTask(String accessKey, String secretKey 
     ,String eC2KeyPairName, String endPointURL, String jobName 
     ,int numInstances, String instanceType, String placement 
     ,String logDirName, String bucketName, String pigScriptName) { 
    log.info("Start running MapReduce"); 

    // config.set 
    ClientConfiguration config = new ClientConfiguration(); 
    AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); 

    AmazonElasticMapReduce service = new AmazonElasticMapReduceClient(credentials, config); 
    service.setEndpoint(endPointURL); 

    JobFlowInstancesConfig conf = new JobFlowInstancesConfig(); 

    conf.setEc2KeyName(eC2KeyPairName); 
    conf.setInstanceCount(numInstances); 
    conf.setKeepJobFlowAliveWhenNoSteps(true); 
    conf.setMasterInstanceType(instanceType); 
    conf.setPlacement(new PlacementType(placement)); 
    conf.setSlaveInstanceType(instanceType); 

    StepFactory stepFactory = new StepFactory(); 

    StepConfig enableDebugging = new StepConfig() 
    .withName("Enable Debugging") 
    .withActionOnFailure("TERMINATE_JOB_FLOW") 
    .withHadoopJarStep(stepFactory.newEnableDebuggingStep()); 

    StepConfig installPig = new StepConfig() 
    .withName("Install Pig") 
    .withActionOnFailure("TERMINATE_JOB_FLOW") 
    .withHadoopJarStep(stepFactory.newInstallPigStep()); 

    StepConfig runPigScript = new StepConfig() 
    .withName("Run Pig Script") 
    .withActionOnFailure("TERMINATE_JOB_FLOW") 
    .withHadoopJarStep(stepFactory.newRunPigScriptStep("s3://" + bucketName + "/" + pigScriptName, "")); 

    RunJobFlowRequest request = new RunJobFlowRequest(jobName, conf) 
    .withSteps(enableDebugging, installPig, runPigScript) 
    .withLogUri("s3n://" + bucketName + "/" + logDirName); 

    try { 
     RunJobFlowResult res = service.runJobFlow(request); 
     log.info("Mapreduce job with id[" + res.getJobFlowId() + "] completed successfully"); 
    } catch (Exception e) { 
     log.error("Caught Exception: ", e); 
    } 
    log.info("End running MapReduce");  
} 

AWSのドキュメントからの感謝、

aviad

答えて

2

ジョブフローが完了すると、クラスタが停止され、HDFSパーティションが失われました。 データの損失を防ぐには、結果をAmazon S3に保存するようにジョブフローの最後のステップを設定します。

それは言うように行く:

JobFlowInstancesDetail : KeepJobFlowAliveWhenNoStepsパラメータがTRUEに設定されている場合は、ジョブフローがWAITING状態に遷移するのではなく、ステップが完了したら、シャットダウン。

各ジョブフローで最大256ステップが許可されます。

長時間実行されるジョブフローの場合、結果を定期的に保存することをお勧めします。

だから、いつ行われたのかわからないようです。代わりに、ジョブの一部としてデータを保存する必要があります。

関連する問題