

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

# EMRFS 一致檢視中繼資料
<a name="emrfs-metadata"></a>

EMRFS 一致性檢視會使用 DynamoDB 資料表來追蹤一致性，以便追蹤 Amazon S3 中的物件是否已與 EMRFS 同步或由 EMRFS 建立。中繼資料會用於追蹤所有操作 (讀取、寫入、更新和副本)，在該應用程式中也沒有存放實際內容。此中繼資料可用來驗證從 Amazon S3 收到的物件或中繼資料是否如預期一樣。這個確認讓 EMRFS 能夠為 EMRFS 寫入至 Amazon S3 的新物件或使用 EMRFS 同步的物件，檢查清單一致性和先寫後讀一致性。多個叢集可以共用相同的中繼資料。

**如何將項目新增到中繼資料**  
您可以使用 `sync` 或 `import` 子命令來將項目新增至中繼資料。`sync` 會反映 Amazon S3 物件在路徑中的狀態，同時嚴格使用 `import` 以將新項目新增至中繼資料。如需詳細資訊，請參閱[EMRFS CLI 命令參考](emrfs-cli-reference.md)。

**如何檢查 Amazon S3 內中繼資料與物件之間的差異**  
若要檢查中繼資料與 Amazon S3 之間的差異，請使用 EMRFS CLI 的 `diff` 子命令。如需詳細資訊，請參閱[EMRFS CLI 命令參考](emrfs-cli-reference.md)。

**如何知道中繼資料操作正在受到節流**  
EMRFS 集預設會將對中繼資料讀取和寫入操作的輸送容量限制設在 500 個和 100 個單位。大量物件或儲存貯體可能會導致操作超過此容量，在達到此限制時 DynamoDB 將對操作限流。例如，如果您執行的操作超過這些容量限制，應用程式可能會導致 EMRFS 擲出 `ProvisionedThroughputExceededException`。在限流時，EMRFS CLI 工具會嘗試使用[指數退避](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)，來重試寫入 DynamoDB 資料表，直到操作完成或達到將物件從 Amazon EMR 寫入至 Amazon S3 的最大重試值。

您可以設定自己的輸送容量限制。但是，DynamoDB 對讀取和寫入操作具有每秒 3,000 個讀取容量單位 (RCU) 和 1,000 個寫入容量單位 (WCU) 的分割區限制限制。為了避免因限流而導致 `sync` 故障，建議您將讀取操作的輸送量限制為少於 3,000 個 RCU，將寫入操作的輸送量限制為少於 1,000 個 WCU。如需有關設定自訂輸送容量限制的指示，請參閱 [設定一致性檢視](emrfs-configure-consistent-view.md)。

您也可以在 DynamoDB 主控台針對 EMRFS 中繼資料檢視 Amazon CloudWatch 指標，而您可在該主控台查看讀取和寫入請求的限流數。如果您有非零值節流請求，應用程式可能會為讀取或寫入操作增加分配輸送容量而受益。如果您發現操作在讀取或寫入很長一段時間後即將接近最大分配輸送容量，您也可以實現效能優勢。

**顯著 EMRFS 操作的輸送量特性**  
讀取和寫入操作的預設分別是 400 和 100 輸送容量單位。以下效能特性讓您能掌握特定操作所需的輸送量。使用單一節點的 `m3.large` 叢集執行這些測試。所有操作皆是進行單一執行緒處理。效能會根據特定的應用程式特性而有所不同，且可能需要試驗來最佳化檔案系統操作。


| 作業  | 每秒讀取平均值  | 每秒寫入平均值  | 
| --- | --- | --- | 
| 建立 (物件) | 26.79 |  6.70 | 
| 刪除 (物件) | 10.79 |  10.79 | 
| 刪除 (包含 1000 個物件的目錄) | 21.79 | 338.40  | 
|  getFileStatus (物件) | 34.70 | 0  | 
| getFileStatus (目錄) | 19.96 | 0 | 
| listStatus (包含 1 個物件的目錄) | 43.31 | 0 | 
| listStatus (包含 10 個物件的目錄) | 44.34 | 0 | 
| listStatus (包含 100 個物件的目錄) | 84.44 | 0 | 
| listStatus (包含 1,000 個物件的目錄) | 308.81 | 0 | 
| listStatus (包含 10,000 個物件的目錄) | 416.05 | 0 | 
| listStatus (包含 100,000 個物件的目錄) | 823.56 | 0 | 
| listStatus (包含 100 萬個物件的目錄) | 882.36 | 0 | 
| mkdir (持續 120 秒)  | 24.18 | 4.03 | 
| mkdir | 12.59 | 0 | 
| 重新命名 (物件) | 19.53 | 4.88 | 
| 重新命名 (包含 1000 個物件的目錄) | 23.22 | 339.34 | 

**若要提交步驟，以將舊資料從您的中繼資料存放區中清除**  
使用者可能希望在 DynamoDB 型中繼資料中移除特定項目。這可協助降低與資料表關聯的儲存成本。使用者可以透過使用 EMRFS CLI `delete` 子指令，手動或以程式設計方式清除特定項目。不過，如果您將項目從中繼資料刪除，EMRFS 將不再進行任何一致性檢查。

透過將最後一個步驟提交到叢集 (亦即在 EMRFS CLI 上執行命令)，即可在完成任務後以程式設計的方式完成清除。例如，輸入下列命令來將步驟提交到您的叢集，以刪除保存時間超過兩天的所有項目。

```
aws emr add-steps --cluster-id j-2AL4XXXXXX5T9 --steps Name="emrfsCLI",Jar="command-runner.jar",Args=["emrfs","delete","--time","2","--time-unit","days"]
{
    "StepIds": [
        "s-B12345678902"
    ]
}
```

使用傳回的 StepId 值來檢查操作的結果日誌。