Apache Cassandra to Bigtable 템플릿

Apache Cassandra to Bigtable 템플릿은 Apache Cassandra에서 Bigtable로 테이블을 복사합니다. 이 템플릿에는 최소한의 구성만 필요하며 Cassandra의 테이블 구조를 Bigtable에서 최대한 유사하게 복제합니다.

Apache Cassandra to Bigtable 템플릿은 다음과 같은 경우에 유용합니다.

  • 짧은 다운타임이 허용되는 상황에서 Apache Cassandra 데이터베이스를 마이그레이션합니다.
  • 전역 제공을 위해 Cassandra 테이블을 주기적으로 Bigtable에 복제합니다.

파이프라인 요구사항

  • 파이프라인을 실행하기 전에 대상 Bigtable 테이블이 있어야 합니다.
  • Dataflow 작업자와 Apache Cassandra 노드 간 네트워크 연결이 필요합니다.

유형 변환

Apache Cassandra to Bigtable 템플릿은 Apache Cassandra 데이터 유형을 자동으로 Bigtable의 데이터 유형으로 변환합니다.

Bigtable과 Apache Cassandra에서 대부분의 기본 유형은 동일하게 표현되지만 다음 기본 유형은 다르게 표현됩니다.

  • DateTimestampDateTime 객체로 변환됩니다.
  • UUIDString으로 변환됩니다.
  • VarintBigDecimal로 변환됩니다.

또한 Apache Cassandra는 Tuple, List, Set, Map 같이 더 복잡한 유형을 기본적으로 지원합니다. Tuple은 해당하는 유형이 Apache Beam에 없으므로 이 파이프라인에서는 지원되지 않습니다.

예를 들어 Apache Cassandra에서 다음 테이블에서와 같이 'mylist'라는 List 타입의 열과 값을 포함할 수 있습니다.

mylist
1 (a,b,c)

이 파이프라인은 목록 열을 3개의 서로 다른 열(Bigtable에서 column qualifier로 알려져 있음)로 확장합니다. 열 이름은 'mylist'이지만 파이프라인은 목록의 항목 색인도 추가합니다(예: 'mylist[0]').

mylist[0] mylist[1] mylist[2]
1 a b c

파이프라인은 집합을 목록과 동일하게 처리하지만 셀이 키인지 값인지 표시하기 위해 서픽스를 추가합니다.

mymap
1 {"first_key":"first_value","another_key":"different_value"}

변환 후에는 테이블이 다음과 같이 표시됩니다.

mymap[0].key mymap[0].value mymap[1].key mymap[1].value
1 first_key first_value another_key different_value

기본 키 변환

Apache Cassandra에서 기본 키는 데이터 정의 언어를 사용하여 정의됩니다. 기본 키는 단순, 복합 또는 클러스터링 열이 포함된 혼합 키 중 하나입니다. Bigtable은 바이트 배열에 사전순으로 정렬된 수동 row-key 생성을 지원합니다. 파이프라인은 키 유형에 대한 정보를 자동으로 수집하고 여러 값을 기반으로 row-key를 빌드하는 권장사항에 따라 키를 구축합니다.

템플릿 매개변수

필수 매개변수

  • cassandraHosts: 쉼표로 구분된 목록에 있는 Apache Cassandra 노드의 호스트입니다.
  • cassandraKeyspace: 테이블이 있는 Apache Cassandra 키스페이스입니다.
  • cassandraTable: 복사할 Apache Cassandra 테이블입니다.
  • bigtableProjectId: Bigtable 인스턴스와 연결된 Google Cloud 프로젝트 ID입니다.
  • bigtableInstanceId: Apache Cassandra 테이블이 복사되는 Bigtable 인스턴스 ID입니다.
  • bigtableTableId: Apache Cassandra 테이블이 복사되는 Bigtable 테이블의 이름입니다.

선택적 매개변수

  • cassandraPort: 노드에서 Apache Cassandra에 연결하는 데 사용할 TCP 포트입니다. 기본값은 9042입니다.
  • defaultColumnFamily: Bigtable 테이블의 column family 이름입니다. 기본값은 default입니다.
  • rowKeySeparator: row key를 빌드하는 데 사용되는 구분자입니다. 기본값은 #입니다.
  • splitLargeRows: 큰 행을 여러 MutateRows 요청으로 분할하기 위한 플래그입니다. 큰 행이 여러 API 호출 간에 분할되는 경우 행에 대한 업데이트는 원자적이지 않습니다. .

템플릿 실행

콘솔

  1. Dataflow 템플릿에서 작업 만들기 페이지로 이동합니다.
  2. 템플릿에서 작업 만들기로 이동
  3. 작업 이름 필드에 고유한 작업 이름을 입력합니다.
  4. (선택사항): 리전 엔드포인트의 드롭다운 메뉴에서 값을 선택합니다. 기본 리전은 us-central1입니다.

    Dataflow 작업을 실행할 수 있는 리전 목록은 Dataflow 위치를 참조하세요.

  5. Dataflow 템플릿 드롭다운 메뉴에서 the Cassandra to Cloud Bigtable template을 선택합니다.
  6. 제공된 매개변수 필드에 매개변수 값을 입력합니다.
  7. 작업 실행을 클릭합니다.

gcloud

셸 또는 터미널에서 템플릿을 실행합니다.

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cassandra_To_Cloud_Bigtable \
    --region REGION_NAME \
    --parameters \
bigtableProjectId=BIGTABLE_PROJECT_ID,\
bigtableInstanceId=BIGTABLE_INSTANCE_ID,\
bigtableTableId=BIGTABLE_TABLE_ID,\
cassandraHosts=CASSANDRA_HOSTS,\
cassandraKeyspace=CASSANDRA_KEYSPACE,\
cassandraTable=CASSANDRA_TABLE

다음을 바꿉니다.

  • JOB_NAME: 선택한 고유한 작업 이름
  • VERSION: 사용할 템플릿 버전

    다음 값을 사용할 수 있습니다.

  • REGION_NAME: Dataflow 작업을 배포할 리전(예: us-central1)
  • BIGTABLE_PROJECT_ID: Bigtable이 있는 프로젝트 ID
  • BIGTABLE_INSTANCE_ID: Bigtable 인스턴스 ID
  • BIGTABLE_TABLE_ID: Bigtable 테이블의 이름
  • CASSANDRA_HOSTS: Apache Cassandra 호스트 목록. 여러 호스트가 제공된 경우 쉼표를 이스케이프하는 방법에 대한 안내를 따르세요.
  • CASSANDRA_KEYSPACE: 테이블이 있는 Apache Cassandra 키스페이스
  • CASSANDRA_TABLE: 마이그레이션해야 하는 Apache Cassandra 테이블

API

REST API를 사용하여 템플릿을 실행하려면 HTTP POST 요청을 전송합니다. API 및 승인 범위에 대한 자세한 내용은 projects.templates.launch를 참조하세요.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cassandra_To_Cloud_Bigtable
{
   "jobName": "JOB_NAME",
   "parameters": {
       "bigtableProjectId": "BIGTABLE_PROJECT_ID",
       "bigtableInstanceId": "BIGTABLE_INSTANCE_ID",
       "bigtableTableId": "BIGTABLE_TABLE_ID",
       "cassandraHosts": "CASSANDRA_HOSTS",
       "cassandraKeyspace": "CASSANDRA_KEYSPACE",
       "cassandraTable": "CASSANDRA_TABLE"
   },
   "environment": { "zone": "us-central1-f" }
}

다음을 바꿉니다.

  • PROJECT_ID: Dataflow 작업을 실행하려는 Google Cloud 프로젝트 ID
  • JOB_NAME: 선택한 고유한 작업 이름
  • VERSION: 사용할 템플릿 버전

    다음 값을 사용할 수 있습니다.

  • LOCATION: Dataflow 작업을 배포할 리전(예: us-central1)
  • BIGTABLE_PROJECT_ID: Bigtable이 있는 프로젝트 ID
  • BIGTABLE_INSTANCE_ID: Bigtable 인스턴스 ID
  • BIGTABLE_TABLE_ID: Bigtable 테이블의 이름
  • CASSANDRA_HOSTS: Apache Cassandra 호스트 목록. 여러 호스트가 제공된 경우 쉼표를 이스케이프하는 방법에 대한 안내를 따르세요.
  • CASSANDRA_KEYSPACE: 테이블이 있는 Apache Cassandra 키스페이스
  • CASSANDRA_TABLE: 마이그레이션해야 하는 Apache Cassandra 테이블

다음 단계