選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

Amazon EMR 操作期間的叢集輸入和輸出錯誤

焦點模式
Amazon EMR 操作期間的叢集輸入和輸出錯誤 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

以下是在叢集輸入和輸出操作時常見的錯誤。使用本主題中的指引來疑難排解和檢查組態。

您的 Amazon Simple Storage Service (Amazon S3) 路徑是否至少包含三條斜線?

指定 Amazon S3 儲存貯體時,您必須在 URL 結尾包含終止斜線。例如,您應該使用 "s3n://amzn-s3-demo-bucket1",而不是將儲存貯體稱為 "s3n://amzn-s3-demo-bucket1/",否則 Hadoop 在大多數情況下會讓您的叢集失敗。

您是否想要嘗試以遞迴的方式周遊輸入目錄?

Hadoop 不會以遞迴的方式搜尋檔案的輸入目錄。如果您的目錄結構是 /corpus/01/01.txt、/corpus/01/02.txt、/corpus/02/01.txt 等等,而且您對於叢集指定 /corpus/ 做為輸入參數,則 Hadoop 會找不到該輸入檔,因為 /corpus/ 目錄是空的,而且 Hadoop 不會檢查子目錄的內容。同樣地,Hadoop 不會以遞迴的方式檢查 Amazon S3 儲存貯體的子目錄。

輸入檔案必須直接在輸入目錄中或您指定的 Amazon S3 儲存貯體,而不是在子目錄中。

您的輸出目錄是否已存在?

如果您指定的輸出路徑已存在,在大部分情況下,Hadoop 叢集將叢集視為失敗。這表示如果您執行叢集一次,然後使用完全相同的參數重新執行一次,很可能第一次會成功,但在第一次執行後就不再能夠運作,因為該輸出路徑已存在且會導致連續執行失敗。

您是否想要嘗試使用 HTTP URL 來指定資源?

Hadoop 不接受使用 http:// 字首的資源位置。您不能使用 HTTP URL 來參考資源。例如,使用 http://mysite/myjar.jar 做為 JAR 參數的傳遞會導致叢集失敗。

您是否使用無效名稱格式來參考 Amazon S3 儲存貯體?

如果您嘗試搭配 Amazon EMR 使用「amzn-s3-demo-bucket1.1」等儲存貯體名稱,您的叢集將會失敗,因為 Amazon EMR 要求儲存貯體名稱必須是有效的 RFC 2396 主機名稱;名稱結尾不能是數字。此外,由於 Hadoop 的要求,與 Amazon EMR 搭配使用的 Amazon S3 儲存貯體名稱必須僅包含小寫字母、數字、句點 (.) 和連字號 (-)。如需有關格式化 Amazon S3 儲存貯體名稱的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的儲存貯體限制與局限

您在 Amazon S3 之間來回載入資料時是否遇到困難?

Amazon S3 是 Amazon EMR 最熱門的輸入和輸出來源。一般錯誤是將 Amazon S3 視為一般檔案系統。您在執行叢集時,需要考量 Amazon S3 與檔案系統之間的差異。

  • 如果在 Amazon S3 中發生內部錯誤,您的應用程式需要從容地處理此問題和重新嘗試操作。

  • 如果對 Amazon S3 的呼叫需時太久,您的應用程式可能需要降低它呼叫 Amazon S3 的頻率。

  • 列出 Amazon S3 儲存貯體中的所有物件是一種昂貴的呼叫。您的應用程式應將此類操作的執行次數降到最低。

有多種方法可改善叢集與 Amazon S3 互動的方式。

  • 使用 Amazon EMR 的最新版本來啟動您的叢集。

  • 使用 S3DistCp 將物件傳入和傳出 Amazon S3。S3DistCp 實作錯誤處理、重試和退避來符合 Amazon S3 的需求。如需詳細資訊,請參閱使用 S3DistCp 的分散式複製

  • 設計您的應用程式,並保持最終一致性。在叢集執行中時使用中繼資料儲存體的 HDFS,而 Amazon S3 僅會輸出初始資料並輸出最終結果。

  • 如果您的叢集每秒會將 200 個或多個交易遞交至 Amazon S3,請聯絡支援以準備讓儲存貯體獲得每秒更佳的交易,請考慮使用 Amazon S3 效能秘訣和技巧中所述的金鑰分割區策略。

  • 將 Hadoop 組態設定 io.file.buffer.size 設定為 65536。這可讓 Hadoop 花費較少的時間來搜尋 Amazon S3 物件。

  • 如果您的叢集不斷發生 Amazon S3 並行問題,請考量停用 Hadoop 推測性執行功能。在針對緩慢叢集進行故障排除時也很有用。您可以藉由將 mapreduce.map.speculativemapreduce.reduce.speculative 屬性設為 false 來執行此操作。當您啟動叢集時,可以使用 mapred-env 組態分類來設定這些值。如需詳細資訊,請參閱《Amazon EMR 版本指南》中的設定應用程式

  • 如果您執行的是 Hive 叢集,請參閱 您在 Amazon S3 與 Hive 之間來回載入資料時是否遇到困難?

如需其他資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的 Amazon S3 錯誤最佳實務

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。