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

时间:2014-11-29 09:29:06

标签: mapreduce elastic-map-reduce amazon-emr

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

  1. 如何在群集被杀死后访问每个映射器或reducer的自定义计数器? (也许在s3的某个地方有日志,如果有的话)

  2. 如何在群集仍在运行时以编程方式(例如从python boto,或java clien或ssh到机器)访问它们。

1 个答案:

答案 0 :(得分:0)

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

$LOG_PATH/$CLUSTER_ID/hadoop-mapreduce/history/$YEAR/$MONTH/$DAY/$JOB_ID.jhist.gz

它们将采用JSON格式,因此您可能需要进行一些处理。

2)我会使用awss3cmd CLI工具来抓取和处理它们。

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

类似的东西:

 //Rest of job setup
job.waitForCompletion(true);

    FileSystem fs = FileSystem.get(URI.create(outputPath), job.getConfiguration());
    FSDataOutputStream fsDataOutputStream = fs.create(new Path(outputPath + "/counters_output.csv"));
    PrintWriter writer = new PrintWriter(fsDataOutputStream);

    Counters counters = job.getCounters();
    for (CounterGroup counterGroup : counters) {
        for (Counter counter : counterGroup) {
            writer.write(counter.getName() + "," + counter.getValue());
        }
    }

    writer.close();
    fsDataOutputStream.close();
    fs.close();