Paso 4: Configurar los ajustes de cqlsh COPY FROM - Amazon Keyspaces (para Apache Cassandra)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Paso 4: Configurar los ajustes de cqlsh COPY FROM

En esta sección se describe cómo determinar los valores de los parámetros para cqlsh COPY FROM. El cqlsh COPY FROM comando lee el CSV archivo que ha preparado anteriormente e inserta los datos en Amazon Keyspaces utilizando. CQL El comando divide las filas y distribuye las operaciones INSERT entre un conjunto de trabajadores. Cada trabajador establece una conexión con Amazon Keyspaces y envía solicitudes INSERT por este canal.

El comando cqlsh COPY no dispone de lógica interna para distribuir el trabajo de manera uniforme entre sus trabajadores. Sin embargo, puede configurarlo manualmente para asegurarse de que el trabajo se distribuya uniformemente. Para comenzar, revise estos parámetros clave de cqlsh:

  • DELIMITER— Si ha utilizado un delimitador que no sea una coma, puede establecer este parámetro, que por defecto es la coma.

  • INGESTRATE— El número objetivo de filas que se cqlsh COPY FROM intenta procesar por segundo. Si no se establece, su valor predeterminado es 100 000.

  • NUMPROCESSES— El número de procesos de trabajo infantil que cqlsh crea para COPY FROM las tareas. El valor máximo para este ajuste es 16, el valor predeterminado es num_cores - 1, donde num_cores es el número de núcleos de procesamiento en el host que ejecuta cqlsh.

  • MAXBATCHSIZE— El tamaño del lote determina el número máximo de filas insertadas en la tabla de destino en un solo lote. Si no se establece, cqlsh utiliza lotes de 20 filas insertadas.

  • CHUNKSIZE— El tamaño de la unidad de trabajo que se transfiere al niño trabajador. De forma predeterminada, se establece en 5000.

  • MAXATTEMPTS— El número máximo de veces que se puede volver a intentar un grupo de trabajadores fallido. Cuando se alcanza el número máximo de intentos, los registros fallidos se escriben en un nuevo CSV archivo que puede volver a ejecutar más adelante tras investigar el error.

Se establece en INGESTRATE función del número de los WCUs que ha aprovisionado en la tabla de destino de destino. El valor INGESTRATE del comando cqlsh COPY FROM no es un límite, es una media objetivo. Esto significa que puede (y a menudo lo hace) dispararse por encima del número que usted fije. Para tener en cuenta los picos y asegurarse de que exista capacidad suficiente para gestionar las solicitudes de carga de datos, establezca INGESTRATE en el 90 % de la capacidad de escritura de la tabla.

INGESTRATE = WCUs * .90

A continuación, fije el parámetro NUMPROCESSES en uno menos que el número de núcleos de su sistema. Para averiguar el número de núcleos de su sistema, puede ejecutar el siguiente código.

python -c "import multiprocessing; print(multiprocessing.cpu_count())"

En este tutorial, utilizamos el siguiente valor.

NUMPROCESSES = 4

Cada proceso crea un trabajador, y cada trabajador establece una conexión con Amazon Keyspaces. Amazon Keyspaces puede admitir hasta 3000 CQL solicitudes por segundo en cada conexión. Esto significa que debe asegurarse de que cada trabajador procese menos de 3000 solicitudes por segundo.

Al igual que con INGESTRATE, los trabajadores suelen dispararse por encima del número que usted establezca y no están limitados por segundos de reloj. Por tanto, para tener en cuenta los picos, establezca sus parámetros de cqlsh para que cada trabajador procese 2500 solicitudes por segundo. Para calcular la cantidad de trabajo distribuida a un trabajador, utilice la siguiente pauta.

  • Divida INGESTRATE por NUMPROCESSES.

  • Si INGESTRATE / NUMPROCESSES > 2500, disminuya el valor INGESTRATE para que esta fórmula se cumpla.

INGESTRATE / NUMPROCESSES <= 2,500

Antes de configurar los ajustes para optimizar la carga de nuestros datos de ejemplo, revisemos los ajustes predeterminados de cqlsh y veamos cómo afecta su uso al proceso de carga de datos. Dado que cqlsh COPY FROM utiliza el valor CHUNKSIZE a fin de crear bloques de trabajo (instrucciones INSERT) para distribuir a los trabajadores, el trabajo no se distribuye automáticamente de manera uniforme. Algunos trabajadores podrían permanecer inactivos, en función del ajuste de INGESTRATE.

Para distribuir el trabajo de manera uniforme entre los trabajadores y mantener a cada trabajador en la tasa óptima de 2500 solicitudes por segundo, debe establecer CHUNKSIZE, MAXBATCHSIZE y INGESTRATE cambiando los parámetros de entrada. Para optimizar la utilización del tráfico de red durante la carga de datos, elija un valor para MAXBATCHSIZE que se acerque al valor máximo de 30. Al cambiar CHUNKSIZE a 100 y MAXBATCHSIZE a 25, las 10 000 filas se reparten uniformemente entre los cuatro trabajadores (10 000 / 2500 = 4).

El siguiente ejemplo de código lo ilustra.

INGESTRATE = 10,000 NUMPROCESSES = 4 CHUNKSIZE = 100 MAXBATCHSIZE. = 25 Work Distribution: Connection 1 / Worker 1 : 2,500 Requests per second Connection 2 / Worker 2 : 2,500 Requests per second Connection 3 / Worker 3 : 2,500 Requests per second Connection 4 / Worker 4 : 2,500 Requests per second

En resumen, utilice las siguientes fórmulas al establecer los parámetros de cqlsh COPY FROM:

  • INGESTRATE= write_capacity_units * .90

  • NUMPROCESSES= num_cores -1 (predeterminado)

  • INGESTRATE/NUMPROCESSES= 2.500 (debe ser una afirmación verdadera).

  • MAXBATCHSIZE= 30 (el valor predeterminado es 20. Amazon Keyspaces acepta lotes de hasta 30.)

  • CHUNKSIZE = (INGESTRATE / NUMPROCESSES) / MAXBATCHSIZE

Ahora que ha calculado NUMPROCESSES, INGESTRATE y CHUNKSIZE, está listo para cargar sus datos.