2011-02-24 3 views
2

아마존 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 단계가 허용됩니다.

장기 실행되는 작업 흐름의 경우 주기적으로 결과를 저장하는 것이 좋습니다.

그래서 완료 시점을 알 수없는 것처럼 보입니다. 대신 작업의 일부로 데이터를 저장해야합니다.

관련 문제