如何在Java应用程序中等待Elastic MapReduce作业流程的完成?

sid*_*tom 11 java amazon-web-services amazon-emr elastic-map-reduce

最近我一直在使用亚马逊网络服务(AWS),我注意到关于这个主题的文档不多,所以我添加了我的解决方案.

我正在使用Amazon Elastic MapReduce(Amazon EMR)编写应用程序.计算结束后,我需要对它们创建的文件执行一些工作,所以我需要知道作业流何时完成其工作.

这是您如何检查您的工作流程是否完成的方法:

AmazonElasticMapReduce mapReduce = new AmazonElasticMapReduceClient(credentials);

DescribeJobFlowsRequest jobAttributes = new DescribeJobFlowsRequest()
    .withJobFlowStates("COMPLETED");

List<JobFlowDetail> jobs = mapReduce.describeJobFlows(jobAttributes).getJobFlows();
JobFlowDetail detail = jobs.get(0);

detail.getJobFlowId(); //the id of one of the completed jobs
Run Code Online (Sandbox Code Playgroud)

您还可以查找特定的作业ID DescribeJobFlowsRequest,然后检查该作业是否已完成失败.

我希望它会帮助别人.

avi*_*iad 1

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

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

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

如果您的工作很耗时,我建议您定期存储结果。

长话短说:无法知道它何时完成。相反,您需要将保存数据作为工作的一部分。