

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

# 작업 재시도 정책 사용
<a name="jobruns-using-retry-policies"></a>

Amazon EMR on EKS 버전 6.9.0 이상에서 작업 실행에 대한 재시도 정책을 설정할 수 있습니다. 재시도 정책에 따라 작업 드라이버 포드가 실패하거나 삭제된 경우 자동으로 다시 시작됩니다. 이를 통해 장기 실행 Spark 스트리밍 작업의 실패에 대한 복원력을 높일 수 있습니다.

## 작업에 대한 재시도 정책 설정
<a name="setting-retry-policy"></a>

재시도 정책을 구성하려면 [StartJobRun](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html) API를 사용하여 `RetryPolicyConfiguration` 필드를 제공합니다. 다음은 `retryPolicyConfiguration` 예제입니다.

```
aws emr-containers start-job-run \
--virtual-cluster-id cluster_id \
--name sample-job-name \
--execution-role-arn execution-role-arn \
--release-label emr-6.9.0-latest \
--job-driver '{
  "sparkSubmitJobDriver": {
    "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py",
    "entryPointArguments": [ "2" ],
    "sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1"
  }
}' \
--retry-policy-configuration '{
    "maxAttempts": 5
  }' \
--configuration-overrides '{
  "monitoringConfiguration": {
    "cloudWatchMonitoringConfiguration": {
      "logGroupName": "my_log_group_name",
      "logStreamNamePrefix": "my_log_stream_prefix"
    },
    "s3MonitoringConfiguration": {
       "logUri": "s3://amzn-s3-demo-logging-bucket"
    }
  }
}'
```

**참고**  
`retryPolicyConfiguration`는 AWS CLI 1.27.68 버전 이상에서만 사용할 수 있습니다. AWS CLI 를 최신 버전으로 업데이트하려면 [의 최신 버전 설치 또는 업데이트를 참조하세요. AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

작업 드라이버 포드가 실패하거나 삭제된 경우 작업 드라이버 포드를 다시 시작할 최대 횟수로 `maxAttempts` 필드를 구성합니다. [Kubernetes 설명서](https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy)에 설명된 대로 두 작업 드라이버 재시도 사이의 실행 간격은 지수 재시도 간격(10초, 20초, 40초 등)이며 최대 6분으로 제한됩니다.

**참고**  
모든 추가 작업 드라이버 실행은 또 다른 작업 실행으로 요금이 청구되며, [Amazon EMR on EKS 요금](https://aws.amazon.com/emr/pricing/#Amazon_EMR_on_Amazon_EKS)이 적용됩니다.

### 재시도 정책 구성 값
<a name="retry-config"></a>
+ **작업의 기본 재시도 정책:** `StartJobRun`에는 기본적으로 최대 시도 횟수가 1로 설정된 재시도 정책이 있습니다. 원하는 대로 재시도 정책을 구성할 수 있습니다.
**참고**  
`retryPolicyConfiguration`의 `maxAttempts`를 1로 설정하면 실패 시 드라이버 포드를 불러오려는 재시도가 수행되지 않습니다.
+ **작업의 재시도 정책 비활성화:** 재시도 정책을 비활성화하려면 retryPolicyConfiguration에서 최대 시도 횟수 값을 1로 설정합니다.

  ```
  "retryPolicyConfiguration": {
      "maxAttempts": 1
  }
  ```
+ **작업의 maxAttempts를 유효한 범위로 설정**: `maxAttempts` 값이 유효한 범위를 벗어나면 `StartJobRun` 직접 호출에 실패합니다. 유효한 `maxAttempts` 범위는 1\$12,147,483,647(32비트 정수)로, Kubernetes의 `backOffLimit` 구성 설정에서 지원하는 범위입니다. 자세한 내용은 Kubernetes 설명서에서 [Pod backoff failure policy](https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy)를 참조하세요. `maxAttempts` 값이 유효하지 않으면 다음 오류 메시지가 반환됩니다.

  ```
  {
   "message": "Retry policy configuration's parameter value of maxAttempts is invalid"
  }
  ```

## 작업의 재시도 정책 상태 검색
<a name="retrieve-policy"></a>

[https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_ListJobRuns.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_ListJobRuns.html) 및 [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DescribeJobRun.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DescribeJobRun.html) API를 사용하여 작업의 재시도 상태를 볼 수 있습니다. 활성화된 재시도 정책 구성으로 작업을 요청하면 `ListJobRun` 및 `DescribeJobRun` 응답의 `RetryPolicyExecution` 필드에 재시도 정책 상태가 포함됩니다. 또한 `DescribeJobRun` 응답에는 작업에 대한 `StartJobRun` 요청에 입력된 `RetryPolicyConfiguration`이 포함됩니다.

**샘플 응답**

------
#### [ ListJobRuns response ]

```
{
  "jobRuns": [
    ...
    ...
    "retryPolicyExecution" : {
      "currentAttemptCount": 2
    }
    ...
    ...
  ]
}
```

------
#### [ DescribeJobRun response ]

```
{
  ...
  ...
  "retryPolicyConfiguration": {
    "maxAttempts": 5
   },
   "retryPolicyExecution" : {
    "currentAttemptCount": 2
  },
  ...
  ...
}
```

------

아래 [재시도 정책 구성 값](#retry-config)의 설명과 같이 작업에서 재시도 정책이 비활성화된 경우 이 필드는 표시되지 않습니다.

## 재시도 정책으로 작업 모니터링
<a name="monitoring-retry"></a>

재시도 정책을 활성화하면 생성된 모든 작업 드라이버에 대해 CloudWatch 이벤트가 생성됩니다. 이러한 이벤트를 구독하려면 다음 명령을 사용하여 CloudWatch 이벤트 규칙을 설정합니다.

```
aws events put-rule \
--name cwe-test \
--event-pattern '{"detail-type": ["EMR Job Run New Driver Attempt"]}'
```

이벤트는 작업 드라이버의 `newDriverPodName`, `newDriverCreatedAt` 타임스탬프, `previousDriverFailureMessage` 및 `currentAttemptCount`에 대한 정보를 반환합니다. 재시도 정책이 비활성화된 경우 이러한 이벤트는 생성되지 않습니다.

CloudWatch 이벤트를 사용하여 작업을 모니터링하는 방법에 대한 자세한 내용은 [Amazon CloudWatch Events를 사용하여 작업 모니터링](monitoring.md#monitoring-cloudwatch-events) 섹션을 참조하세요.

## 드라이버 및 실행기의 로그 찾기
<a name="finding-logs"></a>

드라이버 포드 이름은 `spark-<job id>-driver-<random-suffix>` 형식을 따릅니다. 드라이버가 생성하는 실행기 포드에 동일한 `random-suffix`가 추가됩니다. 이 `random-suffix`를 사용하면 드라이버 및 관련 실행기에 대한 로그를 찾을 수 있습니다. `random-suffix`는 작업에 대해 [재시도 정책이 활성화](#retry-config)된 경우에만 표시되고 그렇지 않으면 `random-suffix`는 표시되지 않습니다.

로깅을 위해 모니터링 구성을 포함하도록 작업을 구성하는 방법에 대한 자세한 내용은 [Spark 애플리케이션 실행](getting-started.md#getting-started-run-spark-app) 섹션을 참조하세요.