

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 从以前的 HBase 版本迁移
<a name="emr-hbase-migrate"></a>

要迁移先前 HBase 版本的数据，请参阅《Apache HBase 参考指南》中的[升级](https://hbase.apache.org/book.html#upgrading)[以及HBase 版本号和兼容性](https://hbase.apache.org/book.html#hbase.versioning)。您可能需要特别注意从 1.0 之前版本升级的HBase要求。

## 迁移到 Amazon EMR 7.4.0 或更高版本
<a name="emr-hbase-migrate-versions"></a>

**注意**  
如果您要从 7.4.0 之前的 EMR 版本迁移到 7.3.0 以上的版本，请遵循以下准则。

如果您当前运行的 EMR 版本已启用 Amazon 的存储文件跟踪功能（包含在 6.2.0 到 7.3.0 版本中），并且您想要升级到具有 OSS 存储文件跟踪的版本（该功能在 7.3.0 之后的 EMR 版本上可用），请按照以下步骤进行操作：

1. 在现有集群中：

   1. 禁用 `hbase:storefile` 表。

   1. 删除 `hbase:storefile`表。

   1. 刷新 `hbase:meta`。

   1. 等待元数据更新。

1. 在新集群中：

   1. 将同一个 Amazon S3 目录设置为根目录。

   1. 使用 `DefaultStoreFileTracker` 实现启动集群：

      ```
      {
        "Classification": "hbase-site",
        "Properties": {
          hbase.store.file-tracker.impl: "org.apache.hadoop.hbase.regionserver.storefiletracker.DefaultStoreFileTracker"
         }
      }
      ```

   1. 在表或列系列级别，使用以下命令更改存储文件跟踪器：

      1. 更改表或表列系列的存储文件跟踪器：

         ```
         hbase> change_sft 't1','FILE'
         hbase> change_sft 't2','cf1','FILE'
         ```

      1. 更改表中所有与给定正则表达式 (regex) 匹配的存储文件跟踪器：

         ```
         hbase> change_sft_all 't.*','FILE'
         hbase> change_sft_all 'ns:.*','FILE'
         hbase> change_sft_all 'ns:t.*','FILE'
         ```

## 使用只读副本集群 HBase 在 Amazon S3 集群上迁移到 Amazon EMR 版本 7.12.0 或更高版本
<a name="emr-hbase-migrate-s3-read-replica"></a>

从 EMR 7.12.0 开始，您可以将 HBase Amazon S3 集群上的只读副本从只读模式切换到活动模式，同时启用读取和写入操作。此功能是通过两个新的 HBase shell 命令提供的。

1. `readonly_state`

   检索集群的当前读写操作状态。

   输出：
   + 非活动-群集处于只读模式，写入处于非活动状态。
   + ACTIVE-集群支持读取和写入操作。

1. `readonly_switch`

   使用切换过程的可配置选项启用或禁用只读模式。

   语法：

   ```
   readonly_switch <readonly>,<force_flush>,<force_refresh_meta>,<force_refresh_hfile>
   ```

   参数：
   + readonly（必填）-用于启用 (true) 或禁用 (false) 只读模式的布尔值
   + force\$1flush（可选）-在从活动模式切换到只读模式之前强制刷新数据（默认值：true）
   + force\$1refresh\$1meta（可选）-从只读模式切换到活动模式时强制刷新元表（默认值：true）
   + force\$1refresh\$1hfile（可选）-从只读模式切换到活动模式时强制 HFile 刷新（默认值：true）

### 迁移步骤
<a name="emr-hbase-migrate-s3-steps"></a>

如果您当前正在 A HBase mazon S3 集群上运行 EMR 6.0.0\$1，并且想要迁移到 EMR 7.12.0 或更高版本的集群，请按照以下步骤操作：

1. 使用 hbck 报告或主用户界面中的卡住程序，确保您的源集群处于稳定状态，没有不一致之处。 HBase 

   ```
   sudo -u hbase hbase hbck > hbck_report.txt
   ```

1. 确保源集群上没有处于 SPLIT 状态的区域：

   1. 如果存在处于 SPLIT 状态的区域，请在相应的表上运行主要压缩，然后等待它们完成

      ```
      major_compact <table_name>
      ```

   1. 压实完成后在 HBase 外壳中运行 `catalogjanitor_run`

1. 创建一个新的 EMR 7.12.0\$1 集群，该集群配置为只读副本，指向与源集群相同的 Amazon S3 位置。有关如何设置只读副本集群的更多详细信息，请参阅此[博客](https://aws.amazon.com/blogs/big-data/setting-up-read-replica-clusters-with-hbase-on-amazon-s3/)。如果您想升级到 OSS Store 文件跟踪，请使用上述步骤中提到的 DefaultStoreFileTracker 配置启动新集群。

1. 等待主节点完全初始化。通过读取表格来验证数据的可访问性，并确认新集群处于只读模式

   ```
   hbase:001:0> readonly_state
   Took 0.4612 seconds
   => "INACTIVE"
   ```

1. 在源集群上禁用平衡和压缩：

   ```
   echo "balance_switch false" | hbase shell
   echo "compaction_switch false" | hbase shell
   ```

1. 确保只读副本集群用户界面中没有 overlaps/inconsistencies 显示任何内容，并验证区域是否显示打开状态并已正确分配。

1. 如果要更改为，请使用上一节中提到的只读副本集群上的命令转换存储文件跟踪。 FileBasedTracker

1. 停止指向源集群的作业，刷新所有表，然后关闭源集群。等待完全终止后再继续。

   ```
   echo "flush 'usertable'" | hbase shell
   echo "flush 'hbase:meta'" | hbase shell
   echo "flush 'hbase:namespace'" | hbase shell
   ```

1. 将只读副本集群切换到活动模式以启用写入操作。完成此步骤后，您的新集群将同时支持读取和写入操作，迁移即告完成。

   ```
   hbase:010:0> readonly_switch false
   Took 38.1568 seconds
   ```

1. 验证新集群上的写入操作并确保所有区域都在处理请求。

**注意**  
在任何时间点，只能有一个活动集群指向 Amazon S3 位置。因此，只有在源集群终止后，才应将只读副本切换为活动副本。