在EMR-5.6.0及以后版本和EMR-3.40.0及以后版本中使用HBase时,您可以存储HBase的数据在OSS上。本文为您介绍HBase on OSS架构,以及如何使用OSS作为HBase的底层存储。

背景信息

HBase on OSS的架构如下图所示。framework
说明 从架构图可以看到,本文不包含启用JindoData读缓存的相关配置,HBase是通过JindoSDK来实现访问OSS。
HBase on OSS架构优势如下:
  • 简化了数据迁移和恢复

    HBase的数据文件和表的元数据持久存储在集群外部的OSS上,HBase数据迁移和恢复时无需再使用快照等复杂的方式。

  • 方便扩容

    目前基于Core Node扩容HBase计算时会同步扩容HDFS,但是本文中的HDFS集群本身只用于存储WAL(Write Ahead Log),需要的存储空间较少,所以实际是能够通过计算需求而非存储需求来调整EMR集群大小,同时OSS作为云存储服务,扩容操作也比较简单。

使用限制

为了保证新集群可以从OSS恢复成功,新集群的HBase内核版本必需和旧集群HBase版本保持一致。

操作步骤

  1. 开通并授权访问OSS-HDFS服务,具体操作请参见开通并授权访问OSS-HDFS服务
  2. 获取HDFS服务域名。
    在OSS管理控制台的概览页面,复制HDFS服务的域名,以便后续创建EMR-HBase时使用该域名作为hbase.rootdir路径。HDFS Endpoint
  3. 在集群创建时配置自定义软件。
    1. 进入集群管理页面。
      1. 登录阿里云E-MapReduce控制台
      2. 在顶部菜单栏处,根据实际情况选择地域和资源组
      3. 单击上方的集群管理页签。
    2. 单击右上角的创建集群
    3. 软件配置高级设置区域,开启软件自定义配置参数。
      Soft-set
    4. 添加以下配置信息。

      以OSS作为HBase后端,需要替换相关配置及对应路径,自定义配置如下。

      [
        {
             "ServiceName":"HBASE",
             "FileName":"hbase-site",
             "ConfigKey":"hbase.rootdir",
             "ConfigValue":"oss://${oss_bucket}.${endpoint}/${hbase-root-dir}"
        },
        {
             "ServiceName":"HBASE",
             "FileName":"hbase-site",
             "ConfigKey":"hbase.wal.dir",
             "ConfigValue":"hdfs://${namespace}/${hbase-wal-dir}"
        }
      ]
      参数 描述
      hbase.rootdir HBase数据存储目录,配置为OSS路径,配置格式为oss://${oss_bucket}.${endpoint}/${hbase-root-dir}。例如,oss://test_bucket.cn-shanghai.oss-dls.aliyuncs.com/hbase。
      说明 其中,需要替换的参数:
      • ${oss_bucket}:您在OSS控制台上创建的Bucket名称。
      • ${endpoint}:您在步骤2中获取到的HDFS服务域名。
      • ${hbase-root-dir}:HBase的根目录。
      hbase.wal.dir 指定HBase的WAL存储目录到本地Hadoop集群。参数值为:
      • 非HA集群:配置为hdfs://emr-header-1:9000/hbase
      • HA集群:配置为hdfs://emr-cluster/hbase
  4. 停止HBase服务。
    如需停止HBase服务,首先通过flush操作来保证内存中所有表的数据都已经刷新到HFile,并执行Disable table来禁用相关的表,避免写入新的数据。
  5. 从OSS上恢复一个新的HBase集群。
    从OSS恢复一个新的HBase集群,也是创建集群时在软件配置高级设置区域,开启软件自定义配置参数,配置参数如下。
    [
      {
           "ServiceName":"HBASE",
           "FileName":"hbase-site",
           "ConfigKey":"hbase.rootdir",
           "ConfigValue":"oss://${bucket}.${endpoint}/${hbase-root-dir}"
      },
      {
           "ServiceName":"HBASE",
           "FileName":"hbase-site",
           "ConfigKey":"hbase.wal.dir",
           "ConfigValue":"hdfs://${namespace}/${hbase-wal-dir}"
      }
    ]
    参数 描述 备注
    hbase.rootdir 参数值与旧HBase集群保持一致。例如,oss://test_bucket.cn-shanghai.oss-dls.aliyuncs.com/hbase。

    参数详情请参见步骤3中的表格。

    hbase.wal.dir 指向EMR新HDFS集群目录,同时需要保证该目录初始为空。