View a markdown version of this page

수정된 로그 이해 - AWS Clean Rooms

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

수정된 로그 이해

AWS Clean Rooms 는 내보낸 로그가 멤버 데이터의 내용을 공개하거나 소스 데이터의 테이블 및 스토리지 위치를 식별하지 않도록 내보내기 전에 Spark 로그를 수정합니다.는 로그 레코드를 AWS Clean Rooms 재구성하고 공유하기에 안전한 것으로 알려진 필드만 내보냅니다. 쿼리가 읽은 열의 이름을 포함하여 일부 정보는 의도적으로 보존됩니다.

수정은 멤버를 구분하지 않습니다. 다른 멤버의 정보와 동일한 용어로 자체 쿼리에 대해 내보낸 로그에서 자체 테이블 이름과 쿼리 값이 수정될 것으로 예상합니다. 빈 필드와 자리 표시자 필드는 정상이며 내보내기 문제를 나타내지 않습니다.

내보낸 로그에 포함된 내용

내보낸 로그는 장애 및 성능 문제를 진단하는 데 필요한 정보를 보존합니다.

  • 타이밍 - 작업 및 스테이지 기간, 실행 시간, CPU 시간, 가비지 수집 시간, 역직렬화 및 결과 직렬화 시간, 셔플 대기 시간 및 셔플 쓰기 시간은 모두 정확히 보존됩니다. 타이밍은 성능 분석을 위한 주요 신호입니다.

  • Spark 실행 식별자 및 수 - 작업, 단계, 작업 및 시도 IDs, 파티션 수, 작업 수, 실행기 IDs, 호스트 이름 및 포트.

  • 쿼리 계획 구조 - , HashAggregate SortMergeJoin및와 같은 연산자 이름을 포함한 물리적 계획 트리로Exchange, 계획의 모양과 엔진이 쿼리를 실행하도록 선택한 방법을 확인할 수 있습니다. Spark의 자체 이름이 아닌 연산자 이름은 로 표시됩니다[REDACTED].

  • 소스 열 이름 - 스캔 중인 테이블에서 가져온 열 이름으로, 필터, 조인 및 집계에 사용되는 열을 확인할 수 있습니다. 별칭과 같이 쿼리가 생성하는 이름은 보존되지 않습니다. 자세한 내용은 열 및 테이블 이름 처리 방법 단원을 참조하십시오.

  • 스캔 유형 및 파일 형식 - 스캔 연산자는 일반적으로 읽는 테이블의 이름을 포함합니다. 이름은와 같은 스캔 유형 및 파일 형식만 식별하는 양식으로 대체Scan parquet되므로 데이터를 읽는 방법을 계속 알 수 있습니다. 파일 형식이에서 AWS Clean Rooms 인식하는 형식이 아닌 경우 연산자는 형식이 없는 Scan 로 표시됩니다.

  • 오류 클래스 - 쿼리가 실패하면 로그는 오류를 일으킨 데이터가 아닌 오류 유형을 식별합니다. Spark의 오류 클래스, SQLSTATE 코드 및 Spark가 해당 클래스에 대해 정의하는 표준 메시지를 보고하고 메시지 <placeholder> 토큰을 채우는 값은 데이터에서 오는 것이므로 메시지 토큰은 채워지지 않은 상태로 둡니다. 예를 들어 실패한 캐스트는 값을 표시하지 않고 한 유형의 값을 다른 유형으로 캐스트할 수 없음을 설명하는 메시지[CAST_INVALID_INPUT]와를 보고합니다. 한 장애로 인해 다른 장애가 발생하면 체인의 오류 클래스가 최대 몇 수준 깊이까지 함께 보고됩니다. Spark에서 시작되지 않은 실패는 클래스 없이 비스파크 오류로만 보고됩니다.

    개별 작업 실패는와 같은 종류의 실패만 보고합니다ExceptionFailure. 자체 오류 클래스는 포함하지 않습니다.

  • Spark 구성 - 값이 항상 숫자, 크기 또는 고정된 키워드이고 성능 문제를 진단하는 데 가장 자주 필요한 설정: 드라이버 및 실행기 코어 및 메모리, 메모리 분할 및 오프 힙 설정, 동적 할당 설정, 적응형 쿼리 실행 설정, 기본 병렬 처리 및 셔플 파티션 수, 브로드캐스트 조인 임계값, 최대 파티션 크기, 셔플 압축 설정, 스케줄러 모드 및 직렬 변환기. 설정에 경로, 식별자 및 쿼리 텍스트가 포함될 수 있으므로 대부분의 다른 구성이 수정됩니다. 값이 일반 숫자, 크기 또는 키워드가 아닌 경우에도 이러한 설정 중 하나가 생략됩니다.

  • 메모리 사용률 및 데이터 볼륨 - 최대 실행 메모리, 메모리 및 디스크 유출, 실행기 JVM 메모리, 캐시된 데이터 크기, 셔플 블록 수, 셔플 읽기 및 쓰기 볼륨을 포함하여 읽거나 쓴 바이트 및 레코드 수. 이러한 수치는 정확하지 않게 내림됩니다. 자세한 내용은 수정된 로그와 표준 Spark 로그의 차이점 단원을 참조하십시오.

  • 실행기가 중지된 이유 - 메모리 부족, 드라이버에 의한 종료, 폐기 또는 응답 실패와 같이 중지된 각 실행기의 범주입니다. 이는 종종 쿼리가 실패한 이유를 설명하는 가장 빠른 방법입니다. 또한 로그는 Spark가 예약 작업을 중지한 실행기 또는 호스트를 기록합니다. 이는 장애가 한 곳에서 계속 반복될 때 유용합니다. 자세한 내용은 수정된 로그와 표준 Spark 로그의 차이점 단원을 참조하십시오.

  • 셔플 가져오기 실패 세부 정보 - 작업이 셔플 출력을 가져올 수 없는 경우 가져오기를 시도한 실행기 및 호스트와 함께 셔플, 맵, 맵 인덱스 및 감소 식별자가 보존됩니다. 이를 통해 일반적으로 응답하지 않는 실행기를 나타내는 단일 소스와 일반적으로 일시적인 네트워크 문제를 나타내는 여러 소스에 분산된 장애를 구별할 수 있습니다.

수정 사항

  • 데이터 값 - 쿼리의 리터럴 값과 테이블의 데이터 값입니다. 필터 조건자는 필터링된 열을 표시하지만 비교된 값은 표시하지 않습니다.

  • 테이블 이름 및 스토리지 위치 - 테이블 식별자, 데이터베이스 이름 및 Amazon S3 경로.

  • 쿼리 텍스트 - SQL 문 및 쿼리와 관련된 모든 설명입니다.

  • 오류 메시지 텍스트 및 스택 추적 - 오류 메시지가 오류를 일으킨 값을 인용할 수 있으므로 메시지 텍스트 및 스택 추적이 제거됩니다. 사용자 정의 함수에서 발생하는 예외에는 쿼리 작성자가 선택한 이름이 포함되므로 기본 예외 클래스의 이름도 수정됩니다. 대신 쿼리 및 작업에 대해 Spark 오류 클래스가 보존됩니다. 단계가 실패한 이유와 작업이 종료된 이유도 수정됩니다.

  • Spark가 자체 작업을 위해 기록하는 이름 - 스테이지 및 캐시된 데이터 세트의 이름 및 호출 사이트와 애플리케이션 이름입니다. 테이블 이름 또는 스토리지 경로를 에코할 수 있는 자유 텍스트 필드입니다. 따라서 Spark 기록 서버에서는 일반적으로 단계를 식별하는 설명 없이 단계가 표시되며, 대신 해당 ID와 계획의 위치를 기준으로 단계를 찾습니다.

  • 계산 및 별칭이 지정된 열 이름 - 쿼리 엔진이 표현식에서 이러한 이름을 생성하고 이름에 값이 포함될 수 있으므로 쿼리가 테이블에서 읽지 않고 생성하는 이름입니다. 이는와 같은 숫자 식별자로 표시됩니다#42. 자세한 내용은 열 및 테이블 이름 처리 방법 단원을 참조하십시오.

  • 스캔 세부 정보 - 읽기 스키마, 각 스캔에 적용된 필터 조건자(푸시다운 필터, 파티션 필터 및 데이터 필터), 데이터 위치입니다.

  • 드라이버 및 실행기 로그에 대한 링크 - Spark가 각 실행기 및 드라이버에 대해 기록하는 로그 URLs입니다. Spark 기록 서버에서는 일반적으로 드라이버 또는 실행기 로그를 여는 링크가 채워지지 않습니다.

  • 리소스 식별자 및 서비스 엔드포인트 - AWS 계정 IDs, IAM 역할 및 AWS KMS 키와 같은 ARNs, 쿼리 실행을 위해가 AWS Clean Rooms 호출하는 서비스의 엔드포인트 URLs.

  • AWS 서비스 세부 정보 - AWS Clean Rooms 클래스 이름, 클래스 경로 항목, JVM 구성, 하둡 및 시스템 속성. Spark 기록 서버가 작업을 속한 쿼리 실행과 연결하기 위해 필요한 식별자를 제외하고 작업 속성도 수정됩니다.

열 및 테이블 이름 처리 방법

내보낸 로그는 쿼리가 읽는 열의 이름을 유지합니다. 쿼리에서 생성된 테이블 이름과 열 별칭이 수정됩니다. 쿼리가 생성하는 이름은 이름이 지정된 표현식에서 생성되며 생성된 이름에는 쿼리의 값이 포함될 수 있습니다.는 라는 열을 SELECT 'confidential' 생성합니다confidential. 따라서 이름은 스캔한 테이블의 열로 역추적할 수 있는 경우에만 나타납니다. 다른 모든 이름은 숫자 식별자로 대체됩니다.

예를 들어 다음 쿼리를 생각해 보겠습니다.

SELECT user_id, SUM(amount) AS total FROM sales WHERE region = 'us-west' GROUP BY user_id

내보낸 로그는 다음과 같이 이를 나타냅니다.

쿼리의 요소 내보낸 로그에서
user_id, amount및 열 region 이름으로 표시되므로 쿼리가 그룹화, 합산 및 필터링된 대상을 확인할 수 있습니다.
테이블 sales, 데이터베이스 및 스토리지 위치 존재하지 않음
값 'us-west' 로 대체됨 [REDACTED]
별칭 total 쿼리가 테이블에서 이름을 읽지 않고 이름을 생성했기 때문에 숫자 식별자로 대체되었습니다.

수정된 로그와 표준 Spark 로그의 차이점

행 수와 데이터 볼륨은 근사치입니다.

레코드 수, 바이트 볼륨, 유출 크기 및 최대 메모리 측정값은 한 자릿수로 내림됩니다. 정확한 수는 다른 멤버의 데이터 크기를 나타낼 수 있기 때문입니다. 1,342개의 레코드를 읽는 작업은 1,000개를 보고합니다. 100 미만의 측정값은 0으로 보고됩니다.

모든 그림이 반내림되므로 100을 보고하는 작업과 1,000을 보고하는 작업은 거의 동일한 수의 레코드를 읽었을 수 있습니다. 10,000,000에 대해 1,000과 같이 크기가 한 자릿수만 다른 수치는 주의하여 취급하십시오. 10,000,000과 비교하여 더 큰 차이는 여전히 안정적으로 왜곡을 나타냅니다.

수정된 값은 둘 이상의 형식을 취합니다.

쿼리 계획에서 수정된 값은 리터럴 텍스트 로 표시됩니다[REDACTED]. 로그의 다른 위치에서는 일반적으로 수정된 필드가 비어 있습니다. Spark 기록 서버가 레코드를 읽을 수 있도록 빈 문자열, 빈 목록 또는 전혀 없는 값일 수 있습니다. 두 형식 모두 동일한 것을 의미합니다.

쿼리 계획은 익숙한 연산자 구문을 사용하지 않습니다.

계획의 표현식은 수학 표기법이 아닌 함수 호출로 작성됩니다. 비교는 EqualTo(#12, [REDACTED]) 대신 로 표시됩니다(a = 5). 함수 이름도이 형식으로 표시되며 사용자 정의 함수 이름은 전혀 표시되지 않습니다.

물리적 계획만 포함됩니다.

내보낸 로그에는 물리적 계획이 포함됩니다. 일반적으로 함께 제공되는 구문 분석, 분석 또는 최적화된 논리적 계획은 포함되지 않습니다.

작업당 지표가 수정됨

계획 그래프에는 출력 행 수와 같이 각 연산자가 보고하는 지표가 나열됩니다. 개별 작업이 보고하는 지표는 작업당 그림이 제거되므로 값을 전혀 표시하지 않습니다. 작업 수준 번호의 경우 단계 보기에서 작업당 지표를 대신 사용합니다.

Spark 드라이버 지표는 내림됩니다.

Spark가 브로드캐스트, 스캔 및 쓰기에 대한 지표를 포함하여 드라이버에서 계산하는 지표는 값을 보고하지만 레코드 수와 데이터 볼륨이 정확한 수치로 다른 멤버의 데이터 크기를 나타낼 수 있다는 동일한 이유로 10배로 내림됩니다.

이벤트 로그만 내보냅니다.

내보내기에는 Spark 이벤트 로그가 포함됩니다. Spark가 함께 작성하는 자유 형식 드라이버 및 실행기 출력은 포함되지 않습니다. 해당 출력의 한 줄에 테이블 이름, 스토리지 경로 또는 데이터 값이 포함될 수 있기 때문입니다. 진단은 이벤트 로그에서 수행해야 합니다.

실행기 실패에 일반 오류 메시지 표시

실행기가 중지된 자유 형식 이유에 AWS Clean Rooms 서비스 세부 정보가 포함될 수 있으므로 로그는 메모리 out-of-memory 종료, 드라이버가 시작한 종료, 폐기된 실행기 또는 손실된 프로세스와 같은 일반 오류 메시지를 대신 보고합니다. 이 레코드는에 고유 AWS Clean Rooms 하며 표준 Spark 이벤트가 아니므로 Spark 기록 서버 및 기타 도구가 이를 표시하지 않을 수 있습니다. 표시되지 않으면 내보낸 이벤트 로그 파일에서 찾을 수 있습니다.

인식할 수 없는 레코드는 기본적으로 수정됩니다.

가 AWS Clean Rooms 인식하는 로그 레코드가 아닌 경우 필드 이름을 [REDACTED]포함하여 모든 텍스트가 로 바뀌고 모든 숫자가 0으로 바뀝니다. 레코드 유형만 보존됩니다. 이러한 레코드에는 진단 정보가 없습니다.