LindormTable utiliza una estructura de almacenamiento Log-Structured Merge-Tree (LSM-Tree). Obtener un conteo exacto de filas requiere un escaneo completo de la tabla; entre más grande sea la tabla, más tiempo tomará la operación. Evite ejecutar operaciones COUNT con frecuencia.
Lindorm
A continuación se muestran las diferencias entre el conteo exacto y el conteo estimado de filas de una tabla amplia de Lindorm:
|
Conteo exacto de filas |
Conteo estimado de filas |
|
|
Método de estadísticas |
Escanea toda la tabla para obtener el conteo preciso de filas. |
Obtiene los metadatos directamente a nivel de archivo, por lo que el resultado puede diferir del tamaño real de la tabla. |
|
Rendimiento de las estadísticas |
Tarda mucho en completarse y genera una carga adicional alta cuando se ejecuta de forma concurrente. |
Se completa rápidamente y genera una carga adicional baja cuando se ejecuta de forma concurrente. |
|
Escenarios aplicables |
Ideal para escenarios como la verificación de datos antes y después de una migración. |
Útil cuando la página de la aplicación muestra la tendencia de cambio en el tamaño de la tabla. |
Métodos para obtener el conteo exacto de filas de una tabla amplia
Puede usar los siguientes métodos para obtener el conteo exacto de filas de una tabla amplia. Se recomienda elegir un método según su escenario de negocio:
Contar filas con Lindorm SQL suele ser más rápido que usar HBase RowCounter, ya que Lindorm distribuye y procesa automáticamente la operación COUNT en paralelo (ejecución con varios hilos), mientras que HBase Shell cuenta con un solo hilo. Sin embargo, COUNT aún necesita escanear toda la tabla y el tiempo de espera predeterminado es de 120 segundos. La operación reporta un error cuando se agota este tiempo. Para tablas grandes, puede aumentar el tiempo de espera mediante el HINT en SQL. Las velocidades de procesamiento de Lindorm SQL pueden alcanzar cientos de miles de filas por nodo por segundo. Dado que COUNT consume muchos recursos de CPU, no lo ejecute durante las horas pico del negocio.
Obtener el conteo exacto de filas de una tabla amplia mediante SQL
Puede usar Lindorm-cli, Use a MySQL client to connect to and use LindormTable o JDBC para conectarse a Lindorm y ejecutar comandos SQL.
Por ejemplo, puede ejecutar el siguiente comando SQL para contar las filas de table_name y establecer el tiempo de espera de ejecución en 5 minutos.
SELECT /*+ _l_operation_timeout_(300000) */ COUNT(*) FROM table_name;
El resultado es el siguiente:
+--------+
| EXPR$0 |
+--------+
| 160000 |
+--------+
Contar exactamente las filas de una tabla requiere un escaneo completo. Ejecute esta operación con precaución. Si el volumen de datos supera el millón de filas, se recomienda lo siguiente:
-
Usar índices de búsqueda para acelerar el proceso: Query data in a wide table using a search index.
1843_v1_4_0.xdita">.
-
Agregar el *HINT
_l_operation_timeoutpara aumentar el tiempo de espera del comando:* HINT.de una tabla amplia mediante HBase Shell
Conéctese a LindormTable mediante HBase Shell. Para obtener más información, consulte Access LindormTable using Lindorm Shell.
Usar el comando COUNT (recomendado)
El comando COUNT en HBase Shell proporciona el conteo exacto de filas de una tabla de HBase. Su funcionamiento consiste en escanear todos los datos de la tabla por lotes y contarlos. Por lo tanto, se recomienda ejecutar el comando COUNT desde un cliente ECS en la misma VPC. Si ejecuta el comando COUNT a través de Internet, el uso de la red será alto y la eficiencia de las estadísticas disminuirá. La velocidad de escaneo varía según la estructura de la tabla. El escaneo completo de la tabla con el comando COUNT puede procesar menos de 100,000 filas por segundo. Ejecute el siguiente comando para contar el total de filas de la tabla:
count 'table_name'El resultado es el siguiente:

Usar el complemento HBase RowCounter para acelerar el proceso
El comando count en HBase Shell obtiene el conteo exacto de filas de una tabla amplia, pero resulta lento en tablas grandes. El complemento RowCounter inicia una tarea MR pseudodistribuida local para ejecutar la operación COUNT. De forma predeterminada, el complemento se ejecuta en un solo hilo y su velocidad es similar a la del comando COUNT de HBase Shell. Para mejorar la velocidad, puede especificar
mapreduce.local.map.tasks.maximumy aumentar así la cantidad de hilos. La ejecución en paralelo con varios hilos acelera considerablemente la recopilación de estadísticas.-
La cantidad de hilos debe ser menor o igual al número de regiones de la tabla.
be less than or equal to the number of regions in the table.be less than or equal to the number of regions in the table.
-
Aumentar la cantidad de hilos puede generar una carga alta en el clúster y afectar los servicios en línea. Establezca este valor según sus necesidades de negocio.
ause high cluster load and affect online services. Set the number based on business requirements.
Por ejemplo, ejecute los siguientes comandos en HBase Shell para usar el complemento RowCounter y contar las filas de una tabla amplia de Lindorm.
Ejecute los siguientes comandos en HBase Shell para contar las filas de una tabla amplia de Lindorm.
-
Use el complemento RowCounter para contar el total de filas de la tabla de destino (table).
the total rows of the target table (table).
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "table_name"-
Use el complemento RowCounter para contar el total de filas de la tabla (table) con 16 hilos concurrentes.
l rows of the table (table) with 16 concurrent threads.
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter -Dmapreduce.local.map.tasks.maximum=16 "table_name"-
Use el complemento RowCounter para contar el total de filas de la tabla de destino (table) en el namespace ns.
s of the target table (table) in namespace ns.
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "ns:table_name"El resultado de las estadísticas del complemento RowCounter se guarda en el archivo
hbase.logdentro del directorio Log, como se muestra en la siguiente imagen.
-
Métodos para obtener el conteo estimado de filas de una tabla amplia
Puede usar los siguientes métodos para obtener el conteo estimado de filas de una tabla amplia:
Obtener el conteo estimado de filas de una tabla amplia mediante SQL
A diferencia del comando SELECT, que obtiene el conteo exacto de filas, el conteo estimado se obtiene con el siguiente comando SHOW:
Esta función requiere LindormTable versión 2.8.2.6 o posterior y Lindorm SQL versión 2.8.2.6 o posterior.
SHOW ESTIMATED ROWS FROM table_name;
Se devuelve el siguiente resultado:
+---------------------+
| ESTIMATED_ROW_COUNT |
+---------------------+
| 15000 |
+---------------------+
Consultar el conteo estimado de filas de una tabla en el sistema de administración del clúster
Primero, Log on to the cluster management system.
En el sistema de administración del clúster de Lindorm, puede consultar un conteo aproximado de filas de una tabla en la página Overview. Este valor estimado se calcula al sumar los metadatos de conteo de filas de los archivos de datos. Si el usuario ejecuta operaciones de actualización o eliminación, una misma fila de datos podría distribuirse en varios archivos. Además, los metadatos de conteo de filas de un archivo se recopilan cuando este se genera. Si el usuario utiliza la función TTL, es posible que algunos datos del archivo hayan caducado, lo cual puede provocar que el conteo estimado difiera del conteo real.
En el sistema de administración del clúster de Lindorm, haga clic en Overview en el panel de navegación izquierdo. En el área Current IDC, busque la tabla de destino. El conteo de filas se muestra en la columna Rows.
Si la tabla contiene datos pero el conteo estimado de filas es 0, la versión secundaria del motor de tablas amplias de Lindorm es demasiado antigua. Actualice la versión secundaria. Para obtener información sobre cómo actualizarla, consulte Upgrade the minor engine version of a Lindorm instance.