

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# EMRFS CLI 명령 참조
<a name="emrfs-cli-reference"></a>

EMRFS CLI는 Amazon EMR 릴리스 버전 3.2.1 이상을 사용하여 생성된 모든 클러스터 프라이머리 노드에 기본적으로 설치됩니다. EMRFS CLI를 사용하여 일관성 보기에 대한 메타데이터를 관리할 수 있습니다.

**참고**  
**emrfs** 명령은 VT100 터미널 에뮬레이션에만 지원됩니다. 하지만 다른 터미널 에뮬레이터 모드에서 작동할 수도 있습니다.

## emrfs top-level 명령
<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]
```

다음 표의 설명에 따라 [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`  |  시간 인수를 해석하는 데 사용되는 단위(nanoseconds, microseconds, milliseconds, seconds, minutes, hours 또는 days)입니다. 인수를 지정하지 않을 경우 기본값은 `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 명령 예제**  
다음 예제에서는 일관된 보기에 대해 추적 중인 메타데이터와 함께 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` 값을 사용하여 로그에서 작업 결과를 확인할 수 있습니다.