

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

# HBase 스냅샷 사용
<a name="emr-hbase-snapshot"></a>

HBase는 기본 제공된 [스냅샷](https://hbase.apache.org/book.html#ops.snapshots) 기능을 사용하여 테이블의 간소화된 백업을 생성합니다. EMR 클러스터에서 EMRFS를 사용하여 이 백업을 Amazon S3로 내보낼 수 있습니다. HBase 셸을 사용하여 프라이머리 노드에서 스냅샷을 생성할 수 있습니다. 이 주제에서는 쉘과 대화식으로 또는 `command-runner.jar` AWS CLI 또는와 함께를 사용하여 단계를 통해 이러한 명령을 실행하는 방법을 보여줍니다 AWS SDK for Java. 다른 유형의 HBase 백업에 대한 자세한 내용은 HBase 설명서에서 [HBase backup](https://hbase.apache.org/book.html#ops.backup)을 참조하세요.

## 테이블을 사용하여 스냅샷 생성
<a name="w2aac33c49b4"></a>

```
hbase snapshot create -n snapshotName -t tableName
```

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

```
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` 반환 코드와 함께 실패합니다. 그러나 오류 내용을 설명하는 오류 메시지는 표시되지 않을 수 있습니다. 동일한 스냅샷 이름을 사용하려면 스냅샷을 삭제한 다음, 다시 생성합니다.

## 스냅샷 삭제
<a name="w2aac33c49b6"></a>

```
hbase shell
>> delete_snapshot 'snapshotName'
```

## 스냅샷 정보 보기
<a name="w2aac33c49b8"></a>

```
hbase snapshot info -snapshot snapshotName
```

## Amazon S3로 스냅샷 내보내기
<a name="w2aac33c49c10"></a>

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

```
hbase snapshot export -snapshot snapshotName \
-copy-to s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/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에서 스냅샷 가져오기
<a name="w2aac33c49c12"></a>

가져오기 작업이지만 여기서 사용된 HBase 옵션은 여전히 `export`입니다.

```
sudo -u hbase hbase snapshot export \
-D hbase.rootdir=s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/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 셸 내의 스냅샷에서 테이블 복원
<a name="w2aac33c49c14"></a>

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

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

**참고**  
여기서 사용된 명령이 `echo`이기 때문에 Amazon EMR에서 실행한 명령이 `0` 종료 코드를 반환할 경우에도 쉘 명령이 계속 실패할 수 있습니다. 셸 명령을 단계로 실행하도록 선택한 경우 단계 로그를 확인하세요.

```
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");
```