Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el clúster de HBase, puede decidir si quiere quitar los datos después de que expiren, para liberar espacio de almacenamiento y ahorrar costos, porque los datos más antiguos ya no son necesarios o para cumplir con la normativa. Cuando sea necesario, deberá establecer TTL en una tabla del nivel ColumnFamily para que expire y elimine automáticamente los datos más antiguos. Aunque TTL también se puede establecer en el nivel de celda, establecerlo en el nivel ColumnFamily suele ser una opción más cómoda debido a la facilidad de administración, y porque un TTL de celda (expresado en ms) no puede extender la vigencia efectiva de una celda más allá de un valor TTL de nivel ColumnFamily (expresado en segundos); por lo tanto, solo los tiempos de retención más cortos en el nivel de celda pueden beneficiarse de establecer el TTL de nivel de celda.
A pesar de establecer el valor de TTL, es posible que observe que a veces no obtiene el efecto deseado; es decir, algunos datos no han expirado o el tamaño de almacenamiento no ha disminuido.
Requisitos previos
Siga los pasos y comandos proporcionados, abra dos conexiones SSH al clúster de HBase:
En una de las sesiones SSH, mantenga el shell de Bash predeterminado.
En la segunda sesión de SSH, inicie el shell de HBase ejecutando el siguiente comando.
hbase shell
Compruebe si el valor de TTL que quiere usar está configurado y si los datos expirados se quitaron del resultado de la consulta.
Siga los pasos que se indican para saber dónde se encuentra el problema. Para empezar, compruebe si el comportamiento se produce en una tabla específica o en todas las tablas. Si no está seguro de si el problema afecta a todas las tablas o a una tabla específica, considere como ejemplo un nombre de tabla específico para el inicio.
Compruebe primero que TTL se ha configurado en ColumnFamily para las tablas de destino. Ejecute el siguiente comando en la sesión SSH donde inició el shell de HBase y observe la salida. Una familia de columnas tiene el valor de TTL establecido en 50 segundos y ColumnFamily no tiene ningún valor configurado para TTL, por lo que aparece como "FOREVER" (los datos de esta familia de columnas no están configurados para su expiración).
describe 'table_name'
Si no está configurado, el valor de TTL predeterminado se establece en "FOREVER". Hay dos posibilidades por las que los datos no expiran según lo esperado y se quitan del resultado de la consulta.
- Si TTL tiene cualquier otro valor que no sea "FOREVER", observe el valor de la familia de columnas y anótelo en segundos (preste especial atención al valor correlacionado con la medida unitaria, ya que el valor de TTL de la celda está en ms, pero el TTL de la familia de columnas está en segundos) para confirmar si es el esperado. Si el valor observado no es correcto, corríjalo primero.
- Si el valor de TTL es "FOREVER" para todas las familias de columnas, configure TTL como primer paso y, a continuación, compruebe si los datos han expirado según lo previsto.
Si confirma que el valor de TTL está configurado y que tiene el valor correcto para ColumnFamily, el siguiente paso consiste en confirmar que los datos expirados ya no se muestran al realizar exámenes de tabla. Cuando expiren los datos, deben quitarse y no aparecer en los resultados de la tabla de examen. Ejecute el siguiente comando en el shell de HBase para comprobarlo.
scan 'table_name'
Compruebe el número y el tamaño de StoreFiles por tabla y por región para observar si hay cambios visibles después de la operación de compactación.
Antes de pasar al paso siguiente, vaya a la sesión SSH con el shell de Bash, ejecute el siguiente comando para comprobar el número actual de elementos StoreFiles y el tamaño de cada StoreFile que se muestra actualmente en el elemento ColumnFamily para el que se ha configurado el TTL. Tenga en cuenta primero la tabla y el valor ColumnFamily para los que va a realizar la comprobación y, a continuación, ejecute el siguiente comando en la sesión SSH (bash).
hdfs dfs -ls -R /hbase/data/default/table_name/ | grep "column_family_name"
Probablemente, en la salida se muestren habrá más resultados: un resultado para cada id. de región que forma parte de la tabla, y entre 0 y más resultados para los elementos StoreFiles presentes en cada nombre de región, para el valor ColumnFamily seleccionado. Para contar el número total de filas en el resultado anterior, ejecute el siguiente comando.
hdfs dfs -ls -R /hbase/data/default/table_name/ | grep "column_family_name" | wc -l
Compruebe el número y el tamaño de los elementos StoreFiles por tabla y por región después del vaciado.
Según el valor de TTL configurado para cada elemento ColumnFamily y la cantidad de datos que se escriben en la tabla para el elemento ColumnFamily de destino, parte de esos datos puede seguir existiendo en MemStore y no se escribirán como StoreFile en el almacenamiento. Por lo tanto, para asegurarse de que los datos se escriben en el almacenamiento como StoreFile, antes de alcanzar el tamaño máximo configurado de MemStore, puede ejecutar el siguiente comando en el shell de HBase para escribir datos de MemStore en StoreFile inmediatamente.
flush 'table_name'
Observe el resultado ejecutando de nuevo el comando en el shell de Bash.
hdfs dfs -ls -R /hbase/data/default/table_name/ | grep "column_family_name"
Se crea un archivo de almacén adicional que puede comparar con la salida de resultados anterior para cada región en la que se modifican los datos; asimismo, storeFile incluye el contenido actual de MemStore para esa región.
Compruebe el número y el tamaño de los elementos StoreFiles por tabla y por región después de la compactación principal.
En este momento, los datos de MemStore se han escrito en el almacenamiento de StoreFile, pero los datos expirados pueden seguir existiendo en uno o varios de los elementos StoreFiles actuales. Aunque las compactaciones menores pueden ayudar a eliminar algunas de las entradas expiradas, no se garantiza que quite todas ellas como compactación menor. No selecciona todos los StoreFiles para la compactación, mientras que la compactación mayor selecciona todos los StoreFiles para la compactación en esa región.
Además, hay otra situación en la que es posible que la compactación secundaria no quite celdas con valores de TTL expirados. Hay una propiedad denominada MIN_VERSIONS y solo tiene como valor predeterminado 0 (consulte la salida anterior que describe como "table_name" la propiedad MIN_VERSIONS=>'0'). Si esta propiedad está establecida en 0, la compactación secundaria quita las celdas con valores de TTL expirados. Si este valor es mayor que 0, es posible que la compactación secundaria no quite las celdas con valores de TTL expirados, aunque tenga en cuenta el archivo correspondiente como parte del proceso. Esta propiedad configura el número mínimo de versiones de una celda que se mantendrá, incluso si esas versiones tienen el valor de TTL expirado.
Para asegurarse de que los datos expirados también se eliminan del almacenamiento, es necesario ejecutar una operación de compactación principal. Cuando se completa la operación de compactación mayor, deja atrás un único StoreFile por región. En el shell de HBase, ejecute el comando para ejecutar una operación de compactación principal en la tabla:
major_compact 'table_name'
Según el tamaño de la tabla, la operación de compactación mayor puede tardar algún tiempo. Use el comando siguiente en el shell de HBase para supervisar el progreso. Si la compactación aún se está ejecutando cuando ejecuta el siguiente comando, obtendrá el resultado "MAJOR", pero si se completa la compactación, obtendrá el resultado "NINGUNO".
compaction_state 'table_name'
Cuando el estado de compactación aparece como "NONE" en el shell de HBase, si cambia rápidamente a Bash y ejecuta el comando.
hdfs dfs -ls -R /hbase/data/default/table_name/ | grep "column_family_name"
Observe que se ha creado un StoreFile adicional además de los anteriores por región por ColumnFamily y, después de un momento, que solo se mantiene el último StoreFile creado por región y por familia de columnas.
Para la región de ejemplo anterior, una vez transcurridos los momentos adicionales, podemos observar que permanece un único StoreFile. Además, el tamaño ocupado por este archivo en el almacenamiento se reduce debido a la compactación mayor. En este momento, los datos expirados que no se hayan eliminado antes (por otra compactación mayor), se eliminan poco después de que se ejecute la operación de compactación mayor actual.
Nota:
Para este ejercicio de solución de problemas, se desencadenó la compactación mayor manualmente. Pero, en la práctica, hacerlo manualmente con muchas tablas puede llevar mucho tiempo. De forma predeterminada, la compactación principal está deshabilitada en los clústeres de HDInsight. La razón principal para mantener deshabilitada la compactación mayor de forma predeterminada es que el rendimiento de las operaciones de tabla se ve afectado cuando hay una compactación mayor en curso. Sin embargo, puede habilitar la compactación mayor si configura el valor de la propiedad hbase.hregion.majorcompaction
en ms, o puede usar un trabajo de tabulación de tipo "cron" u otro sistema externo para programar la compactación en el momento más conveniente para usted y con una carga de trabajo inferior.
Pasos siguientes
Si su problema no aparece o es incapaz de resolverlo, visite uno de nuestros canales para obtener ayuda adicional:
Obtenga respuestas de expertos de Azure mediante el soporte técnico de la comunidad de Azure.
Póngase en contacto con @AzureSupport, la cuenta oficial de Microsoft Azure para mejorar la experiencia del cliente. Poniendo en contacto a la comunidad de Azure con los recursos adecuados:
answers
,support
yexperts
.Si necesita más ayuda, puede enviar una solicitud de soporte técnico desde Azure Portal. Seleccione Soporte técnico en la barra de menús o abra la central Ayuda + soporte técnico. Para obtener información más detallada, revise Creación de una solicitud de soporte técnico de Azure. La suscripción a Microsoft Azure incluye acceso al soporte técnico para facturación y administración de suscripciones. El soporte técnico se proporciona a través de uno de los planes de soporte técnico de Azure.