Diferenças da API HBase

Uma maneira de acessar o Cloud Bigtable é usar uma versão personalizada do cliente Apache HBase para Java. Em geral, o cliente personalizado expõe a mesma API de uma instalação padrão do HBase. As exceções estão descritas nas seções a seguir. Muitas dessas exceções estão relacionadas a tarefas de gerenciamento processadas automaticamente pelo Cloud Bigtable.

Grupos de colunas

Quando um grupo de colunas é criado, você não configura o tamanho do bloco ou o método de compactação, seja com o shell do HBase ou com a HBase API. O Cloud Bigtable gerencia o tamanho do bloco e a compressão para você.

Além disso, se você usar o shell do HBase para receber informações de uma tabela, o shell do HBase sempre informará que nenhum grupo de colunas usa a compressão. Na realidade, o Cloud Bigtable usa métodos de compactação reservados para todos os seus dados.

Linhas e células

  • Não é possível definir uma ACL para uma linha individual.
  • Não é possível definir a visibilidade de células individuais.
  • Não há compatibilidade com tags. Não é possível usar a classe org.apache.hadoop.hbase.Tag para adicionar metadados a células individuais.

Mutações e exclusões

  • As operações Append no Cloud Bigtable são totalmente atômicas para leitores e gravadores. Os leitores jamais conseguirão ler uma operação Append aplicada parcialmente.
  • É possível excluir uma determinada versão de uma coluna específica com base no carimbo de data/hora dela, mas você não pode excluir todos os valores com um carimbo de data/hora específico em uma determinada linha ou grupo de colunas. Os seguintes métodos na classe org.apache.hadoop.hbase.client.Delete não são compatíveis:
    • new Delete(byte[] row, long timestamp)
    • addColumn(byte[] family, byte[] qualifier)
    • addFamily(byte[] family, long timestamp)
    • addFamilyVersion(byte[] family, long timestamp)

Recebimentos e verificações

Coprocessadores

Coprocessadores não são compatíveis. Não é possível criar classes que implementam a interface org.apache.hadoop.hbase.coprocessor.

Filtros

A tabela a seguir mostra quais filtros são compatíveis atualmente. Todos esses filtros estão no pacote org.apache.hadoop.hbase.filter.

Compatível Compatível, com limitações Não compatível
  1. Compatível somente com uma única família de colunas.
  2. A chamada de setLenAsVal(true) não é compatível.
  3. Compatível apenas com o comparador BinaryComparator. Se outro operador que não seja EQUAL for utilizado, apenas uma única família de colunas será compatível.
  4. É compatível apenas com os seguintes comparadores:
    • BinaryComparator
    • RegexStringComparator sem sinalizações e o operador EQUAL
  5. Se um PageFilter estiver em um FilterList, PageFilter só funcionará de maneira semelhante ao HBase quando FilterList estiver definido como MUST_PASS_ALL, que é o comportamento padrão. Se FilterList estiver definido como MUST_PASS_ONE, o Cloud Bigtable tratará PageFilter como um MUST_PASS_ALL e só retornará um número de linhas correspondente ao pageSize do PageFilter.
  6. PrefixFilter procura linhas no PrefixFilter na maioria dos casos. No entanto, se PrefixFilter parte de uma FilterList e tiver o operador MUST_PASS_ONE, o Cloud Bigtable não poderá determinar o intervalo implícito e, em vez disso, executará uma varredura não filtrada da linha de início até a linha de parada. Use PrefixFilter com BigtableExtendedScan ou uma combinação de filtros para otimizar o desempenho neste caso.
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

Além disso, as seguintes diferenças afetam os filtros do Cloud Bigtable:

  • Em filtros que usam o comparador de expressões regulares (org.apache.hadoop.hbase.filter.RegexStringComparator), as expressões regulares usam a sintaxe RE2, e não Java.
  • Filtros personalizados não são compatíveis. Não é possível criar classes que herdam de org.apache.hadoop.hbase.filter.Filter.

Administração

Nesta seção, descrevemos os métodos na interface org.apache.hadoop.hbase.client.Admin que não estão disponíveis no Cloud Bigtable ou que se comportam de maneira diferente no Cloud Bigtable e no HBase.

A maioria desses métodos é desnecessária no Cloud Bigtable, já que as tarefas de gerenciamento são tratadas automaticamente. Alguns métodos não estão disponíveis porque se referem a recursos com os quais o Cloud Bigtable não é compatível.

Tarefas gerais de manutenção

O Cloud Bigtable gerencia a maioria das tarefas de manutenção automaticamente. Como resultado, os seguintes métodos não estão disponíveis:

  • 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)

Namespaces

O Cloud Bigtable não usa namespaces. Use os prefixos de chave de linha para simular namespaces. Os seguintes métodos não estão disponíveis:

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

Gerenciamento de regiões

O Cloud Bigtable usa blocos, que são semelhantes a regiões. Ele gerencia esses blocos automaticamente. Como resultado, os seguintes métodos não estão disponíveis:

  • 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)

Instantâneos

Os métodos a seguir não estão disponíveis no momento:

  • 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)

Gerenciamento de tabela

Tarefas como a compactação de tabela são tratadas automaticamente. Como resultado, os seguintes métodos não estão disponíveis:

  • 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)

Coprocessadores

O Cloud Bigtable não é compatível com coprocessadores. Como resultado, os seguintes métodos não estão disponíveis:

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

Procedimentos distribuídos

O Cloud Bigtable não é compatível com procedimentos distribuídos. Como resultado, os seguintes métodos não estão disponíveis:

  • 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)
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Bigtable