dra*_*nxo 7 amazon-web-services emr
我正在编写一个运行 aws emr 命令的 bash 脚本(aws emr 版本 1.5.2)。
我如何告诉我的脚本等到 emr 作业完成后再继续?该--wait-for-steps期权现在已折旧。
通过jq我得到了这个,但这似乎是错误的方法:
STEP_STATUS_STATE=$(aws emr list-steps --cluster-id ${CLUSTER_ID} | jq '.Steps[0].Status.State' | tr -d '"')
while [[ ${STEP_STATUS_STATE} == PENDING ]] || [[ ${STEP_STATUS_STATE} == RUNNING ]]; do
STEP_STATUS_STATE=$(aws emr list-steps --cluster-id ${CLUSTER_ID} | jq '.Steps[0].Status.State' | tr -d '"')
echo $(date) ${STEP_STATUS_STATE}
sleep 10
done
Run Code Online (Sandbox Code Playgroud)
我使用 AWS java api 等待作业完成,如下所示。希望这可以帮助
public static final List<JobFlowExecutionState> DONE_STATES = Arrays
.asList(new JobFlowExecutionState[] {
JobFlowExecutionState.COMPLETED,
JobFlowExecutionState.FAILED,
JobFlowExecutionState.TERMINATED });
Run Code Online (Sandbox Code Playgroud)
...
public static boolean isDone(String value) {
JobFlowExecutionState state = JobFlowExecutionState.fromValue(value);
return Constants.DONE_STATES.contains(state);
}
.
.
STATUS_LOOP: while (true) {
DescribeJobFlowsRequest desc = new DescribeJobFlowsRequest(
Arrays.asList(new String[] { result.getJobFlowId() }));
DescribeJobFlowsResult descResult = emr.describeJobFlows(desc);
for (JobFlowDetail detail : descResult.getJobFlows()) {
String state = detail.getExecutionStatusDetail().getState();
if (isDone(state)) {
logger.info("Job " + state + ": " + detail.toString());
if(loadToDailyDB && state.equalsIgnoreCase("COMPLETED"))
{
//Do something
}
if(!state.equalsIgnoreCase("COMPLETED"))
{
}
break STATUS_LOOP;
} else if (!lastState.equals(state)) {
lastState = state;
logger.info("Job " + state + " at "
+ new Date().toString());
}
}
Thread.sleep(75000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1703 次 |
| 最近记录: |