すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:JindoFS を HBase のストレージバックエンドとして使用する

最終更新日:Jan 11, 2025

このトピックでは、JindoFS を HBase のストレージバックエンドとして使用する方法について説明します。

背景情報

HBase は Hadoop エコシステムのリアルタイムデータベースであり、高い書き込みパフォーマンスを提供します。E-MapReduce(EMR)では、JindoFS またはオブジェクトストレージサービス(OSS)を HBase のストレージバックエンドとして使用できます。 JindoFS と OSS は HDFS よりも柔軟性があります。
説明 V3.36.0 以降の EMR クラスタを使用することをお勧めします。

JindoFS の構成

このトピックの例では、emr-jfs という名前のネームスペースが EMR V3.36.0 クラスタ用に作成され、oss-bucket という名前の OSS バケットがネームスペース用に構成されています。
  • jfs.namespaces=emr-jfs
  • jfs.namespaces.emr-jfs.oss.uri=oss://<oss-bucket>/oss-dir
  • jfs.namespaces.emr-jfs.mode=block

HBase のストレージパスの指定

HBase のストレージパスを指定するには、[hbase.rootdir] パラメータを [hbase-site] 構成ファイルで JindoFS または OSS パスに設定し、[hbase.wal.dir] パラメータをファイル内のローカル HDFS パスに設定する必要があります。このようにして、EMR クラスタの HDFS サービスは、Write-Ahead Logging(WAL)ファイルの保存に使用されます。クラスタをリリースするには、クラスタ内のテーブルを無効にし、WAL ファイルの更新が HFile に書き込まれていることを確認する必要があります。

パラメータ説明
hbase.rootdirJindoFS または OSS 内の HBase のルートディレクトリ。
jfs://emr-jfs/hbase-root-dir に設定します。
説明 emr-jfs は構成したネームスペースです。
hbase.wal.dirHBase の WAL ファイルが保存されるローカル HDFS パス。
値:
  • 高可用性(HA)クラスタの場合は、hdfs://emr-cluster/hbase に設定します。
  • 非 HA クラスタの場合は、hdfs://emr-header-1:9000/hbase に設定します。

クラスタの作成

クラスタを作成する場合は、カスタムソフトウェア設定をオンにし、カスタムソフトウェア構成を追加します。クラスタの作成方法の詳細については、「クラスタの作成」をご参照ください。Smartdata-3-6
たとえば、JindoFS を HBase のストレージバックエンドとして使用するには、次のカスタム構成を追加します。oss_bucket と OSS パスは、実際の OSS バケット名と OSS パスに置き換える必要があります。
[
  {
       "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"  // OSS バケット名とパスを指定します
  },
  {
       "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"
  }
]

FAQ

  • 問題の説明: 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) // HBase データパスが fs.defaultFS と一致するかどうかを確認します
        at org.apache.hadoop.hbase.regionServer.HRegionFileSystem.createRegionOnFileSystem(HRegionFileSYstem.java:875)
  • 原因: HBase に基づいて開発されたオープンソースの MapReduce プログラムに欠陥があります。プログラムがデータを読み取るときに、HBase のデータパスが HDFS の fs.defaultFS パラメータで指定されたパスと同じかどうかを確認します。パスが一致しないため、エラーが返されます。
  • 解決策:
    • ExportSnapshot を使用して HBase データを読み取り、エクスポートできます。
    • TableSnapshotInputFormat を使用して HBase データを読み取る場合は、Alibaba Cloud EMR コンソール のクラスタの HDFS サービスページに移動し、[構成] タブをクリックする必要があります。次に、[サービス構成] セクションの [core-site] タブの [fs.defaultfs] パラメータの値を、プレフィックスが jfs のルートディレクトリに変更します。たとえば、[fs.defaultfs] パラメータの値を、このトピックのサンプルコードで構成されている [jfs://emr-jfs/] に変更できます。Core-site