與 HBase API 的差異

其中一種存取 Cloud Bigtable 的方式,是使用 Java 適用的 Apache Hbase 用戶端的自訂版本。一般而言,自訂用戶端會公開相同的 API 做為 HBase 的標準安裝。例外狀況將會在以下各節中說明。其中很多例外狀況與 Cloud Bigtable 自動處理的管理任務有關。

資料欄系列

當您要建立資料欄系列時,將無法使用 HBase shell 或是 透過 HBase API 來設置區塊大小或壓縮方式。Cloud Bigtable 會為您管理區塊大小及壓縮。

此外,當您使用 HBase shell 來取得資料表的資訊時,HBase 一律會回報各個資料欄系列不使用壓縮。實際上,Cloud Bigtable 對您所有的資料使用專屬的壓縮方式。

資料列與儲存格

  • 您無法為單一的資料列定義存取控制清單 (ACL)。
  • 您無法設置單一儲存格的瀏覽權限。
  • 不支援標記。您無法使用 org.apache.hadoop.hbase.Tag 類別將中繼資料加入個別儲存格。

變異和刪除操作

  • 您只能在 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. 只支援單一的資料欄系列。
  2. 不支援呼叫 setLenAsVal(true)
  3. 僅支援 BinaryComparator 比較子。若 使用 EQUAL 以外的任何運算子,僅支援單一的 資料欄系列。
  4. 僅支援以下比較子:
    • BinaryComparator
    • RegexStringComparator 沒有標記以及 EQUAL 運算子
  5. 如果 PageFilterFilterList 之中,當 FilterList 設定為 MUST_PASS_ALL (預設) 時,PageFilter 僅會如同 HBase 般運作。如果將 FilterList 設定為 MUST_PASS_ONE,Cloud BigTable 會將 PageFilter 視為 MUST_PASS_ALL,且只會傳回與 PageFilter 頁面大小相符合的資料列數量。
  6. 在大多數情況下,PrefixFilter 會掃描 PrefixFilter 中的資料列。不過,如果 PrefixFilter 屬於 FilterList 的一部分且有運算子 MUST_PASS_ONE,Cloud BigTable 則無法判斷默示範圍,而會改為執行從開始資料列到停止資料列的未篩選掃描。將 PrefixFilterBigtableExtendedScan 搭配使用或使用篩選器組合,以在這種情況下發揮最大效能。
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) 的篩選器中,規則運算式會使用 RE2 語法,而非 Java 語法。
  • 不支援自訂篩選器。您無法建立從 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 說明文件