本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
以下是在叢集輸入和輸出操作時常見的錯誤。使用本主題中的指引來疑難排解和檢查組態。
主題
您的 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.speculative
和mapreduce.reduce.speculative
屬性設為false
來執行此操作。當您啟動叢集時,可以使用mapred-env
組態分類來設定這些值。如需詳細資訊,請參閱《Amazon EMR 版本指南》中的設定應用程式。 -
如果您執行的是 Hive 叢集,請參閱 您在 Amazon S3 與 Hive 之間來回載入資料時是否遇到困難?。
如需其他資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的 Amazon S3 錯誤最佳實務。