簡體   English   中英

適用於AWS EMR的Java客戶端,listSteps未顯示最新步驟

[英]Java Client for AWS EMR, listSteps doesn't show the latest step

我正在運行一個Java作業,該作業啟動AWS EMR並在其上運行步驟。 在將步驟添加到EMR之后,我調用listSteps函數以獲取步驟的狀態並等待它們全部完成/失敗。

我注意到有時函數listSteps不包含我添加后的最后一步,如果我在添加它后立即調用它的話。 這讓我認為所有步驟都已完成,而實際上最新步驟甚至還沒有開始。

  1. 這是一個已知問題,還是我在這里錯過了任何東西?
  2. 有沒有“最佳實踐”以避免在調用listSteps之前“睡眠”以外的listSteps

我正在使用Amazon SDK中的“ AmazonElasticMapReduceClient”類。

對於這種問題,我認為沒有神奇的解決方法。 許多AWS調用都是異步的。 例如,啟動EC2計算機將立即返回,然后您必須輪詢以查看實例是否啟動。 我認為只要進行一些設計,就不會有太大的問題。 我看到幾個選擇:

創建集群並添加作業步驟時,您知道要向集群添加多少作業步驟以及要添加的作業步驟,因此可以啟動新線程並監視群集中所有要添加的步驟(以psuedocode表示) :

function createCluster(steps, callback):
    aws.runJobFlow(...)
    on new thread:
        while(steps != aws.listSteps(...)):
            sleep()
        callback()

然后,狀態檢查(以查看作業是否完成)中listSteps()就是調用listSteps()並檢查狀態。 那可能是最簡單的解決方案。

另一個設計選項是您有一個作業步驟,通知您軟件進度或作業成功完成。 此設計選項將是異步的,並且不需要輪詢。 例如,創建一個名為notify的作業步驟。 然后,您可以像

  1. JobStep1
  2. 通知
  3. JobStep2
  4. 通知

每個通知步驟可以在作業流上列出listSteps(),以查看先前步驟的結果並更新數據庫,向服務發送消息或根據作業的進度更新緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM