독립형 모드에서 Mainframe Connector 실행

이 페이지에서는 Cloud Run에 Mainframe Connector를 설치하고, 데이터를 트랜스코딩하고, BigQuery에 저장하고, BigQuery에서 내보내는 방법을 설명합니다.

Mainframe Connector 버전 5.13.0 이상에서는 Google Cloud에서 Mainframe Connector를 독립형 작업으로 실행할 수 있습니다. 이 기능을 사용하면 Mainframe Connector를 컨테이너화된 일괄 작업(예: Cloud Run 작업, Google Kubernetes Engine 작업 또는 Docker 컨테이너 내)으로 실행할 수 있습니다. 이 옵션을 사용하면 메인프레임에 Mainframe Connector를 로컬로 설치하지 않아도 되며, 메인프레임 큐에 추가된 순차 액세스 메서드(QSAM) 파일 파싱을 기존 추출, 변환, 로드(ETL) 워크플로에 더 쉽게 통합할 수 있습니다.

Mainframe Connector의 독립형 버전을 사용하는 경우 QSAM 파일을 Google Cloud에 로드하는 ETL 워크플로를 직접 설정해야 합니다.

시작하기 전에

  • Cloud Run에 Mainframe Connector를 배포합니다.
  • 서비스 계정을 만들거나 Mainframe Connector에 사용할 기존 서비스 계정을 식별합니다. 이 서비스 계정에는 Cloud Storage 버킷, BigQuery 데이터 세트, 사용하려는 기타 Google Cloud 리소스에 액세스할 수 있는 권한이 있어야 합니다.
  • 만든 서비스 계정에 Cloud Run 호출자 역할이 할당되어 있는지 확인합니다.
  • 메인프레임 데이터를 Google Cloud에서 이미 QSAM 파일로 사용할 수 있는지 확인합니다.

Cloud Run의 독립형 모드에서 Mainframe Connector를 사용하여 데이터 트랜스코딩

독립형 모드에서 Mainframe Connector를 사용하여 데이터를 트랜스코딩하려면 다음 단계를 따르세요.

  1. 데이터 세트를 읽고 ORC 형식으로 트랜스코딩한 후 Cloud Storage에 업로드하는 명령어가 포함된 YAML 파일을 만듭니다. 입력 데이터 세트는 레코드 길이가 고정되었거나 가변적인 QSAM 파일이어야 합니다. 다음 샘플 YAML 파일을 사용하여 데이터 세트를 읽고 ORC 형식으로 트랜스코딩한 후 Cloud Storage에 업로드할 수 있습니다.

    다음 샘플에서는 INFILE 데이터 세트에서 데이터를 읽고 COPYBOOK DD에서 레코드 레이아웃을 읽습니다.

    environmentVariables:
    - name: "INFILE"
      value: <var>"INFILE"</var>
    - name: "INFILE_DSN"
      value: <var>"INFILE_DSN"</var>
    - name: "GCSDSNURI"
      value: <var>"INFILE_DSN_FILEPATH"</var>
    - name: "COPYBOOK"
      value: <var>"COPYBOOK_FILEPATH"</var>
    - name: "LOG_PROJECT"
      value: <var>"LOG_PROJECT"</var>
    - name: "IBM_JAVA_OPTIONS"
      value: "-XX:+UseContainerSupport"
    command:
      gsutil cp gs://outputbucket/output
      --parallelism 8
      --maxChunkSize "512Mib"
      --parser_type=copybook
    

    다음을 바꿉니다.

    • INFILE: 입력 파일의 이름입니다.
    • INFILE_DSN: 입력 데이터 소스 이름(DSN) 파일의 이름입니다.
    • INFILE_DSN_FILEPATH: 입력 DSN 파일의 경로입니다.
    • COPYBOOK_FILEPATH: 카피북 DD의 경로입니다.
    • LOG_PROJECT: 로그 프로젝트의 이름입니다.

    다음은 YAML 파일 예시입니다.

      environmentVariables:
      - name: "INFILE"
        value: "input.dat"
      - name: "INFILE_DSN"
        value: "input.dat"
      - name: "GCSDSNURI"
        value: "gs://inputbucket/inputfolder"
      - name: "COPYBOOK"
        value: "gs://inputbucket/copybook.cpy"
      - name: "LOG_PROJECT"
        value: "the log project"
      - name: "IBM_JAVA_OPTIONS"
        value: "-XX:+UseContainerSupport"
      command:
        gsutil cp gs://outputbucket/output
        --parallelism 8
        --maxChunkSize "512Mib"
        --parser_type=copybook
    

    Mainframe Connector에서 지원하는 환경 변수의 전체 목록은 환경 변수를 참조하세요.

    이 프로세스 중에 실행된 명령어를 로깅하려면 로드 통계를 사용 설정하면 됩니다.

  2. 다음 명령어를 사용하여 job.yaml 파일을 만듭니다.

    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
                command:
                - bash
                - /opt/mainframe-connector/standalone.sh
                - --argsFrom
                - LOCATION_OF_THE_COMMAND_YAML_FILE
    

    다음을 바꿉니다.

    • JOB을 Cloud Run 작업 이름으로 바꿉니다. 작업 이름은 49자(영문 기준) 이하여야 하며 리전 및 프로젝트별로 고유해야 합니다.
    • IMAGE를 작업 컨테이너 이미지의 URL로 바꿉니다(예: us-docker.pkg.dev/cloudrun/container/job:latest).
    • LOCATION_OF_THE_COMMAND_YAML_FILE을 이전 단계에서 만든 YAML 파일의 위치로 바꿉니다.
  3. 다음 명령어를 사용하여 새 작업을 배포합니다.

    gcloud run jobs replace job.yaml
    
  4. 다음 명령어를 사용하여 작업을 실행합니다.

    gcloud run jobs execute JOB_NAME

    JOB_NAME을 작업 이름으로 바꿉니다.

Cloud Run 작업 만들기 및 실행에 대한 자세한 내용은 새 작업 만들기작업 실행을 참조하세요.

BigQuery 테이블을 메인프레임 데이터 세트로 내보내기

다음과 같이 QUERY DD 파일에서 SQL 읽기를 실행하고 결과 데이터 세트를 Cloud Storage에 바이너리 파일로 내보내는 YAML 파일을 만들어 BigQuery 테이블을 메인프레임 데이터 세트로 내보낼 수 있습니다.

Cloud Run 작업을 만들고 실행하는 단계는 Cloud Run의 독립형 모드에서 Mainframe Connector를 사용하여 데이터 트랜스코딩 섹션에 설명된 것과 동일합니다. 유일한 차이점은 YAML 파일에 언급된 안내입니다.

environmentVariables:
- name: "COPYBOOK"
  value: "<var>COPYBOOK_FILEPATH</var>"
- name: "LOG_PROJECT"
  value: "<var>LOG_PROJECT</var>"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
command:
  bq export --project_id="<var>PROJECT_NAME</var>" --location=<var>LOCATION</var> --sql="select * from project.dataset.table" --bucket="<var>BUCKET</var>"

다음을 바꿉니다.

  • COPYBOOK_FILEPATH: 카피북 DD의 경로입니다.
  • LOG_PROJECT: 로그 프로젝트의 이름입니다.
  • PROJECT_NAME: 쿼리를 실행할 프로젝트의 이름입니다.
  • LOCATION: 쿼리가 실행될 위치입니다. 데이터와 가까운 위치에서 쿼리를 실행하는 것이 좋습니다.
  • BUCKET: 출력 바이너리 파일이 포함될 Cloud Storage 버킷입니다.

다음은 YAML 파일 예시입니다.

environmentVariables:
- name: "COPYBOOK"
  value: "gs://inputbucket/copybook.cpy"
- name: "LOG_PROJECT"
  value: "the log project"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
command:
  bq export --project_id="<var>PROJECT_NAME</var>" --location=US --sql="select * from project.dataset.table" --bucket="<var>BUCKET</var>"