本文為您介紹如何使用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