【问题标题】:How can I know when the amazon mapreduce task is complete?我怎么知道 amazon mapreduce 任务何时完成?
【发布时间】:2011-03-15 13:37:30
【问题描述】:

我正在尝试在 amazon ec2 上运行 mapreduce 任务。 我设置了所有配置参数,然后调用 AmazonElasticMapReduce 服务的 runFlowJob 方法。 我想知道有没有办法知道工作是否已经完成以及状态如何。 (我需要它知道何时可以从 s3 获取 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");      
}

谢谢,

航空

【问题讨论】:

    标签: amazon-ec2


    【解决方案1】:

    来自 AWS 文档:

    一旦作业流程完成,集群就会停止并且 HDFS 分区会丢失。 为防止数据丢失,请将作业流的最后一步配置为将结果存储在 Amazon S3 中。

    接着说:

    如果JobFlowInstancesDetail : KeepJobFlowAliveWhenNoSteps 参数设置为TRUE,作业流程将转换为WAITING 状态,而不是在步骤完成后关闭。

    每个作业流程最多允许 256 个步骤。

    对于长期运行的作业流程,我们建议您定期存储结果。

    所以看起来没有办法知道什么时候完成。相反,您需要将数据保存为工作的一部分。

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 2019-01-08
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多