Google Cloud의 HBase에서 마이그레이션

이 페이지에서는 Dataproc 또는 Compute Engine과 같은 Google Cloud 서비스에서 호스팅되는 Apache HBase 클러스터에서 Bigtable로 마이그레이션할 때의 고려사항과 프로세스를 설명합니다.

외부 Apache HBase 환경에서 Bigtable로 마이그레이션하는 방법은 HBase에서 Bigtable로 마이그레이션을 참조하세요. 온라인 마이그레이션에 대한 자세한 내용은 HBase에서 Bigtable로 복제를 참조하세요.

Google Cloud의 HBase에서 Bigtable로 마이그레이션하는 이유

이 마이그레이션 경로를 선택하는 이유로는 다음과 같은 것들이 있습니다.

  • 현재 배포된 클라이언트 애플리케이션을 클라이언트 연결 상태로 두고 연결 구성만 변경할 수 있음
  • 사용자의 데이터가 Google Cloud 생태계에 남아 있음
  • 원하는 경우 HBase API를 계속 사용할 수 있습니다. 자바용 Cloud Bigtable HBase 클라이언트자바용 Apache HBase 라이브러리의 완전히 지원되는 확장 프로그램입니다.
  • 관리형 서비스를 사용하여 데이터를 저장할 때의 이점을 원함

고려사항

이 섹션에서는 마이그레이션을 시작하기 전에 검토하고 고려할 몇 가지 사항을 설명합니다.

Bigtable 스키마 디자인

대부분의 경우 HBase에서와 동일한 스키마 디자인을 Bigtable에서 사용할 수 있습니다. 스키마를 변경하려는 경우 또는 사용 사례가 변경되는 경우 데이터를 마이그레이션하기 전에 스키마 디자인에 나와 있는 개념을 검토하세요.

준비 및 테스트

데이터를 마이그레이션하기 전에 HBase와 Bigtable의 차이점을 이해해야 합니다. 시간을 들여 연결을 구성하여 애플리케이션에서 Bigtable에 연결하는 방법을 알아보세요. 또한 애플리케이션 또는 서비스를 검증하기 위해 마이그레이션 전에 시스템 및 기능 테스트를 수행하는 것이 좋습니다.

마이그레이션 단계

HBase에서 Bigtable로 데이터를 마이그레이션하려면 HBase 스냅샷을 만들어 HBase 클러스터에서 Bigtable로 직접 데이터를 가져옵니다. 이 단계는 단일 HBase 클러스터에 대한 것으로 다음 여러 섹션에서 자세히 설명합니다.

  1. HBase에 쓰기 전송을 중지합니다.
  2. Bigtable에서 대상 테이블을 만듭니다.
  3. HBase 스냅샷을 만들어 Bigtable로 가져옵니다.
  4. 가져온 데이터를 검증합니다.
  5. 애플리케이션을 업데이트하여 Bigtable에 읽기 및 쓰기를 보냅니다.

이미지

시작하기 전에

  1. Google Cloud CLI를 설치하거나 Cloud Shell을 사용합니다.

  2. 검증 출력 데이터를 저장할 Cloud Storage 버킷을 만듭니다. Dataproc 작업을 실행할 위치와 동일한 위치에 버킷을 만듭니다.

  3. 마이그레이션하는 Hadoop 클러스터를 식별합니다. HBase 클러스터의 이름 노드 및 데이터 노드에 대한 네트워크 연결이 있는 Dataproc 1.x 클러스터에서 마이그레이션 작업을 실행해야 합니다. 마이그레이션 스크립트에 필요한 HBase 클러스터의 ZooKeeper Quorum 주소Namenode URI를 기록해 둡니다.

  4. 소스 HBase 클러스터와 동일한 네트워크에서 Dataproc 클러스터 버전 1.x를 만듭니다. 이 클러스터를 사용하여 가져오기 및 검증 작업을 실행합니다.

  5. 새 테이블을 저장할 Bigtable 인스턴스를 만듭니다. Bigtable 인스턴스에 있는 하나 이상의 클러스터도 Dataproc 클러스터와 동일한 리전에 있어야 합니다. 예: us-central1

  6. 스키마 변환 도구를 가져옵니다.

    wget BIGTABLE_HBASE_TOOLS_URL
    

    BIGTABLE_HBASE_TOOLS_URL을 도구의 Maven 저장소에서 제공하는 최신 JAR with dependencies의 URL로 바꾸세요. 파일 이름은 https://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-tools/2.6.0/bigtable-hbase-1.x-tools-2.6.0-jar-with-dependencies.jar와 유사한 형식입니다.

    URL을 찾거나 JAR을 수동으로 다운로드하려면 다음을 수행합니다.

    1. 저장소로 이동합니다.
    2. 찾아보기를 클릭하여 저장소 파일을 열람합니다.
    3. 최신 버전 번호를 클릭합니다.
    4. JAR with dependencies file을 식별합니다(일반적으로 맨 위에 있음).
    5. 마우스 오른쪽 버튼을 클릭하고 URL을 복사하거나 클릭하여 파일을 다운로드합니다.
  7. 가져오기 및 검증 작업에 사용하는 맵리듀스 도구를 가져옵니다.

    wget BIGTABLE_MAPREDUCE_URL
    

    BIGTABLE_MAPREDUCE_URL을 도구의 Maven 저장소에서 제공하는 최신 shaded-byo JAR의 URL로 바꾸세요. 파일 이름은 https://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-mapreduce/2.6.0/bigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar와 유사한 형식입니다.

    URL을 찾거나 JAR을 수동으로 다운로드하려면 다음을 수행합니다.

    1. 저장소로 이동합니다.
    2. 최신 버전 번호를 클릭합니다.
    3. 다운로드를 클릭합니다.
    4. shaded-byo-hadoop.jar 위로 마우스를 가져갑니다.
    5. 마우스 오른쪽 버튼을 클릭하고 URL을 복사하거나 클릭하여 파일을 다운로드합니다.
  8. 다음 환경 변수를 설정합니다.

    #Google Cloud
    
    export PROJECT_ID=PROJECT_ID
    export REGION=REGION
    
    ##Cloud Bigtable
    
    export BIGTABLE_INSTANCE_ID=BIGTABLE_INSTANCE_ID
    
    ##Dataproc
    
    export DATAPROC_CLUSTER_ID=DATAPROC_CLUSTER_NAME
    
    #Cloud Storage
    
    export BUCKET_NAME="gs://BUCKET_NAME"
    export STORAGE_DIRECTORY="$BUCKET_NAME/hbase-migration"
    
    #HBase
    
    export ZOOKEEPER_QUORUM=ZOOKEPER_QUORUM
    export ZOOKEEPER_PORT=2181
    export ZOOKEEPER_QUORUM_AND_PORT="$ZOOKEEPER_QUORUM:$ZOOKEEPER_PORT"
    export MIGRATION_SOURCE_NAMENODE_URI=MIGRATION_SOURCE_NAMENODE_URI
    export MIGRATION_SOURCE_TMP_DIRECTORY=${MIGRATION_SOURCE_NAMENODE_URI}/tmp
    export MIGRATION_SOURCE_DIRECTORY=${MIGRATION_SOURCE_NAMENODE_URI}/hbase
    
    #JAR files
    
    export TRANSLATE_JAR=TRANSLATE_JAR
    export MAPREDUCE_JAR=MAPREDUCE_JAR
    
    

    자리표시자를 마이그레이션 값으로 바꿉니다.

    Google Cloud:

    • PROJECT_ID: Bigtable 인스턴스가 있는 Google Cloud 프로젝트
    • REGION: 가져오기 및 유효성 검사 작업을 실행할 Dataproc 클러스터가 포함된 리전

    Bigtable:

    • BIGTABLE_INSTANCE_ID: 데이터를 가져올 Bigtable 인스턴스의 식별자

    Dataproc:

    • DATAPROC_CLUSTER_ID: 가져오기 및 유효성 검사 작업을 실행할 Dataproc 클러스터의 ID

    Cloud Storage:

    • BUCKET_NAME: 스냅샷을 저장하는 Cloud Storage 버킷의 이름

    HBase:

    • ZOOKEEPER_QUORUM: 도구가 연결될 ZooKeeper 호스트(host1.myownpersonaldomain.com 형식)
    • MIGRATION_SOURCE_NAMENODE_URI: HBase 클러스터의 이름 노드의 URI(hdfs://host1.myownpersonaldomain.com:8020 형식)

    JAR 파일

    • TRANSLATE_JAR: Maven에서 다운로드한 bigtable hbase tools JAR 파일의 이름과 버전 번호. 값은 bigtable-hbase-1.x-tools-2.6.0-jar-with-dependencies.jar과 같아야 합니다.
    • MAPREDUCE_JAR: Maven에서 다운로드한 bigtable hbase mapreduce JAR 파일의 이름과 버전 번호. 값은 bigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar와 유사해야 합니다.
  9. (선택사항) 변수가 올바르게 설정되었는지 확인하려면 printenv 명령어를 실행하여 모든 환경 변수를 봅니다.

HBase에 쓰기 전송 중지

HBase 테이블의 스냅샷을 생성하기 전에 HBase 클러스터에 쓰기 전송을 중지합니다.

Bigtable에서 대상 테이블 만들기

다음 단계는 마이그레이션하려는 HBase 테이블마다 Bigtable 인스턴스에 대상 테이블을 만드는 것입니다. 인스턴스에 대한 bigtable.tables.create 권한이 있는 계정을 사용합니다.

이 가이드에서는 테이블을 자동으로 만드는 Bigtable 스키마 변환 도구를 사용합니다. 그러나 Bigtable 스키마가 HBase 스키마와 정확하게 일치하지 않게 하려면 cbt CLI 또는 Google Cloud 콘솔을 사용하여 테이블을 만들면 됩니다.

Bigtable 스키마 변환 도구에서 테이블 이름, column family, 가비지 컬렉션 정책, 분할을 포함한 HBase 테이블의 스키마를 캡처합니다. 그런 다음 Bigtable에 비슷한 테이블을 만듭니다.

가져오려는 테이블마다 다음을 실행하여 HBase의 스키마를 Bigtable로 복사합니다.

java \
 -Dgoogle.bigtable.project.id=$PROJECT_ID \
 -Dgoogle.bigtable.instance.id=$BIGTABLE_INSTANCE_ID \
 -Dgoogle.bigtable.table.filter=TABLE_NAME \
 -Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM \
 -Dhbase.zookeeper.property.clientPort=$ZOOKEEPER_PORT \
 -jar $TRANSLATE_JAR

TABLE_NAME을 가져오려는 HBase 테이블의 이름으로 바꿉니다. 스키마 변환 도구는 새 Bigtable 테이블에 이 이름을 사용합니다.

원하는 경우 TABLE_NAME 대신에 만들려는 모든 테이블을 캡처하는 '.*'와 같은 정규 표현식으로 바꾼 다음 명령어를 한 번만 실행할 수 있습니다.

HBase 테이블 스냅샷 생성 및 Bigtable로 가져오기

Bigtable로 마이그레이션하려는 각 테이블에 대해 다음을 완료합니다.

  1. 다음 명령어를 실행합니다.

    echo "snapshot 'HBASE_TABLE_NAME', 'HBASE_SNAPSHOT_NAME'" | hbase shell -n
    

    다음을 바꿉니다.

    • HBASE_TABLE_NAME: Bigtable로 마이그레이션하려는 HBase 테이블의 이름
    • HBASE_SNAPSHOT_NAME: 새 스냅샷의 고유한 이름
  2. 다음 명령어를 실행하여 스냅샷을 가져옵니다.

    gcloud dataproc jobs submit hadoop \
        --cluster $DATAPROC_CLUSTER_ID \
        --region $REGION \
        --project $PROJECT_ID \
        --jar $MAPREDUCE_JAR \
        -- \
        import-snapshot \
        -Dgoogle.bigtable.project.id=$PROJECT_ID \
        -Dgoogle.bigtable.instance.id=$BIGTABLE_INSTANCE_ID \
        HBASE_SNAPSHOT_NAME \
        $MIGRATION_SOURCE_DIRECTORY \
        BIGTABLE_TABLE_NAME \
        $MIGRATION_SOURCE_TMP_DIRECTORY
    

    다음을 바꿉니다.

    • HBASE_SNAPSHOT_NAME: 가져오려는 테이블의 스냅샷에 할당한 이름
    • BIGTABLE_TABLE_NAME: 가져올 Bigtable 테이블의 이름

    이 명령어를 실행하면 도구에서 소스 클러스터의 HBase 스냅샷을 복원한 후 가져옵니다. 스냅샷 크기에 따라 스냅샷 복원 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다.

데이터를 가져올 때 다음과 같은 추가 옵션을 사용할 수 있습니다.

  • 버퍼링된 변형자 요청에 대한 클라이언트 기반 제한 시간을 설정합니다(기본값 600000ms). 아래 예시를 참조하세요.

    -Dgoogle.bigtable.rpc.use.timeouts=true
    -Dgoogle.bigtable.mutate.rpc.timeout.ms=600000
    
  • 지연 시간 기반 제한을 통해 가져오기 일괄 작업이 다른 워크로드에 미치는 영향을 줄일 수 있습니다. 마이그레이션 사용 사례에 대해 제한을 테스트해야 합니다. 아래 예시를 참조하세요.

    -Dgoogle.bigtable.buffered.mutator.throttling.enable=true
    -Dgoogle.bigtable.buffered.mutator.throttling.threshold.ms=100
    
  • 단일 HBase 리전을 읽는 맵 태스크 수를 수정합니다(기본적으로 리전당 맵 태스크 2개). 아래 예시를 참조하세요.

    -Dgoogle.bigtable.import.snapshot.splits.per.region=3
    
  • 추가 맵리듀스 구성을 속성으로 설정합니다. 아래 예시를 참조하세요.

    -Dmapreduce.map.maxattempts=4
    -Dmapreduce.map.speculative=false
    -Dhbase.snapshot.thread.pool.max=20
    

가져올 때 다음 팁에 유의하세요.

  • 데이터 로드 성능을 개선하려면 지도 가져오기 작업을 동시에 실행하기에 충분한 Dataproc 클러스터 작업자가 있어야 합니다. 기본적으로 n1-standard-8 Dataproc 작업자는 8개의 가져오기 작업을 실행합니다. 작업자가 충분하면 합리적인 시간 내에 가져오기 작업을 완료하는 데 충분하지만 Bigtable 인스턴스에 부담을 주지 않는 만큼의 컴퓨팅 성능을 제공합니다.
    • 다른 워크로드에도 Bigtable 인스턴스를 사용하지 않는 경우 Bigtable 인스턴스의 노드 수를 3으로 곱하고 8로 나눕니다(n1-standard-8 dataproc 작업자 사용). 결과를 Dataproc 작업자의 수로 사용하세요.
    • HBase 데이터를 가져오는 동시에 다른 워크로드의 인스턴스를 사용하는 경우 Dataproc 작업자의 값을 줄이거나 워크로드 요구사항을 충족하도록 Bigtable 노드 수를 늘리세요.
  • 가져오기 중에 Bigtable 인스턴스의 CPU 사용량을 모니터링해야 합니다. Bigtable 인스턴스의 CPU 사용률이 너무 높으면 노드를 추가해야 할 수도 있습니다. 노드를 추가하면 CPU 사용률이 즉시 향상되지만 클러스터가 최적의 성능을 달성하기까지 노드가 추가된 후 최대 20분이 걸릴 수 있습니다.

Bigtable 인스턴스 모니터링에 대한 상세 설명은 Bigtable 인스턴스 모니터링을 참조하세요.

Bigtable에서 가져온 데이터 검증

그런 다음 마이그레이션된 데이터의 무결성에 대한 확신을 얻기 위해 소스 및 대상 테이블 간에 해시 비교를 수행하여 데이터 마이그레이션을 검증합니다. 먼저 hash-table 작업을 실행하여 소스 테이블에서 행 범위의 해시를 생성합니다. 그런 다음 sync-table 작업을 실행하여 Bigtable의 해시를 계산하고 소스와 일치시켜 검증을 완료합니다.

  1. 검증에 사용할 해시를 만들려면 마이그레이션하는 각 테이블에 다음 명령어를 실행합니다.

    gcloud dataproc jobs submit hadoop \
      --project $PROJECT_ID \
      --cluster $DATAPROC_CLUSTER_ID \
      --region $REGION \
      --jar $MAPREDUCE_JAR \
      -- \
      hash-table \
      -Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM_AND_PORT \
      HBASE_TABLE_NAME \
      $STORAGE_DIRECTORY/HBASE_TABLE_NAME/hash-output/
    

    HBASE_TABLE_NAME을 스냅샷을 만든 HBase 테이블의 이름으로 바꿉니다.

  2. 명령줄에서 다음을 실행합니다.

    gcloud dataproc jobs submit hadoop \
      --project $PROJECT_ID \
      --cluster $DATAPROC_CLUSTER_ID \
      --region $REGION \
     --jar $MAPREDUCE_JAR \
     -- \
     sync-table \
     --sourcezkcluster=$ZOOKEEPER_QUORUM_AND_PORT:/hbase \
     --targetbigtableproject=$PROJECT_ID \
     --targetbigtableinstance=$BIGTABLE_INSTANCE_ID \
     $STORAGE_DIRECTORY/HBASE_TABLE_NAME/hash-output/ \
     HBASE_TABLE_NAME \
     BIGTABLE_TABLE_NAME
    

    다음을 바꿉니다.

    • HBASE_TABLE_NAME: 가져올 HBase 테이블의 이름
    • BIGTABLE_TABLE_NAME: 가져올 Bigtable 테이블의 이름

원하는 경우 해시 범위를 분기하기 위해 소스와 대상 간 동기화를 사용 설정하려면 명령어에 --dryrun=false를 추가할 수 있습니다.

sync-table 작업이 완료되면 작업이 실행된 Google Cloud Console에 작업 카운터가 표시됩니다. 가져오기 작업에서 성공적으로 모든 데이터를 가져오면 HASHES_MATCHED 값에 값 하나가 있고 HASHES_NOT_MATCHED 값은 0이 됩니다.

HASHES_NOT_MATCHED에 값이 표시되면 디버그 모드에서 sync-table을 다시 실행하여 분기 범위와 셀 수준 세부정보(예: Source missing cell, Target missing cell 또는 Different values)를 내보낼 수 있습니다. 디버그 모드를 사용 설정하려면 --properties mapreduce.map.log.level=DEBUG를 구성합니다. 작업이 실행된 후 Cloud Logging을 사용하고 jsonPayload.class="org.apache.hadoop.hbase.mapreduce.SyncTable" 표현식을 검색하여 분기되는 셀을 검토합니다.

가져오기 작업을 다시 시도하거나 SyncTable을 사용하여 dryrun=false를 설정하여 소스 테이블과 대상 테이블을 동기화할 수 있습니다. 계속 진행하기 전에 HBase SyncTable 및 추가 구성 옵션을 검토하세요.

Cloud Logging의 SyncTable 결과

Bigtable에 읽기 및 쓰기를 전송하도록 애플리케이션 업데이트

클러스터의 각 테이블에 대한 데이터를 검증한 후에는 모든 해당 트래픽을 Bigtable로 라우팅하기 위해 애플리케이션을 구성한 다음 HBase 클러스터를 지원 중단합니다.

마이그레이션이 완료되면 스냅샷을 삭제할 수 있습니다.

다음 단계