HBase API との違い

Cloud Bigtable にアクセスする方法の 1 つは、Java 用 Apache HBase クライアントのカスタマイズ バージョンを使用することです。通常、カスタマイズされたクライアントでは HBase の標準インストールと同じ API が公開されています。例外については以下のセクションで説明しています。例外のほとんどは、Cloud Bigtable で自動的に処理される管理タスクに関するものです。

列ファミリー

列ファミリーを作成した場合、HBase shell や HBase API からはブロックサイズや圧縮方法を構成できません。ブロックサイズと圧縮は Cloud Bigtable で自動的に管理されるためです。

また、HBase shell を使用してテーブル情報を取得すると、列ファミリーはいずれも圧縮を使用しないというレポートが常に HBase shell から返されますが、実際には、Cloud Bigtable 独自の圧縮方法がすべてのデータに自動的に使用されます。

行とセル

  • 個々の行に対して ACL を定義できません。
  • 個々のセルの表示 / 非表示を設定できません。
  • タグはサポートされていません。クラス org.apache.hadoop.hbase.Tag を使用して個々のセルにメタデータを追加することはできません。

mutation と削除

  • Cloud Bigtable の Append オペレーションは、リーダーとライターのどちらにとっても完全にアトミックです。リーダーは、部分的に適用された Append オペレーションを読み取ることはできません。
  • 特定の列の特定のバージョンをタイムスタンプに基づいて削除することはできますが、指定した列ファミリーまたは行で特定のタイムスタンプを持つすべての値を削除することはサポートされていません。クラス org.apache.hadoop.hbase.client.Delete の以下のメソッドはサポートされていません。
    • new Delete(byte[] row, long timestamp)
    • addColumn(byte[] family, byte[] qualifier)
    • addFamily(byte[] family, long timestamp)
    • addFamilyVersion(byte[] family, long timestamp)

取得とスキャン

コプロセッサ

コプロセッサはサポートされていません。インターフェース org.apache.hadoop.hbase.coprocessor を実装するクラスは作成できません。

フィルタ

現在サポートされているフィルタを次の表に示します。これらのフィルタはすべてパッケージ org.apache.hadoop.hbase.filter に入っています。

サポート対象 制限付きでサポート サポート対象外
  1. 1 つの列ファミリーだけがサポートされています。
  2. setLenAsVal(true) の呼び出しはサポートされていません。
  3. BinaryComparator コンパレータだけがサポートされています。EQUAL 以外の演算子が使用されている場合は、1 つの列ファミリーだけがサポートされています。
  4. 次のコンパレータだけがサポートされています。
    • BinaryComparator
    • フラグなしで EQUAL 演算子付きの RegexStringComparator
  5. FilterListPageFilter があると、FilterListMUST_PASS_ALL (デフォルト動作)に設定されている場合だけ、PageFilter は HBase と同じように動作します。FilterListMUST_PASS_ONE に設定されている場合、Cloud Bigtable では PageFilterMUST_PASS_ALL として扱われ、PageFilter の pageSize に該当する行の数だけが返されます。
  6. ほとんどの場合、PrefixFilterPrefixFilter 内の行をスキャンします。ただし、PrefixFilterFilterList の一部であり、演算子 MUST_PASS_ONE を含む場合、Cloud Bigtable ではこの場合が意味する範囲を判別できません。代わりに、開始列から停止列までをフィルタなしでスキャンします。このような場合にパフォーマンスを最適化するには、PrefixFilter を使用する際に BigtableExtendedScan を併用するか、フィルタの組み合わせを併用します。
ColumnPrefixFilter
FamilyFilter
FilterList
FuzzyRowFilter
MultipleColumnPrefixFilter
MultiRowRangeFilter
PrefixFilter 6
RandomRowFilter
TimestampsFilter
ColumnCountGetFilter 1
ColumnPaginationFilter 1
ColumnRangeFilter 1
FirstKeyOnlyFilter 1
KeyOnlyFilter 2
PageFilter 5
QualifierFilter 3
RowFilter 1、4
SingleColumnValueExcludeFilter 1、4
SingleColumnValueFilter 4
ValueFilter 4
DependentColumnFilter
FirstKeyValueMatchingQualifiersFilter
InclusiveStopFilter
ParseFilter
SkipFilter
WhileMatchFilter

また、Cloud Bigtable のフィルタは以下の違いによる影響を受けます。

  • 正規表現コンパレータ(org.apache.hadoop.hbase.filter.RegexStringComparator)を使用するフィルタでは、Java 構文ではなく RE2 構文の正規表現が使用されます。
  • カスタム フィルタはサポートされていません。org.apache.hadoop.hbase.filter.Filter の継承クラスを作成することはできません。

管理

このセクションでは、インターフェース org.apache.hadoop.hbase.client.Admin のメソッドのうち、Cloud Bigtable では使用できないメソッドや、Cloud Bigtable では HBase と異なる動作をするメソッドについて説明します。

Cloud Bigtable では管理タスクが自動的に処理されるため、これらのメソッドのほとんどは不要です。Cloud Bigtable ではサポートされていない機能に関連するいくつかのメソッドがあり、それらは使用できません。

全般的なメンテナンス タスク

Cloud Bigtable ではほとんどのメンテナンス タスクが自動的に処理されます。そのため、以下のメソッドは使用できません。

  • abort(String why, Throwable e)
  • balancer()
  • enableCatalogJanitor(boolean enable)
  • getMasterInfoPort()
  • getOperationTimeout()
  • isCatalogJanitorEnabled()
  • rollWALWriter(ServerName serverName)
  • runCatalogScan()
  • setBalancerRunning(boolean on, boolean synchronous)
  • shutdown()
  • stopMaster()
  • updateConfiguration()
  • updateConfiguration(ServerName serverName)

名前空間

Cloud Bigtable では名前空間は使用されません。行キー接頭辞を使用して名前空間をシミュレートできます。以下のメソッドはサポートされていません。

  • createNamespace(NamespaceDescriptor descriptor)
  • deleteNamespace(String name)
  • getNamespaceDescriptor(String name)
  • listNamespaceDescriptors()
  • listTableDescriptorsByNamespace(String name)
  • listTableNamesByNamespace(String name)
  • modifyNamespace(NamespaceDescriptor descriptor)

リージョン管理

Cloud Bigtable では、リージョンに類似したタブレットが使用されています。Cloud Bigtable ではユーザーのタブレットが自動的に管理されます。そのため、以下のメソッドは使用できません。

  • assign(byte[] regionName)
  • closeRegion(byte[] regionname, String serverName)
  • closeRegion(ServerName sn, HRegionInfo hri)
  • closeRegion(String regionname, String serverName)
  • closeRegionWithEncodedRegionName(String encodedRegionName, String serverName)
  • compactRegion(byte[] regionName)
  • compactRegion(byte[] regionName, byte[] columnFamily)
  • compactRegionServer(ServerName sn, boolean major)
  • flushRegion(byte[] regionName)
  • getAlterStatus(byte[] tableName)
  • getAlterStatus(TableName tableName)
  • getCompactionStateForRegion(byte[] regionName)
  • getOnlineRegions(ServerName sn)
  • majorCompactRegion(byte[] regionName)
  • majorCompactRegion(byte[] regionName, byte[] columnFamily)
  • mergeRegions(byte[] encodedNameOfRegionA, byte[] encodedNameOfRegionB, boolean forcible)
  • move(byte[] encodedRegionName, byte[] destServerName)
  • offline(byte[] regionName)
  • splitRegion(byte[] regionName)
  • splitRegion(byte[] regionName, byte[] splitPoint)
  • stopRegionServer(String hostnamePort)
  • unassign(byte[] regionName, boolean force)

スナップショット

以下のメソッドは、現時点ではサポートされていません。

  • cloneSnapshot(byte[] snapshotName, TableName tableName)
  • cloneSnapshot(String snapshotName, TableName tableName)
  • deleteSnapshot(byte[] snapshotName)
  • deleteSnapshot(String snapshotName)
  • deleteSnapshots(Pattern pattern)
  • deleteSnapshots(String regex)
  • isSnapshotFinished(HBaseProtos.SnapshotDescription snapshot)
  • listSnapshots()
  • listSnapshots(Pattern pattern)
  • listSnapshots(String regex)
  • restoreSnapshot(byte[] snapshotName)
  • restoreSnapshot(String snapshotName)
  • restoreSnapshot(byte[] snapshotName, boolean takeFailSafeSnapshot)
  • restoreSnapshot(String snapshotName, boolean takeFailSafeSnapshot)
  • snapshot(HBaseProtos.SnapshotDescription snapshot)
  • snapshot(byte[] snapshotName, TableName tableName)
  • snapshot(String snapshotName, TableName tableName)
  • snapshot(String snapshotName, TableName tableName, HBaseProtos.SnapshotDescription.Type type)
  • takeSnapshotAsync(HBaseProtos.SnapshotDescription snapshot)

テーブル管理

テーブルのコンパクションなどのタスクは自動的に処理されます。そのため、以下のメソッドは使用できません。

  • compact(TableName tableName)
  • compact(TableName tableName, byte[] columnFamily)
  • flush(TableName tableName)
  • getCompactionState(TableName tableName)
  • majorCompact(TableName tableName)
  • majorCompact(TableName tableName, byte[] columnFamily)
  • modifyTable(TableName tableName, HTableDescriptor htd)
  • split(TableName tableName)
  • split(TableName tableName, byte[] splitPoint)

コプロセッサ

Cloud Bigtable ではコプロセッサはサポートされていません。そのため、以下のメソッドは使用できません。

  • coprocessorService()
  • coprocessorService(ServerName serverName)
  • getMasterCoprocessors()

分散プロシージャ

Cloud Bigtable では分散プロシージャはサポートされていません。そのため、以下のメソッドは使用できません。

  • execProcedure(String signature, String instance, Map<String, String> props)
  • execProcedureWithRet(String signature, String instance, Map<String, String> props)
  • isProcedureFinished(String signature, String instance, Map<String, String> props)
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Bigtable ドキュメント