스냅샷 사용 HBase - 아마존 EMR

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

스냅샷 사용 HBase

HBase내장된 스냅샷 기능을 사용하여 간단한 테이블 백업을 생성합니다. EMR클러스터에서는 를 사용하여 이러한 백업을 Amazon S3로 내보낼 수 EMRFS 있습니다. HBase셸을 사용하여 기본 노드에 스냅샷을 생성할 수 있습니다. 이 항목에서는 셸을 사용하여 대화식으로 또는 또는 를 command-runner.jar 사용하여 이러한 명령을 실행하는 방법을 보여 줍니다. AWS CLI AWS SDK for Java다른 유형의 백업에 대한 자세한 내용은 HBase 설명서의 HBase HBase백업을 참조하십시오.

테이블을 사용하여 스냅샷 생성

hbase snapshot create -n snapshotName -t tableName

다음 위치에서 command-runner.jar 사용 AWS CLI:

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar",\ Args=[ "hbase", "snapshot", "create","-n","snapshotName","-t","tableName"]

AWS SDK for Java

HadoopJarStepConfig hbaseSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","create","-n","snapshotName","-t","tableName");
참고

스냅샷 이름이 고유하지 않으면 생성 작업이 -1 또는 255 반환 코드와 함께 실패합니다. 그러나 오류 내용을 설명하는 오류 메시지는 표시되지 않을 수 있습니다. 동일한 스냅샷 이름을 사용하려면 스냅샷을 삭제한 다음, 다시 생성합니다.

스냅샷 삭제

hbase shell >> delete_snapshot 'snapshotName'

스냅샷 정보 보기

hbase snapshot info -snapshot snapshotName

Amazon S3로 스냅샷 내보내기

중요

스냅샷을 내보낼 때 -mappers 값을 지정하지 않는 경우 HBase 는 임의의 계산을 사용하여 매퍼 수를 결정합니다. 테이블의 크기에 따라 이 값이 매우 클 수 있습니다. 그러면 내보내기 중에 실행 중인 작업에 악영향을 주게 됩니다. 따라서 -mappers 파라미터, -bandwidth 파라미터(초당 메가바이트 단위로 대역폭 사용 지정) 또는 둘 모두를 지정하여 내보내기 작업에서 사용되는 클러스터 리소스를 제한하는 것이 좋습니다. 또는 사용량이 적은 기간 동안 스냅샷 내보내기 작업을 실행할 수 있습니다.

hbase snapshot export -snapshot snapshotName \ -copy-to s3://bucketName/folder -mappers 2

command-runner.jar에서 사용: AWS CLI

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar",\ Args=[ "hbase", "snapshot", "export","-snapshot","snapshotName","-copy-to","s3://bucketName/folder","-mappers","2","-bandwidth","50"]

AWS SDK for Java:

HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","export", "-snapshot","snapshotName","-copy-to", "s3://bucketName/folder", "-mappers","2","-bandwidth","50");

Amazon S3에서 스냅샷 가져오기

이것은 가져오기이지만 여기에 사용된 HBase 옵션은 여전히 export 유효합니다.

sudo -u hbase hbase snapshot export \ -D hbase.rootdir=s3://bucketName/folder \ -snapshot snapshotName \ -copy-to hdfs://masterPublicDNSName:8020/user/hbase \ -mappers 2

command-runner.jar에서 사용 AWS CLI:

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar", \ Args=["sudo","-u","hbase","hbase snapshot export","-snapshot","snapshotName", \ "-D","hbase.rootdir=s3://bucketName/folder", \ "-copy-to","hdfs://masterPublicDNSName:8020/user/hbase","-mappers","2","-chmod","700"]

AWS SDK for Java:

HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("sudo","-u","hbase","hbase","snapshot","export", "-D","hbase.rootdir=s3://path/to/snapshot", "-snapshot","snapshotName","-copy-to", "hdfs://masterPublicDNSName:8020/user/hbase", "-mappers","2","-chuser","hbase");

셸 내 스냅샷에서 테이블 복원 HBase

hbase shell >> disable tableName >> restore_snapshot snapshotName >> enable tableName

HBase현재 HBase 셸에 있는 모든 스냅샷 명령을 지원하지는 않습니다. 예를 들어 스냅샷을 복원하는 HBase 명령줄 옵션이 없으므로 셸 내에서 복원해야 합니다. 즉 command-runner.jar에서 Bash 명령을 실행해야 합니다.

참고

여기에 사용된 명령이 이므로 echo Amazon에서 실행하는 명령이 0 종료 코드를 EMR 반환하더라도 셸 명령이 여전히 실패할 수 있습니다. 셸 명령을 단계로 실행하도록 선택한 경우 단계 로그를 확인하십시오.

echo 'disable tableName; \ restore_snapshot snapshotName; \ enable tableName' | hbase shell

다음은 AWS CLI를 사용한 단계입니다. 먼저 다음 snapshot.json 파일을 생성합니다.

[ { "Name": "restore", "Args": ["bash", "-c", "echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"tableName\"' | hbase shell"], "Jar": "command-runner.jar", "ActionOnFailure": "CONTINUE", "Type": "CUSTOM_JAR" } ]
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps file://./snapshot.json

AWS SDK for Java:

HadoopJarStepConfig hbaseRestoreSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("bash","-c","echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"snapshotName\"' | hbase shell");