Mapreduce 在何处访问已终止或正在运行的群集的EMR计数器

Mapreduce 在何处访问已终止或正在运行的群集的EMR计数器,mapreduce,elastic-map-reduce,amazon-emr,Mapreduce,Elastic Map Reduce,Amazon Emr,我正在ElasticMapReduce上运行一个作业流,它在完成所有步骤后终止 集群终止后,如何访问每个映射器或还原器的自定义计数器?(可能在s3上的某个地方有日志,如果有的话) 当集群仍在运行时,我如何通过编程方式访问它们(比如从pythonboto、javaclien或通过ssh访问机器) 1) 计数器将位于以下位置的作业历史记录日志中: $LOG_PATH/$CLUSTER_ID/hadoop-mapreduce/history/$YEAR/$MONTH/$DAY/$JOB_ID.jhis

我正在ElasticMapReduce上运行一个作业流,它在完成所有步骤后终止

  • 集群终止后,如何访问每个映射器或还原器的自定义计数器?(可能在s3上的某个地方有日志,如果有的话)

  • 当集群仍在运行时,我如何通过编程方式访问它们(比如从pythonboto、javaclien或通过ssh访问机器)

  • 1) 计数器将位于以下位置的作业历史记录日志中:

    $LOG_PATH/$CLUSTER_ID/hadoop-mapreduce/history/$YEAR/$MONTH/$DAY/$JOB_ID.jhist.gz
    
    它们将采用JSON格式,因此您可能需要进行一些处理

    2) 我会使用
    aws
    s3cmd
    CLI工具来获取和处理它们

    您还可以修改hadoop作业,以便在完成时以您想要的任何格式将计数器写入文件

    比如:

    //作业设置的其余部分
    job.waitForCompletion(true);
    FileSystem fs=FileSystem.get(URI.create(outputPath),job.getConfiguration());
    FSDataOutputStream FSDataOutputStream=fs.create(新路径(outputPath+“/counters_output.csv”);
    PrintWriter writer=新的PrintWriter(fsDataOutputStream);
    Counters Counters=job.getCounters();
    用于(计数器组计数器组:计数器){
    用于(计数器:计数器组){
    write(counter.getName()+“,”+counter.getValue());
    }
    }
    writer.close();
    fsDataOutputStream.close();
    fs.close();