

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

# Amazon EMR on EKS에서 Flink 작업에 대한 유지 관리 및 문제 해결
<a name="jobruns-flink-troubleshooting"></a>

다음 섹션에서는 장기 실행 중인 Flink 작업을 유지 관리하는 방법을 개략적으로 살펴보고 자주 발생하는 Flink 관련 문제 몇 가지를 해결하는 방법에 대한 지침을 제공합니다.

# Flink 애플리케이션 유지 관리
<a name="jobruns-flink-maintain"></a>

**Topics**
+ [업그레이드 모드](#jobruns-flink-upgrademode)

Flink 애플리케이션은 일반적으로 몇 주, 몇 달 또는 몇 년 등 장기간 실행되도록 설계되었습니다. 모든 장기 실행 서비스와 마찬가지로 Flink 스트리밍 애플리케이션에도 유지 관리가 필요합니다. 유지 관리는 버그 수정, 개선 및 이후 버전의 Flink 클러스터로의 마이그레이션을 포함합니다.

`FlinkDeployment` 및 `FlinkSessionJob` 리소스에 대한 사양이 변경될 경우 실행 중인 애플리케이션을 업그레이드해야 합니다. 이 작업을 수행하기 위해 운영자는 (이미 일시 중단된 경우를 제외하고) 실행 중인 작업을 중지하고 해당 작업을 최신 사양을 이용해 다시 배포하고, 상태 저장 애플리케이션의 경우에는 이전 실행의 상태를 이용해 다시 배포합니다.

사용자는 상태 저장 애플리케이션이 중지되고 `JobSpec`의 `upgradeMode` 설정을 이용해 복원될 때 상태를 관리하는 방법을 제어합니다.

## 업그레이드 모드
<a name="jobruns-flink-upgrademode"></a>

선택적 도입

**상태 비저장**  
빈 상태에서의 상태 비저장 애플리케이션 업그레이드입니다.

**마지막 상태**  
모든 애플리케이션 상태(실패한 작업 포함)의 간편 업그레이드에서는 항상 가장 최근에 성공한 체크포인트를 사용하기 때문에 정상 작업이 필요하지 않습니다. HA 메타데이터가 손실된 경우에는 수동으로 복구해야 할 수 있습니다. 최신 체크포인트를 선택할 때 작업이 대체될 수 있는 시간을 제한하기 위해 `kubernetes.operator.job.upgrade.last-state.max.allowed.checkpoint.age`를 구성할 수 있습니다. 체크포인트가 구성된 값보다 오래된 경우 정상 작업에 대한 세이브포인트가 대신 사용됩니다. 세션 모드에서는 이 작업이 지원되지 않습니다.

**세이브포인트**  
업그레이드를 위해 세이브포인트를 사용하여 최대한의 안전성과 백업/포크 포인트로 사용될 가능성을 제공합니다. 업그레이드 프로세스가 진행되는 동안 세이브포인트가 생성됩니다. 세이브포인트가 생성되도록 하려면 Flink 작업이 실행 중이어야 합니다. 작업이 비정상 상태인 경우 마지막 체크포인트가 사용됩니다(kubernetes.operator.job.upgrade.last-state-fallback.enabled가 false로 설정된 경우는 제외). 마지막 체크포인트를 사용할 수 없다면 작업 업그레이드가 실패합니다.

# 문제 해결
<a name="jobruns-flink-troubleshoot"></a>

이 섹션에서는 Amazon EMR on EKS의 문제를 해결하는 방법을 설명합니다. Amazon EMR과 관련된 일반적인 문제를 해결하는 방법에 대한 자세한 내용은 *Amazon EMR 관리 안내서*에서 [클러스터 문제 해결](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-troubleshoot.html)을 참조하세요.
+ [PersistentVolumeClaims(PVC)를 사용하는 작업 문제 해결](permissions-for-pvc.md)
+ [Amazon EMR on EKS 수직 자동 조정 문제 해결](troubleshooting-vas.md)
+ [Amazon EMR on EKS Spark 운영자 문제 해결](troubleshooting-sparkop.md)

## Amazon EMR on EKS에서 Apache Flink 문제 해결
<a name="jobruns-flink-troubleshooting-apache-flink"></a>

### 차트 Helm 설치 시 리소스 매핑을 찾을 수 없음
<a name="w2aac21c21b7b7b3"></a>

차트 Helm 설치 시 다음과 같은 오류 메시지가 나타날 수 있다.

```
Error: INSTALLATION FAILED: pulling from host 1234567890.dkr.ecr.us-west-2.amazonaws.com failed with status code [manifests 6.13.0]: 403 Forbidden Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: [resource mapping not found for name: "flink-operator-serving-cert" namespace: "<the namespace to install your operator>" from "": no matches for kind "Certificate" in version "cert-manager.io/v1"

ensure CRDs are installed first, resource mapping not found for name: "flink-operator-selfsigned-issuer" namespace: "<the namespace to install your operator>" " from "": no matches for kind "Issuer" in version "cert-manager.io/v1"

ensure CRDs are installed first].
```

이 오류를 해결하려면 웹후크 구성 요소 추가를 활성화하도록 cert-manager를 설치합니다. 사용하는 각 Amazon EKS 클러스터에 cert-manager를 설치해야 합니다.

```
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0
```

### AWS 서비스 액세스 거부 오류
<a name="jobruns-flink-troubleshooting-access-denied"></a>

*access denied* 오류가 표시되는 경우 차트 Helm `values.yaml` 파일에서 `operatorExecutionRoleArn`에 대한 IAM 역할에 올바른 권한이 있는지 확인합니다. 또한 `FlinkDeployment` 사양에서 `executionRoleArn` 아래 IAM 역할에 올바른 권한이 있는지 확인합니다.

### `FlinkDeployment`가 멈춤
<a name="jobruns-flink-troubleshooting-stuck"></a>

`FlinkDeployment`가 중단된 상태로 멈추면 다음 단계에 따라 배포를 강제로 삭제합니다.

1. 배포 실행을 편집합니다.

   ```
   kubectl edit -n Flink Namespace flinkdeployments/App Name
   ```

1. 이 파이널라이저를 제거합니다.

   ```
   finalizers:
     - flinkdeployments.flink.apache.org/finalizer
   ```

1. 배포를 삭제합니다.

   ```
   kubectl delete -n Flink Namespace flinkdeployments/App Name
   ```

### 옵트인에서 Flink 애플리케이션을 실행할 때 s3a AWSBadRequestException 문제 AWS 리전
<a name="jobruns-flink-troubleshooting-optin-region"></a>

[옵트인 AWS 리전](https://docs.aws.amazon.com/controltower/latest/userguide/opt-in-region-considerations.html)에서 Flink 애플리케이션을 실행하는 경우 다음 오류가 표시될 수 있습니다.

```
Caused by: org.apache.hadoop.fs.s3a.AWSBadRequestException: getFileStatus on 
s3://flink.txt: com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request 
(Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: ABCDEFGHIJKL; S3 Extended Request ID:
ABCDEFGHIJKLMNOP=; Proxy: null), S3 Extended Request ID: ABCDEFGHIJKLMNOP=:400 Bad Request: Bad Request 
(Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: ABCDEFGHIJKL; S3 Extended Request ID: ABCDEFGHIJKLMNOP=; Proxy: null)
```

```
Caused by: org.apache.hadoop.fs.s3a.AWSBadRequestException: getS3Region on flink-application: software.amazon.awssdk.services.s3.model.S3Exception: null 
(Service: S3, Status Code: 400, Request ID: ABCDEFGHIJKLMNOP, Extended Request ID: ABCDEFGHIJKLMNOPQRST==):null: null 
(Service: S3, Status Code: 400, Request ID: ABCDEFGHIJKLMNOP, Extended Request ID: AHl42uDNaTUFOus/5IIVNvSakBcMjMCH7dd37ky0vE6jhABCDEFGHIJKLMNOPQRST==)
```

이러한 오류를 해결하려면 `FlinkDeployment` 정의 파일에서 다음 구성을 사용합니다.

```
spec:
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
    fs.s3a.endpoint.region: OPT_IN_AWS_REGION_NAME
```

또한 SDKv2 자격 증명 제공업체를 사용하는 것이 좋습니다.

```
fs.s3a.aws.credentials.provider: software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider
```

SDKv1 자격 증명 제공업체를 사용하려면 SDK가 옵트인 리전을 지원하는지 확인합니다. 자세한 내용은 [aws-sdk-java GitHub repository](https://github.com/aws/aws-sdk-java)를 참조하세요.

옵트인 리전에서 Flink SQL 문을 실행할 때 `S3 AWSBadRequestException`이 표시되면 Flink 구성 사양에서 `fs.s3a.endpoint.region: OPT_IN_AWS_REGION_NAME` 구성을 설정해야 합니다.

### CN 리전에서 Flink 세션 작업을 실행하는 경우 S3A AWSBadRequestException
<a name="jobruns-flink-troubleshooting-optin-region"></a>

Amazon EMR 릴리스 6.15.0\$17.2.0의 경우 CN 리전에서 Flink 세션 작업을 실행할 때 다음과 같은 오류 메시지가 표시될 수 있습니다. 여기에는 중국(베이징) 및 중국(닝샤)이 포함됩니다.

```
Error:  {"type":"org.apache.flink.kubernetes.operator.exception.ReconciliationException","message":"org.apache.hadoop.fs.s3a.AWSBadRequestException: 
                    getFileStatus on s3://ABCDPath: software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, Extended Request ID: 
                    ABCDEFGH:null: null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, Extended Request ID: ABCDEFGH","additionalMetadata":{},"throwableList":
                    [{"type":"org.apache.hadoop.fs.s3a.AWSBadRequestException","message":"getFileStatus on s3://ABCDPath: software.amazon.awssdk.services.s3.model.S3Exception: 
                    null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, Extended Request ID: ABCDEFGH:null: null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, 
                    Extended Request ID: ABCDEFGH","additionalMetadata":{}},{"type":"software.amazon.awssdk.services.s3.model.S3Exception","message":"null (Service: S3, Status Code: 400, 
                    Request ID: ABCDEFGH, Extended Request ID: ABCDEFGH","additionalMetadata":{}}]}
```

이 문제를 인지하고 있습니다. 팀은 이러한 모든 릴리스 버전에 대해 flink 연산자를 패치하는 작업을 하고 있습니다. 그러나 패치를 완료하기 전에 이 오류를 해결하려면 Flink 연산자 헬름 차트를 다운로드하고, 압축 해제하며(압축된 파일 추출), 헬름 차트에서 구성을 변경해야 합니다.

특정 단계는 다음과 같습니다.

1. 특히 디렉터리를 헬름 차트의 로컬 폴더로 변경하고, 다음 명령줄을 실행하여 헬름 차트를 가져와 압축 해제(추출)합니다.

   ```
   helm pull oci://public.ecr.aws/emr-on-eks/flink-kubernetes-operator \
   --version $VERSION \
   --namespace $NAMESPACE
   ```

   ```
   tar -zxvf flink-kubernetes-operator-$VERSION.tgz
   ```

1. 헬름 차트 폴더로 이동하여 `templates/flink-operator.yaml` 파일을 찾습니다.

1. `flink-operator-config` ConfigMap을 찾아 `flink-conf.yaml`의 다음 `fs.s3a.endpoint.region` 구성을 추가합니다. 예제:

   ```
   {{- if .Values.defaultConfiguration.create }}
   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: flink-operator-config
     namespace: {{ .Release.Namespace }}
     labels:
       {{- include "flink-operator.labels" . | nindent 4 }}
   data:
     flink-conf.yaml: |+
   fs.s3a.endpoint.region: {{ .Values.emrContainers.awsRegion }}
   ```

1. 로컬 헬름 차트를 설치하고 작업을 실행합니다.