是有辦法來設置超時爲步亞馬遜AWS EMR?亞馬遜EMR - 如何設置超時一步
我正在EMR上運行批處理Apache Spark作業,如果該作業不在3小時內結束,我希望作業停止併發生超時。
我無法找到一個方法來設置超時在星火未,也不紗線,也不在EMR配置。
感謝您的幫助!
是有辦法來設置超時爲步亞馬遜AWS EMR?亞馬遜EMR - 如何設置超時一步
我正在EMR上運行批處理Apache Spark作業,如果該作業不在3小時內結束,我希望作業停止併發生超時。
我無法找到一個方法來設置超時在星火未,也不紗線,也不在EMR配置。
感謝您的幫助!
好吧,正如許多人已經回答的那樣,此時EMR步驟不能通過API調用終止/停止/終止。
但是爲了實現您的目標,您可以將超時作爲應用程序代碼本身的一部分引入。當您提交EMR步驟時,會創建一個子進程來運行您的應用程序 - 無論是MapReduce應用程序,Spark應用程序等,並且完成步驟由此子進程(這是您的應用程序)返回的退出代碼確定。
例如,如果你提交的MapReduce的應用程序,你可以使用類似如下:
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
final Runnable stuffToDo = new Thread() {
@Override
public void run() {
job.submit();
}
};
final ExecutorService executor = Executors.newSingleThreadExecutor();
final Future future = executor.submit(stuffToDo);
executor.shutdown(); // This does not cancel the already-scheduled task.
try {
future.get(180, TimeUnit.MINUTES);
}
catch (InterruptedException ie) {
/* Handle the interruption. Or ignore it. */
}
catch (ExecutionException ee) {
/* Handle the error. Or ignore it. */
}
catch (TimeoutException te) {
/* Handle the timeout. Or ignore it. */
}
System.exit(job.waitForCompletion(true) ? 0 : 1);
參考 - Java: set timeout on a certain block of code?。
希望這會有所幫助。
其實在我的情況下,我不能在代碼中設置超時,因爲有時問題不在代碼本身。在某些情況下,甚至不能創建應用程序容器,因此該步驟被卡住,不斷重試以創建容器,甚至不會開始運行應用程序代碼。 – nicola
據我所知,你不能設置超時。但是,如果運行時間超過3小時,您可以始終創建一個Lambda函數,以殺死您的作業或羣集;-) –
謝謝!這就是我的想法,但我希望找到一種更簡單的方法,只需在創建步驟期間或直接在YARN中設置一些配置參數即可。 – nicola
@GlennieHellesSindholt,這是從lambda函數中殺死一個步驟的最簡單方法? (我只是想殺死這個步驟,但我不想終止整個集羣) – nicola