使用JindoFS作為HBase的底層儲存

更新時間:
Copy as MD

本文為您介紹如何使用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的值為JindoFSOSS地址,修改參數hbase.wal.dir的值為本地的HDFS地址,通過本地HDFS叢集儲存WAL檔案。如果要釋放叢集,需要先Disable table,確保WAL檔案已經完全更新到HFile。

參數 描述
hbase.rootdir 指定HBaseROOT儲存目錄到JindoFSOSS。
參數值為jfs://emr-jfs/hbase-root-dir
說明 參數值中的emr-jfs為您配置的命名空間。
hbase.wal.dir 指定HBaseWAL儲存目錄到本地HDFS叢集。
參數值為:
  • HA叢集:hdfs://emr-cluster/hbase
  • HA叢集:hdfs://emr-header-1:9000/hbase

建立叢集

在建立叢集時,添加軟體自訂配置,建立叢集詳情請參見建立叢集。選擇產品版本EMR-3.36.0,在進階設定地區開啟軟體自訂配置開關,在 JSON 文字框中填寫 SMARTDATA 服務的配置項,將 ConfigValue 設定為 emr-jfs
以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的資料路徑跟HDFSfs.defaultFS路徑是否一致。
  • 解決方案:
    • 使用ExportSnapshot可以正常讀取並匯出Hbase資料。
    • 使用TableSnapshotInputFormat讀取Hbase資料時,需要您在阿里雲E-MapReduce控制台,HDFS服務的配置頁面,在core-site頁簽,修改fs.defaultFS的參數值為jfs首碼的根目錄。例如,修改fs.defaultFS的參數值為上述步驟中配置的jfs://emr-jfs/