AWS Glue 크롤러가 실패하고 내부 서비스 예외가 발생하는 이유는 무엇인가요?

6분 분량
0

AWS Glue 크롤러가 ‘ERROR: Internal Service Exception’ 오류와 함께 실패합니다.

해결 방법

크롤러 내부 서비스 예외는 일시적인 문제로 인해 발생할 수 있습니다. 문제 해결을 시작하기 전에 크롤러를 다시 실행합니다. 그래도 내부 서비스 예외가 발생하면 다음과 같은 일반적인 문제가 있는지 확인합니다.

데이터 문제

AWS Glue 크롤러가 대량의 데이터를 처리하도록 구성된 경우 크롤러에 내부 서비스 예외가 발생할 수 있습니다. 해결할 데이터 문제의 원인을 검토합니다.

  • 작은 파일이 많으면 크롤러가 내부 서비스 예외로 인해 실패할 수 있습니다. 이 문제를 방지하려면 S3DistCp 도구를 사용하여 더 작은 파일을 결합합니다. S3DistCp를 사용하면 Amazon EMR 요금이 추가로 발생합니다. 또는 제외 패턴을 설정하고 파일을 반복적으로 크롤링할 수 있습니다. 마지막으로 접두사 내의 모든 파일을 검사하지 않으려면 샘플링을 활성화하는 것이 좋습니다.
  • 크롤러가 24시간 제한 시간 값에 가까워지면 워크플로를 분할하여 메모리 문제를 방지하세요. 자세한 내용은 AWS Glue 크롤러가 장시간 실행되는 이유는 무엇입니까?를 참조하세요.

참고: 데이터 규모 문제를 해결하는 가장 좋은 방법은 처리되는 데이터의 양을 줄이는 것입니다.

Amazon Simple Storage Service(S3) 폴더 구조 불일치

시간이 지나면서 AWS Glue 크롤러는 특정 형식의 데이터를 발견하게 됩니다. 그러나 업스트림 애플리케이션에 일치하지 않는 형식이 있으면 내부 서비스 예외 오류가 발생할 수 있습니다.

데이터 카탈로그의 테이블 파티션 정의와 Amazon S3의 Hive 파티션 구조가 일치하지 않을 수도 있습니다. 이와 같은 차이는 크롤러에 문제가 될 수 있습니다. 예를 들어 크롤러는 객체가 "s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/dd=xx/[files]“로 분할될 것으로 예상할 수 있습니다. 하지만 일부 객체는 "s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/[files]“에 속할 수 있습니다. 이 경우 크롤러는 실패하고 내부 서비스 예외 오류가 발생합니다.

이전에 크롤링한 데이터 위치를 수정하면 증분 크롤링으로 인한 내부 서비스 예외 오류가 발생할 수 있습니다. 이는 다음 조건 중 하나가 충족되기 때문에 발생합니다.

  • 비어 있는 것으로 알려진 Amazon S3 위치가 데이터 파일로 업데이트됨
  • 데이터 파일로 채워진 것으로 알려진 Amazon S3 위치에서 파일이 제거됨

Amazon S3 접두사 구조를 변경하면 이 예외가 트리거됩니다.

S3 데이터 스토어가 변경되었다고 생각되면 현재 크롤러를 삭제하는 것이 가장 좋습니다. 현재 크롤러를 삭제한 후 Crawl all folders(모든 폴더 크롤링) 옵션을 사용하여 동일한 S3 대상에 새 크롤러를 생성합니다.

AWS Key Management Service(AWS KMS) 문제

데이터 스토어가 AWS KMS 암호화로 구성된 경우 다음을 확인하세요.

  • 크롤러의 AWS Identity and Access Management(IAM) 역할에 AWS KMS 키에 액세스하는 데 필요한 권한이 있는지 확인합니다.
  • AWS KMS 키 정책에 의해 권한이 올바르게 위임되고 있는지 확인합니다.
  • AWS KMS 키가 여전히 있고 사용 가능한 상태인지 확인합니다. AWS KMS 키가 삭제 보류 중인 경우 내부 서비스 예외가 트리거됩니다.

자세한 내용은 AWS Glue 콘솔의 보안 구성 관련 작업AWS Glue에서 암호화 설정을 참조하세요.

AWS Glue 데이터 카탈로그 문제

데이터 카탈로그에 열 또는 중첩 구조가 많으면 스키마 크기가 400KB 제한을 초과할 수 있습니다. 데이터 카탈로그와 관련된 예외를 해결하려면 다음을 확인하세요.

  • 열 이름 길이는 255자를 초과할 수 없고 특수 문자를 포함하지 않아야 합니다. 열 요구 사항에 대한 자세한 내용은 을 참조하세요.
  • 길이가 0인 열을 확인합니다. 이는 소스 데이터의 열이 데이터 카탈로그 테이블의 데이터 형식과 일치하지 않는 경우 발생할 수 있습니다.
  • 테이블의 스키마 정의에서 각 열의 Type(유형) 값은 131,072바이트를 초과하지 않아야 합니다. 이 한도를 초과하면 크롤러에 내부 서비스 예외가 발생할 수 있습니다. 자세한 내용은 열 구조를 참조하세요.
  • 형식이 잘못된 데이터를 확인합니다. 예를 들어 열 이름이 정규식 패턴 "[\ u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]"를 따르지 않으면 크롤러가 작동하지 않습니다.
  • 데이터에 ‘(precision, scale)’ 형식의 DECIMAL 열이 포함되어 있는 경우 소수점 자릿수 값이 정밀도 값보다 작거나 같아야 합니다.
  • ‘Unable to create table in Catalog(카탈로그에서 테이블을 생성할 수 없음)’ 또는 ‘Payload size of request exceeded limit(요청의 페이로드 크기가 제한을 초과했음)’ 오류 메시지와 함께 크롤러가 실패할 수 있습니다. 이 경우 테이블 스키마 정의의 크기를 모니터링합니다. 데이터 카탈로그의 테이블에 포함할 수 있는 열 수에는 제한이 없습니다. 하지만 스키마의 전체 크기에는 400KB의 제한이 있습니다. 열 수가 많으면 전체 스키마 크기가 400KB 제한을 초과합니다. 가능한 해결 방법으로는 스키마를 여러 테이블로 나누고 불필요한 열을 제거하는 것이 있습니다. 열 이름을 줄여 메타데이터 크기를 줄이는 것도 고려해 볼 수 있습니다.

Amazon S3 문제

  • Amazon S3 경로에 특수 문자가 포함되어 있지 않은지 확인합니다.
  • 크롤러의 IAM 역할에 Amazon S3 경로에 액세스할 수 있는 권한이 있는지 확인합니다. 자세한 내용은 AWS Glue용 IAM 역할 만들기를 참조하세요.
  • 가능하면 ^, % 및 ~ 같은 특수 ASCII 문자를 데이터에서 제거합니다. 또는 사용자 지정 분류기를 사용하여 데이터를 분류할 수 있습니다.
  • S3 객체에 Standard 스토리지 클래스가 사용되는지 확인합니다. STANDARD 스토리지 클래스로 객체를 복원하려면 아카이브된 객체 복원을 참조하세요.
  • 크롤러 구성의 패턴 포함 및 제외가 S3 버킷 경로와 일치하는지 확인합니다.
  • 암호화된 S3 버킷을 크롤링하는 경우 크롤러의 IAM 역할에 AWS KMS 키에 대한 적절한 권한이 있는지 확인합니다. 자세한 내용은 AWS Glue 콘솔의 보안 구성 관련 작업AWS Glue에서 암호화 설정을 참조하세요.
  • 암호화된 S3 버킷을 크롤링하는 경우 버킷, AWS KMS 키 및 AWS Glue 작업이 동일한 AWS 리전에 있어야 합니다.
  • 크롤링하는 S3 버킷의 요청 속도를 확인합니다. 이 값이 높으면 읽기 병렬화를 위해 접두사를 더 많이 생성하는 것이 좋습니다. 자세한 내용은 모범 사례 설계 패턴: Amazon S3 성능 최적화를 참조하세요.
  • S3 리소스 경로 길이는 700자 미만이어야 합니다.

Amazon DynamoDB 문제

JDBC 문제

  • AWS KMS로 암호화된 JDBC 데이터 소스를 크롤링하는 경우 연결에 사용 중인 서브넷을 확인합니다. 서브넷의 라우팅 테이블에는 AWS KMS 엔드포인트에 대한 경로가 있어야 합니다. 이 경로는 AWS KMS가 지원하는 Virtual Private Cloud(VPC) 엔드포인트 또는 NAT 게이트웨이를 통과할 수 있습니다.
  • 올바른 Include path 구문을 사용하고 있는지 확인합니다. 자세한 내용은 크롤러 정의를 참조하세요.
  • JDBC 데이터 스토어를 크롤링하는 경우 SSL 연결이 올바르게 구성되었는지 확인합니다. SSL 연결을 사용하지 않는 경우 크롤러를 구성할 때 Require SSL connection이 선택되어 있지 않은지 확인합니다.
  • AWS Glue가 연결된 데이터베이스 이름이 크롤러의 Include path에 있는 데이터베이스 이름과 일치하는지 확인합니다. 또한 Include path를 올바르게 입력했는지 확인합니다. 자세한 내용은 패턴 포함 및 제외를 참조하세요.
  • 사용 중인 서브넷이 AWS Glue에서 지원하는 가용 영역에 있는지 확인합니다.
  • 사용 중인 서브넷에 사용 가능한 프라이빗 IP 주소가 충분한지 확인합니다.
  • 내장된 AWS Glue JDBC 드라이버가 JDBC 데이터 소스를 지원하는지 확인합니다.

VPC 엔드포인트를 사용할 때 발생하는 AWS KMS 문제

  • AWS KMS를 사용하는 경우 AWS Glue 크롤러가 AWS KMS에 액세스할 수 있어야 합니다. 액세스 권한을 부여하려면 AWS KMS 엔드포인트를 생성할 때 [프라이빗 DNS 이름 활성화(Enable Private DNS Name)] 옵션을 선택합니다. 그런 다음 AWS Glue와 연결되는 VPC 서브넷 구성에 AWS KMS 엔드포인트를 추가합니다. 자세한 내용은VPC 엔드포인트를 통해 AWS KMS에 연결을 참조하세요.

관련 정보

AWS Glue 콘솔에서 크롤러 작업

크롤러, 작업 및 개발 엔드포인트로 작성된 데이터 암호화

AWS 공식
AWS 공식업데이트됨 일 년 전