Rendimiento aprovisionado de DynamoDB - Amazon DynamoDB

Rendimiento aprovisionado de DynamoDB

Cuando se emiten instrucciones de HiveQL para la tabla de DynamoDB externa, la clase DynamoDBStorageHandler realiza las solicitudes apropiadas de API de bajo nivel de DynamoDB, que consumen rendimiento aprovisionado. Si no hay suficiente capacidad de lectura o escritura en la tabla de DynamoDB, se aplica una limitación controlada a la solicitud, lo que da lugar a un rendimiento lento de HiveQL. Por este motivo, debe asegurarse de que la tabla tenga suficiente capacidad de desempeño.

Por ejemplo, suponga que ha aprovisionado 100 unidades de capacidad de lectura para su tabla de DynamoDB. Esto permite leer 409 600 bytes por segundo (100 × 4 kb, que es el tamaño de la unidad de capacidad de lectura). Ahora, supongamos que la tabla contiene 20 GB de datos (a saber, 21 474 836 480 bytes) y que desea usar la instrucción SELECT para seleccionar todos los datos mediante HiveQL. A continuación se indica cómo calcular cuánto tardará aproximadamente la consulta en ejecutarse:

21 474 836 480 / 409 600 = 52 429 segundos = 14,56 horas

En esta situación, la tabla de DynamoDB es un cuello de botella. Agregar más nodos de Amazon EMR no servirá de ayuda, porque el rendimiento de Hive está limitado a tan solo 409 600 bytes por segundo. La única forma de reducir el tiempo necesario para ejecutar la instrucción SELECT es aumentar la capacidad de lectura aprovisionada de la tabla de DynamoDB.

Puede realizar un cálculo similar para calcular aproximadamente cuánto se tardaría en cargar los datos masivamente en una tabla de Hive externa mapeada a una tabla de DynamoDB. Determine el número total de unidades de capacidad de escritura necesarias por elemento (menos de 1 KB = 1, 1-2 KB = 2, etc.) y multiplíquelo por el número de elementos que se van a cargar. Obtendrá así el número de unidades de capacidad de escritura necesarias. Divida ese número entre el número de unidades de capacidad de escritura que se asignan por segundo. Obtendrá el número de segundos que se tardará en cargar la tabla.

Es conveniente monitorear periódicamente las métricas de CloudWatch correspondientes a la tabla. Para obtener una breve información general en la consola de DynamoDB, elija la tabla y, a continuación, elija la pestaña Metrics (Métricas). A partir de aquí, puede ver las unidades de capacidad de lectura y escritura consumidas y las solicitudes de lectura y escritura que han sido objeto de una limitación controlada.

Capacidad de lectura

Amazon EMR administra la carga de solicitudes en la tabla de DynamoDB de acuerdo con las configuraciones de rendimiento aprovisionado de la tabla. Sin embargo, si observa una cantidad elevada de mensajes de ProvisionedThroughputExceeded en el resultado del trabajo, puede ajustar la tasa de lectura predeterminada. Para ello, puede modificar la variable de configuración dynamodb.throughput.read.percent. Puede usar el comando SET para establecer esta variable en el símbolo del sistema de Hive:

SET dynamodb.throughput.read.percent=1.0;

Esta variable persiste únicamente durante la sesión de Hive actual. Si sale de Hive y vuelve a abrirlo más adelante, dynamodb.throughput.read.percent recuperará su valor predeterminado.

El valor de dynamodb.throughput.read.percent puede estar entre 0.1 y 1.5 de forma inclusiva. 0.5 representa la tasa de lectura predeterminada, lo que significa que Hive intentará consumir la mitad de la capacidad de lectura de la tabla. Si aumenta el valor por encima de 0.5, Hive aumentará la tasa de solicitudes; al reducir el valor por debajo de 0.5, disminuirá la tasa de solicitudes de lectura. (La tasa de lectura real varía, según diversos factores tales como el hecho de que exista o no una distribución uniforme de claves en la tabla de DynamoDB).

Si observa que Hive agota con frecuencia la capacidad de lectura aprovisionada de la tabla o si las solicitudes de lectura son objeto de la limitación controlada en demasiadas ocasiones, intente reducir dynamodb.throughput.read.percent por debajo de 0.5. Si tiene capacidad de lectura suficiente en la tabla y desea aumentar la agilidad de las operaciones de HiveQL, puede establecer esta variable en un valor superior a 0.5.

Capacidad de escritura

Amazon EMR administra la carga de solicitudes en la tabla de DynamoDB de acuerdo con las configuraciones de rendimiento aprovisionado de la tabla. Sin embargo, si observa una cantidad elevada de mensajes de ProvisionedThroughputExceeded en el resultado del trabajo, puede ajustar la tasa de escritura predeterminada. Para ello, puede modificar la variable de configuración dynamodb.throughput.write.percent. Puede usar el comando SET para establecer esta variable en el símbolo del sistema de Hive:

SET dynamodb.throughput.write.percent=1.0;

Esta variable persiste únicamente durante la sesión de Hive actual. Si sale de Hive y vuelve a abrirlo más adelante, dynamodb.throughput.write.percent recuperará su valor predeterminado.

El valor de dynamodb.throughput.write.percent puede estar entre 0.1 y 1.5 de forma inclusiva. 0.5 representa la tasa de escritura predeterminada, lo que significa que Hive intentará consumir la mitad de la capacidad de escritura de la tabla. Si aumenta el valor por encima de 0.5, Hive aumentará la tasa de solicitudes; al reducir el valor por debajo de 0.5, disminuirá la tasa de solicitudes de escritura. (La tasa de escritura real varía en función de diversos factores, tales como el hecho de que exista o no una distribución uniforme de claves en la tabla de DynamoDB).

Si observa que Hive agota con frecuencia la capacidad de escritura aprovisionada de la tabla, o si las solicitudes de escritura son objeto de la limitación controlada en demasiados casos, pruebe a reducir dynamodb.throughput.write.percent por debajo de 0.5. Si tiene capacidad suficiente en la tabla y desea aumentar la agilidad de las operaciones de HiveQL, puede establecer esta variable en un valor superior a 0.5.

Al escribir datos en DynamoDB utilizando Hive, debe asegurarse de que el número de unidades de capacidad de escritura sea mayor que el número de mapeadores en el cluster. Por ejemplo, tomemos un clúster de Amazon EMR que consta de 10 nodos m1.xlarge. El tipo de nodo m1.xlarge proporciona 8 tareas de mapeador, de modo que el clúster tendría un total de 80mapeadores (10 × 8). Si la tabla de DynamoDB tiene menos de 80 unidades de capacidad de escritura, entonces una operación de escritura de Hive podría consumir todo el rendimiento de escritura de dicha tabla.

Para determinar el número de mapeadores de los tipos de nodos de Amazon EMR, consulte Configuración de la tarea en la Guía para desarrolladores de Amazon EMR.

Para obtener más información sobre los mapeadores, consulte Ajuste de mapeadores.