本文为您介绍如何使用JindoFS作为HBase的底层存储。

背景信息

HBase是Hadoop生态中的实时数据库,有很高的写入性能,E-MapReduce HBase支持使用JindoFS或OSS作为底层存储,相对于HDFS存储,使用更加灵活。
说明 建议您使用EMR-3.36.0及后续版本的集群。

JindoFS配置

以EMR-3.36.0版本为例,创建名为emr-jfs的命名空间,Bucket名称为oss-bucket,相关配置参数示例如下:
  • jfs.namespaces=emr-jfs
  • jfs.namespaces.emr-jfs.oss.uri=oss://<oss-bucket>/oss-dir
  • jfs.namespaces.emr-jfs.mode=block

指定HBase的存储路径

指定HBase的存储路径,是需要修改hbase-site配置文件中的参数hbase.rootdir的值为JindoFS或OSS地址,修改参数hbase.wal.dir的值为本地的HDFS地址,通过本地HDFS集群存储WAL文件。如果要释放集群,需要先Disable table,确保WAL文件已经完全更新到HFile。

参数 描述
hbase.rootdir 指定HBase的ROOT存储目录到JindoFS或OSS。
参数值为jfs://emr-jfs/hbase-root-dir
说明 参数值中的emr-jfs为您配置的命名空间。
hbase.wal.dir 指定HBase的WAL存储目录到本地HDFS集群。
参数值为:
  • HA集群:hdfs://emr-cluster/hbase
  • 非HA集群:hdfs://emr-header-1:9000/hbase

创建集群

在创建集群时,添加软件自定义配置,创建集群详情请参见创建集群Smartdata-3-6
以JindoFS作为HBase后端为例,需要替换oss_bucket及对应路径,自定义配置如下。
[
  {
       "ServiceName":"SMARTDATA",
       "FileName":"namespace",
       "ConfigKey":"jfs.namespaces",
       "ConfigValue":"emr-jfs"
  },
  {
       "ServiceName":"SMARTDATA",
       "FileName":"namespace",
       "ConfigKey":"jfs.namespaces.emr-jfs.oss.uri",
       "ConfigValue":"oss://oss-bucket/jindoFS"
  },
  {
       "ServiceName":"SMARTDATA",
       "FileName":"namespace",
       "ConfigKey":"jfs.namespaces.emr-jfs.mode",
       "ConfigValue":"block"
  },
  {
       "ServiceName":"HBASE",
       "FileName":"hbase-site",
       "ConfigKey":"hbase.rootdir",
       "ConfigValue":"jfs://emr-jfs/hbase-root-dir"
  },
  {
       "ServiceName":"HBASE",
       "FileName":"hbase-site",
       "ConfigKey":"hbase.wal.dir",
       "ConfigValue":"hdfs://emr-cluster/hbase"
  }
]

常见问题

  • 问题现象:MapReduce程序使用TableSnapshotInputFormat读取Hbase数据时,报错信息如下。
    java.lang.IllegalArgumentException: Wrong FS: jfs://emr-jfs/tmp/..., expected: hdfs://emr-header-1.cluster-*:9000
        at org.apache.hadoop.fs.FileSYstem.checkPath(FileSystem.java:666)
        at org.apache.hadoop.hbase.regionServer.HRegionFileSystem.createRegionOnFileSystem(HRegionFileSYstem.java:875)
  • 问题分析:因为HBase提供的开源MapReduce程序存在缺陷,所以会校验HBase的数据路径跟HDFS中fs.defaultFS路径是否一致。
  • 解决方法:
    • 使用ExportSnapshot可以正常读取并导出Hbase数据。
    • 使用TableSnapshotInputFormat读取Hbase数据时,需要您在阿里云E-MapReduce控制台,HDFS服务的配置页面,在core-site页签,修改fs.defaultFS的参数值为jfs前缀的根目录。例如,修改fs.defaultFS的参数值为上述步骤中配置的jfs://emr-jfs/Core-site