

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 整合性のあるビュー
<a name="emr-plan-consistent-view"></a>

**警告**  
2023 年 6 月 1 日以降、その後リリースされる Amazon EMR では、EMRFS の整合性のあるビューに標準サポートは提供されません。既存のリリースの場合、EMRFS の整合性のあるビューは、継続して利用できます。

2020 年 12 月 1 日に Amazon S3 でリリースされた、リードアフターライトの強力な整合性確保機能により、Amazon EMR クラスターで EMRFS の整合性のビュー (EMRFS CV) を使用する必要がなくなりました。EMRFS CV は、オプションの機能であり、これによって、Amazon EMR クラスターで Amazon S3 オブジェクトに実行するリストおよびリードアフターライトの整合性を確認できます。クラスターを作成して EMRFS CV を有効にすると、Amazon EMR に Amazon DynamoDB データベースが作成され、そこに保存されたオブジェクトメタデータによって、S3 オブジェクトに実行するリストおよびリードアフターライトの整合性が追跡されます。今回のリリースにより、EMRFS CV をオフにして、この機能が使用する DynamoDB データベースを削除できるようになりました。これで、追加のコストも発生しません。次の手順に従うと、CV 機能の確認と無効化に加え、その機能が使用する DynamoDB データベースの削除を行えます。<a name="enable-emr-fs-console"></a>

**EMRFS CV 機能の使用状況を確認するには**

1. **[設定]** タブに移動します。クラスターを以下のように設定している場合、EMRFS CV が使用されます。

   ```
   Classification=emrfs-site,Property=fs.s3.consistent,Value=true
   ```

1. または、 AWS CLI を使用して [`describe-cluster` API](https://docs.aws.amazon.com/cli/latest/reference/emr/describe-cluster.html) でクラスターを記述します。出力に `fs.s3.consistent: true` が指定されていると、クラスターは EMRFS CV を使用します。

**Amazon EMR クラスターの EMRFS CV を無効にするには**

EMRFS CV の機能を無効にするには、次に示す 3 つのオプションのいずれかを使用します。これらのオプションは、テスト環境でテストした後に、実稼働環境に適用する必要があります。

1. 

**既存のクラスターを停止し、EMRFS CV オプションを使用せずに新規クラスターを開始するには。**

   1. クラスターの停止前に、データを確実にバックアップし、ユーザーに停止を通知してください。

   1. クラスターを停止するには、「[クラスターを終了する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/UsingEMR_TerminateJobFlow.html)」の手順に従います。

   1. Amazon EMR コンソールからクラスターを新規作成する場合は、**[詳細オプション]** に移動します。**[ソフトウェア設定の編集]** セクションで、EMRFS CV を有効にするオプションの選択を解除します。**[EMRFS の整合性のビュー]** のチェックボックスが使用可能な場合は、チェックを外したままにします。

   1.  AWS CLI を使用して [`create-cluster` API](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html) で新しいクラスターを作成する場合は、EMRFS CV をオンにする `--emrfs`オプションを使用しないでください。

   1. SDK または を使用して新しいクラスター CloudFormation を作成する場合は、[「整合性のあるビューを設定する](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-configure-consistent-view.html)」に記載されている設定を使用しないでください。

1. 

**クラスターを複製して EMRFS CV を削除するには**

   1. Amazon EMR コンソールで、EMRFS CV を使用するクラスターを選択します。

   1. **[クラスターの詳細]** ページの上部で、**[クローン]** を選択します。

   1. **[前へ]** を選択して、**[ステップ 1: ソフトウェアとステップ]** に移動します。

   1. **[ソフトウェア設定の編集]** で EMRFS CV を削除します。**[設定を編集する]** で、`emrfs-site` 分類内にある次の設定を削除します。S3 バケットから JSON を読み込む場合は、S3 オブジェクトを変更する必要があります。

      ```
      [
      	{"classification":
      		"emrfs-site",
      		"properties": {
      			"fs.s3.consistent.retryPeriodSeconds":"10",
      			"fs.s3.consistent":"true",
      			"fs.s3.consistent.retryCount":"5",
      			"fs.s3.consistent.metadata.tableName":"EmrFSMetadata"
      		}
      	}
      ]
      ```

1. 

**インスタンスグループを使用するクラスターから EMRFS CV を削除するには**

   1. 1 つの EMR クラスターが EMRFS CV に関連付けられた DynamoDB テーブルを使用しているかどうか、または複数のクラスターがテーブルを共有しているかどうかを確認するには、次のコマンドを使用します。「[整合性のあるビューを設定する](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-configure-consistent-view.html)」の説明どおり、テーブル名は `fs.s3.consistent.metadata.tableName` で指定します。EMRFS CV で使用するデフォルトのテーブル名は `EmrFSMetadata` です。

      ```
      aws emr describe-cluster --cluster-id j-XXXXX | grep fs.s3.consistent.metadata.tableName
      ```

   1. DynamoDB データベースが別のクラスターと共有されていない場合は、次のコマンドを使用してクラスターを再設定し、EMRFS CV を非アクティブ化します。詳細については、「[実行中のクラスター内のインスタンスグループの再設定](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html)」を参照してください。

      ```
      aws emr modify-instance-groups --cli-input-json file://disable-emrfs-1.json
      ```

      このコマンドにより、変更対象のファイルが開きます。次の設定を使用してファイルを変更します。

      ```
      {
      	"ClusterId": "j-xxxx",
      	"InstanceGroups": [
      		{
      			"InstanceGroupId": "ig-xxxx",
      			"Configurations": [
      				{
      					"Classification": "emrfs-site",
      					"Properties": {
      						"fs.s3.consistent": "false"
      					},
      					"Configurations": []
      				}
      			]
      		}
      	]
      }
      ```

   1. DynamoDB テーブルが別のクラスターと共有されている場合は、すべてのクラスターの EMRFS CV を一度に無効化します。この操作は、クラスターが S3 の共有ロケーションにあるオブジェクトを変更しないタイミングで行ってください。

**EMRFS CV に関連付けた Amazon DynamoDB リソースを削除するには**

Amazon EMR クラスターから EMRFS CV を削除した後、EMRFS CV に関連付けた DynamoDB リソースを削除します。この操作を行わないと、EMRFS CV に関連する DynamoDB 料金が引き続き発生します。

1. DynamoDB テーブルの CloudWatch メトリクスを確認し、テーブルがどのクラスターからも使用されていないことを確認します。

1. DynamoDB テーブルを削除します。

   ```
   aws dynamodb delete-table --table-name <your-table-name>
   ```

**EMRFS CV に関連付けた Amazon SQS リソースを削除するには**

1. 不整合の通知が Amazon SQS にプッシュされるようにクラスターを設定すると、SQS キューをすべて削除できます。

1. 「[整合性のあるビューを設定する](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-configure-consistent-view.html)」の説明どおり `fs.s3.consistent.notification.SQS.queueName` で指定された Amazon SQS キュー名を検索します。デフォルトの場合、キュー名の形式は、`EMRFS-Inconsistency-<j-cluster ID>` です。

   ```
   aws sqs list-queues | grep ‘EMRFS-Inconsistency’
   aws sqs delete-queue –queue-url <your-queue-url>
   ```

**EMRFS CLI の使用を停止するには**
+ EMRFS CV によって生成されるメタデータは、[EMRFS CLI](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-cli-reference.html) で管理します。今後リリースされる Amazon EMR では EMRFS CV の標準サポートが終了するため、EMRFS CLI のサポートも終了します。

**Topics**
+ [整合性のあるビューを有効にする](enable-consistent-view.md)
+ [EMRFS の整合性のあるビューが Amazon S3 内のオブジェクトを追跡する方法を理解する](emrfs-files-tracked.md)
+ [再試行ロジック](emrfs-retry-logic.md)
+ [EMRFS の整合性のあるビューのメタデータ](emrfs-metadata.md)
+ [CloudWatch と Amazon SQS の整合性通知を設定する](emrfs-configure-sqs-cw.md)
+ [整合性のあるビューを設定する](emrfs-configure-consistent-view.md)
+ [EMRFS CLI コマンドリファレンス](emrfs-cli-reference.md)

# 整合性のあるビューを有効にする
<a name="enable-consistent-view"></a>

、、または設定分類を使用して AWS マネジメントコンソール、EMRFS の Amazon S3 サーバー側の暗号化または整合性のあるビューを有効にできます。 AWS CLI `emrfs-site` <a name="enable-emr-fs-console"></a>

**コンソールを使用して整合性のあるビューを設定するには**

1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから **[古いコンソールに切り替え]** を選択します。古いコンソールに切り替えたときの動作の詳細については、「[Using the old console](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)」を参照してください。

1. [**Create cluster (クラスターの作成)**]、[**Go to advanced options (詳細オプションに移動する)**] の順に選択します。

1. [**Step 1: Software and Steps**] および [**Step 2: Hardware**] の設定を選択します。

1. [**Step 3: General Cluster Settings**] の [**Additional Options**] で、[**EMRFS consistent view**] を選択します。

1. [**EMRFS Metadata store**] に、メタデータストアの名前を入力します。デフォルト値は **EmrFSMetadata** です。EmrFSMetadata テーブルが存在しない場合、自動的に DynamoDB に作成されます。
**注記**  
Amazon EMR は、クラスターの終了時に DynamoDB から EMRFS メタデータを自動的には削除しません。

1. [**Number of retries**] に整数値を入力します。不整合が検出された場合、EMRFS はこの回数にわたり、Amazon S3 の呼び出しを試みます。デフォルト値は **5** です。

1. [**Retry period (in seconds)**] に、整数値を入力します。これは、再試行までに EMRFS が待機する時間です。デフォルト値は **10** です。
**注記**  
それ以降の再試行では、エクスポネンシャルパックオフが使用されます。

**を使用して整合性のあるビューが有効になっているクラスターを起動するには AWS CLI**

の最新バージョンをインストールすることをお勧めします AWS CLI。最新リリースをダウンロードするには、[https://aws.amazon.com/cli/](https://aws.amazon.com/cli/) を参照してください。
+ 
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

  ```
  1. aws emr create-cluster --instance-type m5.xlarge --instance-count 3 --emrfs Consistent=true \
  2. --release-label emr-7.12.0 --ec2-attributes KeyName=myKey
  ```

**を使用して整合性のあるビューが有効になっているかどうかを確認するには AWS マネジメントコンソール**
+ コンソールで整合性のあるビューが有効かどうかを確認するには、[**Cluster List**] に移動し、クラスター名を選択して [**Cluster Details**] を表示します。[EMRFS consistent view] フィールドの値は、`Enabled` または `Disabled` です。

**整合性のあるビューが有効になっているかどうかを確認するには、`emrfs-site.xml` ファイルを調べます。**
+ 整合性が有効になっているかどうかは、クラスターのマスターノードの `emrfs-site.xml` 設定ファイルを調べることで確認できます。`fs.s3.consistent` のブール値が `true` に設定されている場合、Amazon S3 が関与するファイルシステム操作に対して整合性のあるビューが有効になっています。

# EMRFS の整合性のあるビューが Amazon S3 内のオブジェクトを追跡する方法を理解する
<a name="emrfs-files-tracked"></a>

EMRFS は、オブジェクトに関する情報を EMRFS メタデータに追加することで、Amazon S3 内にそれらのオブジェクトの整合性のあるビューを作成します。EMRFS は、次の場合にこれらの一覧をそのメタデータに追加します。
+  Amazon EMR ジョブの実行中に、EMRFS によってオブジェクトが書き込まれた。
+  EMRFS CLI を使用してオブジェクトが EMRFS のメタデータと同期化されたか、EMRFS にインポートされた。

EMRFS によって読み取られたオブジェクトはメタデータに自動的に追加されません。EMRFS がオブジェクトを削除されると、リストが EMRFS CLI を使用して消去されるまで、削除された状態でメタデータに残ります。CLI の詳細については、「[EMRFS CLI コマンドリファレンス](emrfs-cli-reference.md)」を参照してください。EMRFS のメタデータでの一覧消去の詳細については、「[EMRFS の整合性のあるビューのメタデータ](emrfs-metadata.md)」を参照してください。

EMRFS は、すべての Amazon S3 操作について、整合性のあるビューのオブジェクトのセットに関する情報のメタデータを確認します。EMRFS は、これらのいずれかの操作中に Amazon S3 が不整合であることを検出すると、`emrfs-site` 設定プロパティで定義されているパラメータに従って操作を再試行します。EMRFS が再試行した後、`ConsistencyException` を返すか、例外を記録してワークフローを継続します。再試行ロジックの詳細については、「[再試行ロジック](emrfs-retry-logic.md)」を参照してください。たとえば、ログには `ConsistencyExceptions` が見つかります。
+  listStatus: No Amazon S3 object for metadata item `/S3_bucket/dir/object`
+  getFileStatus: Key `dir/file` is present in metadata but not Amazon S3

EMRFS の整合性のあるビューで追跡されているオブジェクトを Amazon S3 から直接削除すると、EMRFS はそのオブジェクトを不整合として扱います。これは、そのオブジェクトが Amazon S3 に存在するものとしてメタデータにまだリストされているためです。Amazon S3 で EMRFS が追跡するオブジェクトとメタデータが同期されなくなった場合は、EMRFS CLI の **sync** サブコマンドを使用して、Amazon S3 の状態を反映するようにメタデータをリセットできます。メタデータと Amazon S3 との間の不整合を検出するには、**diff** を使用します。最後に、EMRFS の整合性のあるビューには、メタデータで参照されているオブジェクトのみがあります。同じ Amazon S3 のパスには、追跡されていない他のオブジェクトが存在する可能性があります。EMRFS は、Amazon S3 パスのオブジェクトを一覧表示するときに、メタデータで追跡されているオブジェクトと、その Amazon S3 パス内のオブジェクトのスーパーセットを返します。

# 再試行ロジック
<a name="emrfs-retry-logic"></a>

EMRFS は、特定の数の再試行について、メタデータで追跡されるオブジェクトのリストの整合性を検証しようとします。デフォルトは 5 です。再試行の数を超過する場合、`fs.s3.consistent.throwExceptionOnInconsistency` が `false` に設定されていない限り（この場合、整合性がないとして追跡されるオブジェクトのみが記録されます）、失敗を返します。EMRFS は、デフォルトでエクスポネンシャルパックオフ再試行ポリシーを使用しますが、固定ポリシーに設定することもできます。ユーザーは、例外をスローすることなく、残りのジョブに進む前に特定の時間、再試行したい場合があります。その場合は、`fs.s3.consistent.throwExceptionOnInconsistency` を `false` に、`fs.s3.consistent.retryPolicyType` を `fixed` に、`fs.s3.consistent.retryPeriodSeconds` を目的の値に設定することで、これを達成できます。次の例では、整合性を有効にしてクラスターを作成します。これにより、不整合が記録され、10 秒の固定再試行間隔が設定されます。

**Example 再試行期間の一定量への設定**  

```
aws emr create-cluster --release-label emr-7.12.0 \
--instance-type m5.xlarge --instance-count 1 \
--emrfs Consistent=true,Args=[fs.s3.consistent.throwExceptionOnInconsistency=false, fs.s3.consistent.retryPolicyType=fixed,fs.s3.consistent.retryPeriodSeconds=10] --ec2-attributes KeyName=myKey
```

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

詳細については、「[整合性のあるビュー](emr-plan-consistent-view.md)」を参照してください。

## IMDS のリージョンの取得呼び出しに対する EMRFS 設定
<a name="randomized-exponential-backoff-retry"></a>

EMRFS は、IMDS (インスタンスメタデータサービス) を使用して、インスタンスリージョンと Amazon S3、DynamoDB、または AWS KMS エンドポイントを取得します。ただし、IMDS には処理できるリクエストの数に制限があり、その制限を超えるリクエストは失敗します。この IMDS 制限により、EMRFS の初期化が失敗し、クエリまたはコマンドが失敗する可能性があります。emrfs-site.xml で、次のランダム化されたエクスポネンシャルバックオフ再試行メカニズムとフォールバックリージョン設定プロパティを使用して、すべての再試行が失敗するシナリオに対応できます。

```
<property>
    <name>fs.s3.region.retryCount</name>
    <value>3</value>
    <description>
    Maximum retries that would be attempted to get AWS region.
    </description>
</property>
<property>
    <name>fs.s3.region.retryPeriodSeconds</name>
    <value>3</value>
    <description>
    Base sleep time in second for each get-region retry.
    </description>
</property>
<property>
    <name>fs.s3.region.fallback</name>
    <value>us-east-1</value>
    <description>
    Fallback to this region after maximum retries for getting AWS region have been reached.
    </description>
</property>
```

# EMRFS の整合性のあるビューのメタデータ
<a name="emrfs-metadata"></a>

EMRFS の整合性のあるビューは、DynamoDB テーブルを使用して、EMRFS と同期されたか、EMRFS によって作成された Amazon S3 内のオブジェクトの整合性を追跡します。このメタデータはすべての操作（読み取り、書き込み、更新、およびコピー）の追跡に使用され、実際のコンテンツはメタデータには保存されません。このメタデータは、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 ツールは、操作が終了するか、Amazon EMR から Amazon S3 へのオブジェクト書き込みの最大再試行値に到達するまで、[エクスポネンシャルパックオフ](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)を使用して DynamoDB テーブルへの書き込みを再試行します。

独自のスループットキャパシティー制限を設定できます。ただし、DynamoDB の読み込み操作と書き込み操作には、3000 読み込みキャパシティーユニット (RCU) と 1000 書き込みキャパシティーユニット (WCU) の厳密なパーティション制限があります。抑制による `sync` 障害を回避するには、読み取り操作のスループットを 3000 RCU 未満に、書き込み操作のスループットを 1000 WCU 未満に制限することをお勧めします。カスタムのスループットキャパシティー制限を設定する手順については、「[整合性のあるビューを設定する](emrfs-configure-consistent-view.md)」を参照してください。

DynamoDB コンソールで EMRFS のメタデータの Amazon CloudWatch メトリクスを表示することもできます。ここでは、抑制された読み取りリクエストと書き込みリクエストの数を確認できます。調整されたリクエストの数がゼロ以外の場合、アプリケーションは、読み取りまたは書き込み操作に割り当てられるスループット容量を増やすことで、メリットが得られる可能性があります。長時間にわたって読み取りと書き込みに割り当てられた最大のスループット容量に操作が近付いていることが表示された場合も、パフォーマンスのメリットが得られる可能性があります。

**重要な EMRFS 操作のスループット特性**  
読み取りおよび書き込み操作のデフォルト値は、それぞれ 400 スループット容量ユニット、100 スループット容量ユニットです。以下のパフォーマンス特性は、特定の操作に必要なスループットのヒントを示しています。これらのテストは、単一ノードの `m3.large` クラスターを使用して実行されました。すべての操作はシングルスレッドです。パフォーマンスは特定のアプリケーション特性によって大きく異なり、ファイルシステム操作を最適化するには、検証が必要になる場合があります。


| 運用  | 平均の 1 秒あたりの読み取り  | 平均の 1 秒あたりの書き込み  | 
| --- | --- | --- | 
| create（オブジェクト） | 26.79 |  6.70 | 
| delete（オブジェクト） | 10.79 |  10.79 | 
| delete（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（1,000,000 個のオブジェクトを含むディレクトリ） | 882.36 | 0 | 
| mkdir（120 秒間継続）  | 24.18 | 4.03 | 
| mkdir | 12.59 | 0 | 
| rename（オブジェクト） | 19.53 | 4.88 | 
| rename（1000 個のオブジェクトを含むディレクトリ） | 23.22 | 339.34 | 

**メタデータストアから古いデータを消去するステップを送信するには**  
DynamoDB ベースのメタデータの特定エントリを削除することが必要な場合があります。この操作は、テーブルに関連するストレージコストを節約するうえで役立ちます。ユーザーは、EMRFS CLI の `delete` サブコマンドを使用して、特定のエントリを手動またはプログラムで消去することができます。ただし、メタデータからエントリを削除すると、EMRFS は整合性のチェックを行わなくなります。

ジョブ完了後のプログラムによる消去は、EMRFS CLI でコマンドを実行する最終的なステップをクラスターに送信することにより行います。たとえば、クラスターにステップを送信し、2 日前より古いすべてのエントリを削除するには、次のコマンドを入力します。

```
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 値を使用します。

# CloudWatch と Amazon SQS の整合性通知を設定する
<a name="emrfs-configure-sqs-cw"></a>

Amazon S3 の結果整合性の問題に対して、EMRFS で CloudWatch メトリクスと Amazon SQS メッセージを有効にできます。

**CloudWatch**  
CloudWatch メトリクスを有効にすると、Amazon S3 の結果整合性のために `FileSystem` API 呼び出しが失敗するたびに、**Inconsistency** という名前のメトリクスがプッシュされます。

**Amazon S3 の結果整合性の問題の CloudWatch メトリクスを表示するには**

CloudWatch コンソールで **Inconsistency** メトリクスを表示するには、EMRFS のメトリクスを選択し、**[ジョブフロー ID]** と **[メトリクス名]** のペアを選択します。たとえば、`j-162XXXXXXM2CU ListStatus``j-162XXXXXXM2CU GetFileStatus` などです。

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. [**Dashboard**] の [**Metrics**] セクションで、[**EMRFS**] を選択します。

1. [**Job Flow Metrics**] ペインで、1 つ以上の [**JobFlowId**] と [**Metric Name**] のペアを選択します。メトリクスのグラフィカル表示が、次のウィンドウに表示されます。

**Amazon SQS**  
Amazon SQS 通知を有効にすると、EMRFS の初期化時に `EMRFS-Inconsistency-<jobFlowId>` という名前の Amazon SQS キューが作成されます。Amazon S3 の結果整合性のために `FileSystem` API 呼び出しが失敗すると、Amazon SQS メッセージがキューにプッシュされます。このメッセージには、JobFlowId、API、整合性のないパスの一覧、スタックトレースなどの情報が含まれます。メッセージは、Amazon SQS コンソールを使用するか、EMRFS の `read-sqs` コマンドを使用して読み取ることができます。

**Amazon S3 の結果整合性の問題に対する Amazon SQS メッセージを管理するには**

Amazon S3 の結果整合性の問題に関する Amazon SQS メッセージは、EMRFS CLI を使用して読み取ることができます。Amazon SQS EMRFS キューからメッセージを読み取るには、`read-sqs` コマンドを入力し、マスターノードのローカルファイルシステム上の結果の出力ファイルの出力場所を指定します。

`delete-sqs` コマンドを使用して EMRFS の Amazon SQS キューを削除することもできます。

1. Amazon SQS キューからメッセージを読み取るには、次のコマンドを入力します。*queuename* を設定した Amazon SQS キューの名前に、*/path/filename* を出力ファイルのパスに置き換えてください。

   ```
   emrfs read-sqs --queue-name queuename --output-file /path/filename
   ```

   たとえば、デフォルトのキューから Amazon SQS メッセージを読み取って出力するには、次のように入力します。

   ```
   emrfs read-sqs --queue-name EMRFS-Inconsistency-j-162XXXXXXM2CU --output-file /path/filename
   ```
**注記**  
また、`-q` および `-o` の代わりに、それぞれ `--queue-name` および `--output-file` ショートカットを使用することもできます。

1. Amazon SQS キューを削除するには、次のコマンドを入力します。

   ```
   emrfs delete-sqs --queue-name queuename
   ```

   たとえば、デフォルトキューを削除するには、次のように入力します。

   ```
   emrfs delete-sqs --queue-name EMRFS-Inconsistency-j-162XXXXXXM2CU
   ```
**注記**  
`--queue-name` の代わりに `-q` ショートカットを使用することもできます。

# 整合性のあるビューを設定する
<a name="emrfs-configure-consistent-view"></a>

`emrfs-site` プロパティの設定プロパティを使用して、整合性のあるビューに追加の設定を構成できます。たとえば、emrfs-site 設定分類 (Amazon EMR リリースバージョン 4.x 以降のみ)、またはマスターノードに emrfs-site.xml ファイルを設定するブートストラップアクションを使用して、CLI の `--emrfs` オプションに次の引数を指定することで、デフォルトの DynamoDB スループットとして異なる値を選択できます。

**Example クラスター起動時のデフォルトのメタデータの読み取りおよび書き込み値の変更**  

```
aws emr create-cluster --release-label emr-7.12.0 --instance-type m5.xlarge \
--emrfs Consistent=true,Args=[fs.s3.consistent.metadata.read.capacity=600,\
fs.s3.consistent.metadata.write.capacity=300] --ec2-attributes KeyName=myKey
```

別の方法として、次の設定ファイルを使用し、ローカルまたは Amazon S3 に保存します。

```
[
    {
      "Classification": "emrfs-site",
      "Properties": {
        "fs.s3.consistent.metadata.read.capacity": "600",
        "fs.s3.consistent.metadata.write.capacity": "300"
      }
    }
 ]
```

次の構文で作成した設定を使用します。

```
aws emr create-cluster --release-label emr-7.12.0 --applications Name=Hive \
--instance-type m5.xlarge --instance-count 2 --configurations file://./myConfig.json
```

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

以下のオプションは、設定または AWS CLI `--emrfs`引数を使用して設定できます。それらの引数については、「[AWS CLI コマンドリファレンス](https://docs.aws.amazon.com/cli/latest/reference/)」を参照してください。


**整合性のあるビューの `emrfs-site.xml` プロパティ**  

| プロパティ  | デフォルトの値 | 説明  | 
| --- | --- | --- | 
| fs.s3.consistent | false |  **true** に設定すると、このプロパティは DynamoDB を使用して整合性を確保するように EMRFS を設定します。  | 
| fs.s3.consistent.retryPolicyType | exponential | このプロパティは、整合性に関する問題について再試行するときに使用するポリシーを識別します。オプションは、exponential、fixed、または none です。 | 
| fs.s3.consistent.retryPeriodSeconds | 1 | このプロパティは、整合性の再試行間の待機時間を設定します。 | 
| fs.s3.consistent.retryCount | 10 | このプロパティは、不整合が検出されたときの最大の再試行回数を設定します。 | 
| fs.s3.consistent.throwExceptionOnInconsistency | true | このプロパティは、整合性の例外をスローまたは記録するかどうかを決定します。true に設定すると、ConsistencyException がスローされます。 | 
| fs.s3.consistent.metadata.autoCreate | true | true に設定すると、このプロパティはメタデータテーブルの自動作成を有効にします。 | 
| fs.s3.consistent.metadata.etag.verification.enabled | true | Amazon EMR 5.29.0 では、このプロパティはデフォルトで有効になっています。有効にすると、EMRFS は S3 ETags を使用して、読み取られているオブジェクトが利用可能な最新バージョンであることを確認します。この機能は、S3 上のファイルが同じ名前を維持しながら上書きされる、更新後の読み取りのユースケースに役立ちます。この ETag 検証機能は、現在 S3 Select では使用できません。 | 
| fs.s3.consistent.metadata.tableName | EmrFSMetadata | このプロパティは、DynamoDB 内のメタデータテーブルの名前を指定します。 | 
| fs.s3.consistent.metadata.read.capacity | 500 | このプロパティは、メタデータテーブルの作成時に DynamoDB の読み込みキャパシティーをプロビジョニングすることを指定します。 | 
| fs.s3.consistent.metadata.write.capacity | 100 | このプロパティは、メタデータテーブルの作成時に DynamoDB の書き込みキャパシティーをプロビジョニングすることを指定します。 | 
| fs.s3.consistent.fastList | true | true に設定すると、このプロパティは複数のスレッドを使用してディレクトリを一覧表示します (必要な場合)。このプロパティを使用するには、整合性を有効にする必要があります。 | 
| fs.s3.consistent.fastList.prefetchMetadata | false | true に設定すると、このプロパティは 20,000 以上の項目を含むディレクトリに対してメタデータのプリフェッチを有効にします。 | 
| fs.s3.consistent.notification.CloudWatch | false | true に設定すると、Amazon S3 の結果整合性の問題が原因で失敗する FileSystem API 呼び出しに対して CloudWatch メトリクスが有効になります。 | 
| fs.s3.consistent.notification.SQS | false | true に設定すると、結果整合性の通知が Amazon SQS キューにプッシュされます。 | 
| fs.s3.consistent.notification.SQS.queueName | EMRFS-Inconsistency-<jobFlowId> | このプロパティを変更すると、Amazon S3 の結果整合性の問題に関するメッセージに対して、独自の SQS キュー名を指定できます。 | 
| fs.s3.consistent.notification.SQS.customMsg | none | このプロパティでは、Amazon S3 の結果整合性の問題に関する SQS メッセージに含まれるカスタム情報を指定できます。このプロパティに対して値が指定されていない場合、メッセージの対応するフィールドは空になります。 | 
| fs.s3.consistent.dynamodb.endpoint | none | このプロパティを使用して、整合性のあるビューのメタデータにカスタム DynamoDB エンドポイントを指定できます。 | 
| fs.s3.useRequesterPaysHeader | false | true に設定すると、このプロパティは、リクエスト支払いオプションが有効になっているバケットへの Amazon S3 リクエストを許可します。 | 

# EMRFS CLI コマンドリファレンス
<a name="emrfs-cli-reference"></a>

EMRFS CLI は、Amazon EMR リリースバージョン 3.2.1 以降を使用して作成されたすべてのクラスターマスターノードにデフォルトでインストールされます。EMRFS CLI を使用して、整合性のあるビューのメタデータを管理できます。

**注記**  
**emrfs** コマンドは、VT100 ターミナルエミュレーションでのみサポートされます。ただし、他のターミナルエミュレータモードでも動作する場合があります。

## emrfs 最上位コマンド
<a name="emrfs-top-level"></a>

**emrfs** 最上位コマンドは、次の構造をサポートしています。

```
emrfs [describe-metadata | set-metadata-capacity | delete-metadata | create-metadata | \
list-metadata-stores | diff | delete | sync | import ] [options] [arguments]
```

次の表に示すように、[引数] の有無にかかわらず、[options] を指定します。サブコマンド (`describe-metadata`、`set-metadata-capacity` など) に固有の [options] については、以下の各サブコマンドを参照してください。


**emrfs の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-a AWS_ACCESS_KEY_ID \| --access-key AWS_ACCESS_KEY_ID`  |  Amazon S3 にオブジェクトを書き込み、DynamoDB でメタデータストアを作成またはアクセスするために使用する AWS アクセスキー。デフォルトでは、*AWS\$1ACCESS\$1KEY\$1ID* は、クラスターの作成に使用されたアクセスキーに設定されます。  |  いいえ  | 
|  `-s AWS_SECRET_ACCESS_KEY \| --secret-key AWS_SECRET_ACCESS_KEY`  |  Amazon S3 にオブジェクトを書き込み、DynamoDB でメタデータストアを作成またはアクセスするために使用するアクセスキーに関連付けられた AWS シークレットキー。デフォルトでは、*AWS\$1SECRET\$1ACCESS\$1KEY* は、クラスターの作成に使用されたアクセスキーに関連付けられたシークレットキーに設定されます。  |  いいえ  | 
|  `-v \| --verbose`  |  詳細な出力を作成します。  |  いいえ  | 
|  `-h \| --help`  |  `emrfs` コマンドのヘルプメッセージと使用方法の説明を表示します。  |  いいえ  | 

## emrfs describe-metadata サブコマンド
<a name="emrfs-describe-metadata"></a>


**emrfs describe-metadata の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 

**Example emrfs describe-metadata の例**  <a name="emrfs-describe-metadata"></a>
次の例では、デフォルトのメタデータテーブルを記述します。  

```
$ emrfs describe-metadata
EmrFSMetadata
  read-capacity: 400
  write-capacity: 100
  status: ACTIVE
  approximate-item-count (6 hour delay): 12
```

## emrfs set-metadata-capacity サブコマンド
<a name="emrfs-set-metadata-capacity"></a>


**emrfs set-metadata-capacity の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 
|  `-r READ_CAPACITY \| --read-capacity READ_CAPACITY`  |  メタデータテーブルのリクエストされた読み込みスループット容量。*READ\$1CAPACITY* 引数が指定されていない場合、デフォルト値は `400` です。  |  いいえ  | 
|  `-w WRITE_CAPACITY \| --write-capacity WRITE_CAPACITY`  |  メタデータテーブルのリクエストされた書き込みスループット容量。*WRITE\$1CAPACITY* 引数が指定されていない場合、デフォルト値は `100` です。  |  いいえ  | 

**Example emrfs set-metadata-capacity の例**  
次の例では、`600` という名前のメタデータテーブルの読み込みスループット容量を `150`、書き込みスループット容量を `EmrMetadataAlt` に設定します。  

```
$ emrfs set-metadata-capacity --metadata-name EmrMetadataAlt  --read-capacity 600 --write-capacity 150
  read-capacity: 400
  write-capacity: 100
  status: UPDATING
  approximate-item-count (6 hour delay): 0
```

## emrfs delete-metadata サブコマンド
<a name="emrfs-delete-metadata"></a>


**emrfs delete-metadata の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 

**Example emrfs delete-metadata の例**  
次の例では、デフォルトのメタデータテーブルを削除します。  

```
$ emrfs delete-metadata
```

## emrfs create-metadata サブコマンド
<a name="emrfs-create-metadata"></a>


**emrfs create-metadata の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 
|  `-r READ_CAPACITY \| --read-capacity READ_CAPACITY`  |  メタデータテーブルのリクエストされた読み込みスループット容量。*READ\$1CAPACITY* 引数が指定されていない場合、デフォルト値は `400` です。  |  いいえ  | 
|  `-w WRITE_CAPACITY \| --write-capacity WRITE_CAPACITY`  |  メタデータテーブルのリクエストされた書き込みスループット容量。*WRITE\$1CAPACITY* 引数が指定されていない場合、デフォルト値は `100` です。  |  いいえ  | 

**Example emrfs create-metadata の例**  
次の例では、`EmrFSMetadataAlt` という名前のメタデータテーブルを作成します。  

```
$ emrfs create-metadata -m EmrFSMetadataAlt
Creating metadata: EmrFSMetadataAlt
EmrFSMetadataAlt
  read-capacity: 400
  write-capacity: 100
  status: ACTIVE
  approximate-item-count (6 hour delay): 0
```

## emrfs list-metadata-stores サブコマンド
<a name="emrfs-list-metadata-stores"></a>

**emrfs list-metadata-stores** サブコマンドには、[options] がありません。

**Example list-metadata-stores の例**  
次の例では、メタデータテーブルを表示します。  

```
$ emrfs list-metadata-stores
  EmrFSMetadata
```

## emrfs diff サブコマンド
<a name="emrfs-diff"></a>


**emrfs diff の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 
|  *s3://s3Path*  |  メタデータテーブルと比較する Amazon S3 バケットへのパス。バケットは再帰的に同期されます。  |  はい  | 

**Example emrfs diff の例**  
次の例では、デフォルトのメタデータテーブルを Amazon S3 バケットと比較します。  

```
$ emrfs diff s3://elasticmapreduce/samples/cloudfront
BOTH | MANIFEST ONLY | S3 ONLY
DIR elasticmapreduce/samples/cloudfront
DIR elasticmapreduce/samples/cloudfront/code/
DIR elasticmapreduce/samples/cloudfront/input/
DIR elasticmapreduce/samples/cloudfront/logprocessor.jar
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-14.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-15.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-16.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-17.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-18.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-19.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-20.WxYz1234
DIR elasticmapreduce/samples/cloudfront/code/cloudfront-loganalyzer.tgz
```

## emrfs delete サブコマンド
<a name="emrfs-delete"></a>


**emrfs delete の [Options]**  

|  オプション  |  説明  |  必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 
|  *s3://s3Path*  |  整合性のあるビューのために追跡する Amazon S3 バケットへのパス。バケットは再帰的に同期されます。  |  はい  | 
| -t TIME \$1 --time TIME |  有効期限（時間単位引数を使用して解釈されます）。指定されたバケットの *TIME* 引数より古いすべてのメタデータエントリが削除されます。  |  | 
|  `-u UNIT \| --time-unit UNIT`  |  時間の引数（ナノ秒、マイクロ秒、ミリ秒、秒、分、時間、日数）を解釈するために使用される基準。引数が指定されていない場合、デフォルト値は `days` です。  |  | 
|  `--read-consumption READ_CONSUMPTION`  |  **delete** オペレーションに使用される、リクエストされた利用可能な読み取りスループットの量。*READ\$1CONSUMPTION* 引数が指定されていない場合、デフォルト値は `400` です。  |  いいえ   | 
|  `--write-consumption WRITE_CONSUMPTION`  |  **delete** オペレーションに使用される、リクエストされた利用可能な書き込みスループットの量。*WRITE\$1CONSUMPTION* 引数が指定されていない場合、デフォルト値は `100` です。  |  いいえ  | 

**Example emrfs delete の例**  
次の例では、整合性のあるビューの追跡メタデータから Amazon S3 バケットのすべてのオブジェクトを削除します。  

```
$ emrfs delete s3://elasticmapreduce/samples/cloudfront
entries deleted: 11
```

## emrfs import サブコマンド
<a name="emrfs-import"></a>


**emrfs import の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 
|  *s3://s3Path*  |  整合性のあるビューのために追跡する Amazon S3 バケットへのパス。バケットは再帰的に同期されます。  |  はい  | 
|  `--read-consumption READ_CONSUMPTION`  |  **delete** オペレーションに使用される、リクエストされた利用可能な読み取りスループットの量。*READ\$1CONSUMPTION* 引数が指定されていない場合、デフォルト値は `400` です。  |  いいえ  | 
|  `--write-consumption WRITE_CONSUMPTION`  |  **delete** オペレーションに使用される、リクエストされた利用可能な書き込みスループットの量。*WRITE\$1CONSUMPTION* 引数が指定されていない場合、デフォルト値は `100` です。  |  いいえ  | 

**Example emrfs import の例**  
次の例では、Amazon S3 バケット内のすべてのオブジェクトを、整合性のあるビューの追跡メタデータとともにインポートします。不明なキーはすべて無視されます。  

```
$ emrfs import s3://elasticmapreduce/samples/cloudfront
```

## emrfs sync サブコマンド
<a name="emrfs-sync"></a>


**emrfs sync の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME* は DynamoDB メタデータテーブルの名前です。*METADATA\$1NAME* 引数が指定されていない場合、デフォルト値は `EmrFSMetadata` です。  |  いいえ  | 
|  *s3://s3Path*  |  整合性のあるビューのために追跡する Amazon S3 バケットへのパス。バケットは再帰的に同期されます。  |  はい  | 
|  `--read-consumption READ_CONSUMPTION`  |  **delete** オペレーションに使用される、リクエストされた利用可能な読み取りスループットの量。*READ\$1CONSUMPTION* 引数が指定されていない場合、デフォルト値は `400` です。  |  いいえ  | 
|  `--write-consumption WRITE_CONSUMPTION`  |  **delete** オペレーションに使用される、リクエストされた利用可能な書き込みスループットの量。*WRITE\$1CONSUMPTION* 引数が指定されていない場合、デフォルト値は `100` です。  |  いいえ  | 

**Example emrfs sync command の例**  
次の例では、Amazon S3 バケット内のすべてのオブジェクトを、整合性のあるビューの追跡メタデータとともにインポートします。不明なキーがすべて削除されます。  

```
$ emrfs sync s3://elasticmapreduce/samples/cloudfront
Synching samples/cloudfront                                       0 added | 0 updated | 0 removed | 0 unchanged
Synching samples/cloudfront/code/                                 1 added | 0 updated | 0 removed | 0 unchanged
Synching samples/cloudfront/                                      2 added | 0 updated | 0 removed | 0 unchanged
Synching samples/cloudfront/input/                                9 added | 0 updated | 0 removed | 0 unchanged
Done synching s3://elasticmapreduce/samples/cloudfront            9 added | 0 updated | 1 removed | 0 unchanged
creating 3 folder key(s)
folders written: 3
```

## emrfs read-sqs サブコマンド
<a name="emrfs-read-sqs"></a>


**emrfs read-sqs の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-q QUEUE_NAME \| --queue-name QUEUE_NAME`  |  *QUEUE\$1NAME* は、`emrfs-site.xml` で設定した Amazon SQS キューの名前です。デフォルト値は **EMRFS-Inconsistency-<jobFlowId>** です。  |  はい  | 
|  `-o OUTPUT_FILE \| --output-file OUTPUT_FILE`  |  *OUTPUT\$1FILE* は、マスターノードのローカルファイルシステムにある出力ファイルへのパスです。キューから読み取ったメッセージはこのファイルに書き込まれます。  |  はい  | 

## emrfs delete-sqs サブコマンド
<a name="emrfs-delete-sqs"></a>


**emrfs delete-sqs の [Options]**  

| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
|  `-q QUEUE_NAME \| --queue-name QUEUE_NAME`  |  *QUEUE\$1NAME* は、`emrfs-site.xml` で設定した Amazon SQS キューの名前です。デフォルト値は **EMRFS-Inconsistency-<jobFlowId>** です。  |  はい  | 

## ステップとして EMRFS CLI コマンドを送信する
<a name="emrfs-submit-steps-as-cli"></a>

次の例は、 AWS CLI または API と を活用してマスターノードで `emrfs`ユーティリティを使用し`command-runner.jar`、`emrfs`コマンドをステップとして実行する方法を示しています。この例では、 を使用してクラスターにステップ AWS SDK for Python (Boto3) を追加し、Amazon S3 バケット内のオブジェクトをデフォルトの EMRFS メタデータテーブルに追加します。

```
import boto3
from botocore.exceptions import ClientError


def add_emrfs_step(command, bucket_url, cluster_id, emr_client):
    """
    Add an EMRFS command as a job flow step to an existing cluster.

    :param command: The EMRFS command to run.
    :param bucket_url: The URL of a bucket that contains tracking metadata.
    :param cluster_id: The ID of the cluster to update.
    :param emr_client: The Boto3 Amazon EMR client object.
    :return: The ID of the added job flow step. Status can be tracked by calling
             the emr_client.describe_step() function.
    """
    job_flow_step = {
        "Name": "Example EMRFS Command Step",
        "ActionOnFailure": "CONTINUE",
        "HadoopJarStep": {
            "Jar": "command-runner.jar",
            "Args": ["/usr/bin/emrfs", command, bucket_url],
        },
    }

    try:
        response = emr_client.add_job_flow_steps(
            JobFlowId=cluster_id, Steps=[job_flow_step]
        )
        step_id = response["StepIds"][0]
        print(f"Added step {step_id} to cluster {cluster_id}.")
    except ClientError:
        print(f"Couldn't add a step to cluster {cluster_id}.")
        raise
    else:
        return step_id


def usage_demo():
    emr_client = boto3.client("emr")
    # Assumes the first waiting cluster has EMRFS enabled and has created metadata
    # with the default name of 'EmrFSMetadata'.
    cluster = emr_client.list_clusters(ClusterStates=["WAITING"])["Clusters"][0]
    add_emrfs_step(
        "sync", "s3://elasticmapreduce/samples/cloudfront", cluster["Id"], emr_client
    )


if __name__ == "__main__":
    usage_demo()
```

返された `step_id` 値を使用して、ログで操作の結果を確認できます。