Diferencias de la API de HBase

Una forma de acceder a Cloud Bigtable es usar una versión personalizada del cliente de Apache HBase para Java. Por lo general, en el cliente personalizado se expone la misma API que en la instalación estándar de HBase. Las excepciones se describen en las siguientes secciones. Muchas de estas excepciones están relacionadas con tareas de administración que Cloud Bigtable controla automáticamente.

Familias de columnas

Cuando creas una familia de columnas, no puedes configurar el tamaño de bloque o el método de compresión con la shell de HBase o mediante la API de HBase. Cloud Bigtable administra el tamaño y compresión de bloque por ti.

Además, si usas la shell de HBase para obtener información sobre una tabla, siempre informará que cada familia de columnas no usa compresión. En realidad, Cloud Bigtable utiliza métodos de compresión patentados para todos sus datos.

Filas y celdas

  • No se puede definir una LCA para una fila individual.
  • No se puede establecer la visibilidad de las celdas individuales.
  • Las etiquetas no son compatibles. No se puede usar la clase org.apache.hadoop.hbase.Tag para agregar metadatos a celdas individuales.

Mutaciones y eliminaciones

  • Las operaciones Append en Cloud Bigtable son completamente atómicas para lectores y escritores. Los lectores nunca podrán leer una operación Append parcialmente aplicada.
  • Se puede borrar una versión específica de una columna específica en función de su marca de tiempo, pero no se pueden borrar todos los valores con una marca de tiempo específica en una fila ni familia de columnas determinada. Los siguientes métodos de la clase org.apache.hadoop.hbase.client.Delete no son compatibles:
    • new Delete(byte[] row, long timestamp)
    • addColumn(byte[] family, byte[] qualifier)
    • addFamily(byte[] family, long timestamp)
    • addFamilyVersion(byte[] family, long timestamp)

Solicitudes y análisis

Coprocesadores

Los coprocesadores no son compatibles. No se pueden crear clases que implementen la interfaz org.apache.hadoop.hbase.coprocessor.

Filtros

La siguiente tabla muestra qué filtros son compatibles actualmente. Todos estos filtros están en el paquete org.apache.hadoop.hbase.filter.

Compatible Compatible, con limitaciones No compatible
  1. Admite solo con una familia de columnas.
  2. Las llamadas a setLenAsVal(true) no son compatibles.
  3. Admite solo con el comparador BinaryComparator. Admite una sola familia de columnas, si se utiliza un operador distinto de EQUAL.
  4. Admite solo los siguientes comparadores:
    • BinaryComparator
    • RegexStringComparator sin marcadores y el operador EQUAL
  5. Si PageFilter está en FilterList, PageFilter solo funcionará de forma similar a HBase cuando se configure FilterList en MUST_PASS_ALL, que es el comportamiento predeterminado. Si FilterList se configura en MUST_PASS_ONE, Cloud Bigtable tratará a PageFilter como MUST_PASS_ALL y solo mostrará la cantidad de filas que correspondan al pageSize de PageFilter.
  6. PrefixFilter analiza filas en PrefixFilter en la mayoría de los casos. Sin embargo, si PrefixFilter es parte de FilterList y tiene el operador MUST_PASS_ONE, Cloud Bigtable no puede determinar el rango implícito y, en su lugar, realiza un análisis sin filtros desde la fila inicial hasta la última. Utiliza PrefixFilter con BigtableExtendedScan o una combinación de filtros para optimizar el rendimiento en este 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

Además, las siguientes diferencias afectan a los filtros de Cloud Bigtable:

  • En los filtros que usan el comparador de expresiones regulares (org.apache.hadoop.hbase.filter.RegexStringComparator), las expresiones regulares usan sintaxis RE2 y no la sintaxis de Java.
  • No se admiten los filtros personalizados. No puedes crear clases que hereden de org.apache.hadoop.hbase.filter.Filter.

Administración

En esta sección, se describen los métodos en la interfaz org.apache.hadoop.hbase.client.Admin que no están disponibles en Cloud Bigtable, o que se comportan de manera diferente en Cloud Bigtable que en HBase.

La mayoría de los métodos son innecesarios en Cloud Bigtable, porque las tareas de administración se controlan automáticamente. Algunos métodos no están disponibles porque se relacionan con características que no son compatibles con Cloud Bigtable.

Tareas de mantenimiento general

Cloud Bigtable controla la mayoría de las tareas de mantenimiento automáticamente. Como resultado, los siguientes métodos no están disponibles:

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

Espacios de nombres

Cloud Bigtable no utiliza espacios de nombres. Puedes usar los prefijos de clave de fila para simular los espacios de nombres. Los siguientes métodos no están disponibles:

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

Administración de regiones

Cloud Bigtable usa tablets, que son similares a las regiones, y las administra automáticamente. Como resultado, los siguientes métodos no están disponibles:

  • 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áneas

Los siguientes métodos no están disponibles actualmente:

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

Administración de tablas

Las tareas como la compactación de tablas se controlan automáticamente. Como resultado, los siguientes métodos no están disponibles:

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

Coprocesadores

Cloud Bigtable no es compatible con los coprocesadores. Como resultado, los siguientes métodos no están disponibles:

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

Procedimientos distribuidos

Cloud Bigtable no es compatible con los procedimientos distribuidos. Como resultado, los siguientes métodos no están disponibles:

  • 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)
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Cloud Bigtable