es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se recrea una tabla existente de HBASE para agregar claves saladas?

Tengo una tabla HBASE con cientos de miles de filas y estamos experimentando problemas de hotspotting.

Me gustaría recrear esta tabla con claves de filas saladas.

He intentado “org.apache.hadoop.hbase.mapreduce.Import/CopyTable” en una nueva tabla salada, pero no agrega un prefijo de sal a las claves de fila.

La única solución que he experimentado que funcionó en la migración de filas con prefijo fue una consulta Phoenix:
UPSERT INTO TABLE_SALTED SELECT * FROM TABLE

Sin embargo, esto es MUY ineficiente y tarda demasiado tiempo.

¿Cómo puedo salar una tabla existente de HBASE / Phoenix con un tiempo de inactividad mínimo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para salar una tabla existente de HBASE/Phoenix con un tiempo de inactividad mínimo, puedes seguir estos pasos:

    1. Crear una nueva tabla con claves de fila saladas: Crea una nueva tabla con el número de cubos de sal que deseas utilizar y con las mismas familias de columnas que la tabla existente.

    Ejemplo de comando para crear una tabla nueva de HBASE con 10 cubos de sal:

    create 'nueva_tabla', {SPLITS => (1..10).map{|i| "usuario#{i.to_s.rjust(2,'0')}"}}
    
    1. Utilizar un trabajo de mapreduce para transferir datos: Usa un trabajo de mapreduce para transferir datos de la tabla antigua a la nueva tabla. Puedes utilizar la clase “org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormat” como formato de entrada para leer datos de la tabla antigua.

    Ejemplo de comando para ejecutar un trabajo de mapreduce:

    hadoop jar <ruta-a-hbase>/lib/hbase-server.jar \
    org.apache.hadoop.hbase.mapreduce.CopyTable \
    -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 \
    -Dhbase.client.scanner.caching=10000 \
    -Dmapreduce.output.fileoutputformat.compress=false \
    -Dmapred.reduce.tasks=384 \
    -Dmapred.map.tasks.speculative.execution=false \
    -Dmaptransduce.reduce.speculative=false \
    -Dhbase.bulkload.staging.dir=/bulkload_out \
    -Dimport.snapshot.name=<nombre-del-snapshot> \
    -Dimport.table.name=<nueva-tabla> \
    -Dimport.salt.buckets=<num-de-cubos> \
    <tabla-antigua>
    
    1. Eliminar la tabla antigua: Una vez que los datos hayan sido transferidos, puedes eliminar la tabla antigua.
    disable '<tabla-antigua>'
    drop '<tabla-antigua>'
    
    1. Renombrar la nueva tabla con el nombre de la tabla antigua: Renombra la nueva tabla con el nombre de la tabla antigua para que el código de la aplicación pueda empezar a utilizar la nueva tabla.
    disable '<nueva-tabla>'
    snapshot '<nueva-tabla>', 'nombre_del_snapshot'
    clone_snapshot 'nombre_del_snapshot', '<tabla-antigua>'
    disable '<nueva-tabla>'
    drop '<nueva-tabla>'
    

    Siguiendo estos pasos, puedes salar una tabla existente de HBASE/Phoenix con un tiempo de inactividad mínimo. Sin embargo, es importante probar este proceso a fondo en un entorno no productivo antes de hacerlo en producción.

Comments are closed.