Cloud Data Fusion 문제 해결

이 페이지에서는 Cloud Data Fusion 문제를 해결하는 방법을 설명합니다.

일괄 파이프라인 문제 해결

다음은 일괄 파이프라인에 대한 조언입니다.

동시 파이프라인이 중단됨

Cloud Data Fusion에서 많은 동시 일괄 파이프라인을 실행하면 인스턴스에 부담을 가중시켜 작업이 Starting, Provisioning, Running 상태로 중단될 수 있습니다. 따라서 웹 인터페이스 또는 API 호출을 통해 파이프라인을 중지할 수 없습니다. 많은 파이프라인을 동시에 실행하면 웹 인터페이스가 느려지거나 응답하지 않을 수 있습니다. 이 문제는 백엔드의 HTTP 핸들러에 대한 여러 UI 요청으로 인해 발생합니다.

권장사항

이 문제를 해결하려면 버전 6.6 이상에서 실행되는 인스턴스에서 사용할 수 있는 Cloud Data Fusion 흐름 제어를 사용하여 새 요청 수를 제어합니다.

파이프라인 실행 중 SSH 연결 타임아웃

일괄 파이프라인을 실행할 때 다음 오류가 발생합니다.

`java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)`

권장사항

오류를 해결하려면 다음 문제를 확인합니다.

  • 누락된 방화벽 규칙(일반적으로 포트 22)이 있는지 확인합니다. 새 방화벽 규칙을 만들려면 Dataproc 클러스터 네트워크 구성을 참조하세요.
  • Compute Engine Enforcer가 Cloud Data Fusion 인스턴스와 Dataproc 클러스터 간의 연결을 허용하는지 확인합니다.

응답 코드: 401. 오류: 알 수 없는 오류입니다.

일괄 파이프라인을 실행할 때 다음 오류가 발생합니다.

`java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error`

권장사항

이 오류를 해결하려면 Dataproc에서 사용하는 서비스 계정에 Cloud Data Fusion 실행자 역할(roles/datafusion.runner)을 부여해야 합니다.

BigQuery 플러그인이 설치된 파이프라인이 Access Denied 오류와 함께 실패

BigQuery 작업을 실행할 때 파이프라인이 Access Denied 오류로 실패하는 알려진 문제가 있습니다. 이는 다음 플러그인을 사용하는 파이프라인에 영향을 줍니다.

  • BigQuery 소스
  • BigQuery 싱크
  • BigQuery 다중 테이블 싱크
  • 변환 푸시다운

로그 오류 예시는 다음과 같습니다(사용 중인 플러그인에 따라 다를 수 있음).

POST https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Access Denied: Project xxxx: User does not have bigquery.jobs.create permission in project PROJECT_ID",
"reason" : "accessDenied"
} ],
"message" : "Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.",
"status" : "PERMISSION_DENIED"
}

이 예시에서 PROJECT_ID는 플러그인에 지정한 프로젝트 ID입니다. 플러그인에 지정된 프로젝트의 서비스 계정에 다음 중 하나 이상을 수행할 수 있는 권한이 없습니다.

  • BigQuery 작업 실행
  • BigQuery 데이터 세트 읽기
  • 임시 버킷 만들기
  • BigQuery 데이터세트 만들기
  • BigQuery 테이블 만들기

권장사항

이 문제를 해결하려면 플러그인에 지정한 프로젝트(PROJECT_ID)에 누락된 역할을 부여합니다.

  • BigQuery 작업을 실행하려면 BigQuery 작업 사용자 역할(roles/bigquery.jobUser)을 부여합니다.

  • BigQuery 데이터 세트를 읽으려면 BigQuery 데이터 뷰어 역할(roles/bigquery.dataViewer)을 부여합니다.

  • 임시 버킷을 만들려면 스토리지 관리자 역할(roles/storage.admin)을 부여합니다.

  • BigQuery 데이터 세트나 테이블을 만들려면 BigQuery 데이터 편집자 역할(roles/bigquery.dataEditor)을 부여합니다.

자세한 내용은 플러그인 문제 해결 문서(Google BigQuery 멀티 테이블 싱크 문제 해결)를 참조하세요.

파이프라인이 오류 임곗값에서 중지되지 않음

오류 임곗값을 1로 설정하더라도 여러 오류가 발생한 후 파이프라인이 중지되지 않을 수 있습니다.

오류 임곗값은 달리 처리되지 않는 오류가 발생했을 때 지시문에서 발생한 예외를 대상으로 합니다. 지시문에 이미 emitError API가 사용된 경우 오류 임곗값이 활성화되지 않습니다.

권장사항

특정 임곗값이 충족되지 않을 때 실패하는 파이프라인을 설계하려면 FAIL 지시문을 사용합니다.

FAIL 지시문에 전달되는 조건이 충족될 때마다 오류 임곗값으로 계산되고 임곗값에 도달한 후 파이프라인이 실패합니다.

Oracle Batch Source 플러그인에서 NUMBERstring으로 변환

Oracle Batch Source 버전 1.9.0, 1.8.3 이하에서는 정의되지 않은 정밀도와 소수 자릿수를 사용하는 Oracle NUMBER 데이터 유형이 CDAP decimal(38,0) 데이터 유형에 매핑됩니다.

플러그인 버전 1.9.1, 1.8.4, 1.8.5는 이전 버전과 호환되지 않으며, 파이프라인의 다운스트림 단계에서 소스의 출력 스키마를 사용하는 경우 출력 스키마가 변경되었기 때문에 이전 버전을 사용하는 파이프라인이 버전 1.9.1, 1.8.5, 1.8.4로 업그레이드한 후에 작동하지 않을 수 있습니다. 이전 플러그인 버전의 정밀도 및 소수 자릿수 없이 정의된 Oracle NUMBER 데이터 유형에 대해 정의된 출력 스키마가 있는 경우 버전 1.9.1, 1.8.5 또는 1.8.4로 업그레이드한 후 Oracle Batch Source 플러그인에서 해당 유형에 대해 다음과 같은 스키마 불일치 오류를 반환합니다. Schema field '<field name>' is expected to have type 'decimal with precision <precision> and scale <scale> but found 'string'. Change the data type of field <field name> to string.

버전 1.9.1, 1.8.5, 1.8.4는 정밀도와 소수 자릿수 없이 정의된 Oracle NUMBER 데이터 유형에 대한 CDAP string 데이터 유형의 출력 스키마와 함께 작동합니다. Oracle 소스 출력 스키마에 정밀도와 소수 자릿수 없이 정의된 Oracle NUMBER 데이터 유형이 있는 경우 반올림 오류가 발생할 수 있으므로 이전 버전의 Oracle 플러그인은 사용하지 않는 것이 좋습니다.

데이터베이스 이름, 스키마 이름 또는 테이블 이름에 매크로를 사용하는 경우와 출력 스키마를 수동으로 지정하지 않은 경우는 특별한 경우로서 런타임 시 스키마가 감지되고 매핑됩니다. 이전 버전의 Oracle Batch Source 플러그인은 정밀도 및 소수 자릿수 없이 정의된 Oracle NUMBER 데이터 유형을 CDAP decimal(38,0) 데이터 유형으로 매핑하는 반면 버전 1.9.1, 1.8.5, 1.8.4 이상에서는 런타임 시 데이터 유형을 string에 매핑합니다.

권장사항

정밀도 및 소수 자릿수가 정의되지 않은 Oracle NUMBER 데이터 유형으로 작업하는 동안 발생할 수 있는 정밀도 손실 문제를 해결하려면 Oracle Batch Source 플러그인 버전 1.9.1, 1.8.5 또는 1.8.4를 사용하도록 파이프라인을 업그레이드합니다.

업그레이드 후에는 정밀도와 소수 자릿수 없이 정의된 Oracle NUMBER 데이터 유형이 런타임 시 CDAP string 데이터 유형에 매핑됩니다. (정밀도와 소수 자릿수 없이 정의된 Oracle NUMBER 데이터 유형이 매핑된) 원본 CDAP decimal 데이터 유형을 사용하는 다운스트림 단계 또는 싱크가 있는 경우 업데이트하거나 문자열 데이터가 사용됨을 예상합니다.

반올림 오류로 인해 발생할 수 있는 데이터 손실의 위험을 알고 있지만 정밀도 및 소수 자릿수 없이 정의된 Oracle NUMBER 데이터 유형을 CDAP decimal(38,0) 데이터 유형으로 사용할 경우 허브에서 Oracle 플러그인 버전 1.8.6(Cloud Data Fusion 6.7.3의 경우) 또는 1.9.2(Cloud Data Fusion 6.8.1의 경우)를 배포하고 대신 이를 사용하도록 파이프라인을 업데이트합니다.

자세한 내용은 Oracle Batch Source 참조를 확인하세요.

임시 Dataproc 클러스터 삭제

파이프라인 실행 프로비저닝 중에 Cloud Data Fusion이 임시 Dataproc 클러스터를 만들면 파이프라인 실행이 완료된 후 클러스터가 삭제됩니다. 드물지만 클러스터 삭제가 실패합니다.

적극 권장: 최신 Cloud Data Fusion 버전으로 업그레이드하여 적절한 클러스터 유지보수를 수행하세요.

최대 유휴 시간 설정

이 문제를 해결하려면 Max Idle Time 옵션을 구성하세요. 이렇게 하면 파이프라인 완료에 대한 명시적 호출이 실패하더라도 Dataproc이 클러스터를 자동으로 삭제할 수 있습니다.

Max Idle Time은 Cloud Data Fusion 버전 6.4 이상에서 사용할 수 있습니다.

권장: 6.6 이전 버전은 Max Idle Time을 수동으로 30분 이상으로 설정합니다.

수동으로 클러스터 삭제

버전을 업그레이드하지 못하거나 Max Idle Time 옵션을 구성할 수 없는 경우 비활성 클러스터를 수동으로 삭제합니다.

  1. 클러스터가 생성된 각 프로젝트 ID를 가져옵니다.

    1. 파이프라인의 런타임 인수에서 Dataproc 프로젝트 ID가 실행에 맞게 맞춤설정되었는지 확인하세요.

      Dataproc 프로젝트 ID가 실행에 맞춤설정되었는지 확인

    2. Dataproc 프로젝트 ID가 명시적으로 지정되지 않은 경우 사용되는 프로비저닝 도구를 결정한 다음 프로젝트 ID를 확인합니다.

      1. 파이프라인 런타임 인수에서 system.profile.name 값을 확인합니다.

        런타임 인수에서 프로비저닝 도구 이름 가져오기

      2. 프로비저닝 도구 설정을 열고 Dataproc 프로젝트 ID가 설정되었는지 확인합니다. 설정이 없거나 필드가 비어 있으면 Cloud Data Fusion 인스턴스가 실행 중인 프로젝트가 사용됩니다.

  2. 각 프로젝트에 대해 다음을 수행합니다.

    1. Google Cloud Console에서 프로젝트를 열고 Dataproc 클러스터 페이지로 이동합니다.

      클러스터로 이동

    2. 생성된 날짜부터 가장 오래된 것부터 최신 순으로 클러스터를 정렬합니다.

    3. 정보 패널이 숨겨져 있으면 정보 패널 표시를 클릭하고 라벨 탭으로 이동합니다.

    4. 사용 중이지 않은 모든 클러스터(예: 하루 이상 경과)에 Cloud Data Fusion 버전 라벨이 있는지 확인합니다. 이는 Cloud Data Fusion에서 생성되었음을 나타냅니다.

    5. 클러스터 이름 옆에 있는 체크박스를 선택하고 삭제를 클릭합니다.

Cloud Data Fusion 인스턴스를 만들 수 없음

Cloud Data Fusion 인스턴스를 만들 때 다음 문제가 발생할 수 있습니다.

Read access to project PROJECT_NAME was denied.

권장사항

이 문제를 해결하려면 Cloud Data Fusion API를 사용 중지했다가 다시 사용 설정합니다. 그런 다음 인스턴스를 만듭니다.

보조 작업자가 있는 Dataproc 클러스터에서 파이프라인 실행 시 실패

Cloud Data Fusion 버전 6.8 및 6.9에서는 보조 작업자가 사용 설정된 Dataproc 클러스터에서 파이프라인이 실행될 경우 파이프라인이 실패하는 문제가 발생합니다.

ERROR [provisioning-task-2:i.c.c.i.p.t.ProvisioningTask@161] - PROVISION task failed in REQUESTING_CREATE state for program run program_run:default.APP_NAME.UUID.workflow.DataPipelineWorkflow.RUN_ID due to
Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
Caused by: com.google.protobuf.GeneratedMessageV3$Builder.parseUnknownField(Lcom/google/protobuf/CodedInputStream;Lcom/google/protobuf/ExtensionRegistryLite;I)Z.

추천

이 문제를 해결하려면 패치 버전 6.8.3.1, 6.9.2.1 이상으로 업그레이드합니다. 업그레이드할 수 없는 경우 보조 워커 노드를 다음과 같은 방법으로 삭제합니다.

임시 Dataproc 프로비저닝 도구를 사용하는 경우 다음 단계에 따라 오류를 해결합니다.

  1. Cloud Data Fusion 웹 인터페이스에서 파이프라인으로 이동합니다.
  2. 파이프라인 런타임 인수에서 system.profile.properties.secondaryWorkerNumNodes0으로 설정합니다. 런타임 인수를 설정합니다.
  3. 저장을 클릭합니다.
  4. 네임스페이스를 사용하는 경우 네임스페이스에서 보조 작업자를 사용 중지하세요.
    1. 시스템 관리자 > 네임스페이스를 클릭하고 네임스페이스를 선택합니다.
    2. 환경설정 > 수정을 클릭합니다.
    3. system.profile.properties.secondaryWorkerNumNodes의 값을 0으로 설정합니다.네임스페이스에서 보조 작업자를 사용 중지합니다.
    4. 저장 후 닫기를 클릭합니다.

기존 Dataproc 프로비저닝 도구를 사용하는 경우 다음 단계에 따라 오류를 해결합니다.

  1. Google Cloud 콘솔에서 Dataproc 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 클러스터를 선택하고 수정을 클릭합니다.

  3. 보조 워커 노드 필드에 0을 입력합니다.콘솔에서 보조 워커 노드를 수정합니다.

  4. 저장을 클릭합니다.