Diferenças entre o HBase e o Cloud Bigtable

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. Nesta página, descrevemos as diferenças entre o cliente HBase do Cloud Bigtable para Java e uma instalação padrão do HBase. Muitas dessas diferenças 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 API HBase. O Cloud Bigtable gerencia o tamanho do bloco e a compactação para você.

Além disso, quando usado para receber informações de uma tabela, o shell do HBase sempre informará que nenhum grupo de colunas usa a compactação. Na realidade, o Cloud Bigtable usa métodos de compactação exclusivos 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 não 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 um único grupo 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 um único grupo 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 uma 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 for 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:

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)

Grupos de localidades

O Cloud Bigtable não permite especificar grupos de localidades para grupos de colunas. Como resultado, não é possível chamar métodos HBase que retornam um grupo de localidades.

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)

Snapshots

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 tabelas

Tarefas como a compactação de tabelas 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