Optimización de rendimiento para las operaciones de Amazon EMR en DynamoDB - Amazon EMR

Optimización de rendimiento para las operaciones de Amazon EMR en DynamoDB

Las operaciones de Amazon EMR en una tabla de DynamoDB cuentan como operaciones de lectura y están sujetas a la configuración de rendimiento aprovisionado de la tabla. Amazon EMR implementa su propia lógica para intentar balancear la carga en su tabla de DynamoDB para minimizar la posibilidad de sobrepasar el rendimiento aprovisionado. Al final de cada consulta de Hive, Amazon EMR devuelve información sobre el clúster; utilizado para procesar la consulta, incluyendo el número de veces que se ha superado el rendimiento aprovisionado. Puede utilizar esta información junto con las métricas de CloudWatch acerca de su rendimiento de DynamoDB para administrar mejor la carga de la tabla de DynamoDB en las solicitudes siguientes.

Los siguientes factores influyen en el rendimiento de las consultas de Hive cuando se trabaja con tablas de DynamoDB.

Unidades de capacidad de lectura aprovisionada

Cuando ejecuta consultas de Hive frente a una tabla de DynamoDB, debe asegurarse de que ha aprovisionado una cantidad suficiente de unidades de capacidad de lectura.

Por ejemplo, suponga que ha aprovisionado 100 unidades de capacidad de lectura para su tabla de DynamoDB. Esto le permite realizar 100 lecturas o 409 600 bytes, por segundo. Si dicha tabla contiene 20 GB de datos (21 474 836 480 bytes) y la consulta de Hive realiza un análisis completo de la tabla, puede calcular aproximadamente cuánto tardará la consulta en ejecutarse:

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

La única forma de reducir el tiempo necesario, sería ajustar las unidades de capacidad de lectura en el origen de la tabla de DynamoDB. Agregar más nodos al clúster de Amazon EMR no servirá.

En la salida de Hive, el porcentaje completado se actualiza cuando finalizan uno o varios procesos de mapeador. Para una tabla de DynamoDB grande con un ajuste bajo de capacidad de lectura aprovisionada, la salida de porcentaje de finalización podría no actualizarse durante mucho tiempo; en el caso anterior, el trabajo aparecerá con un 0% completo durante varias horas. Para ver un estado más detallado del progreso del trabajo, acceda a la consola de Amazon EMR; podrá ver el estado de la tarea de asignador individual y estadísticas de lecturas de datos.

También puede iniciar sesión en la interfaz de usuario de Hadoop en el nodo principal y ver las estadísticas de Hadoop. Esto le muestra el estado de tareas de mapeo individuales y algunos datos de estadísticas de lectura. Para obtener más información, consulte Interfaces web alojadas en el nodo maestro en la Guía de administración de Amazon EMR.

Ajuste de porcentaje de lectura

De forma predeterminada, Amazon EMR administra la carga de solicitudes de la tabla de DynamoDB de acuerdo con el rendimiento aprovisionado actual. Sin embargo, cuando Amazon EMR devuelve información sobre su trabajo que incluye un elevado número de respuestas que superan el rendimiento aprovisionado, puede ajustar la tasa de lectura predeterminada mediante el parámetro dynamodb.throughput.read.percent cuando configure la tabla de Hive. Para obtener más información acerca cómo configurar el parámetro de porcentaje de lectura, consulte Opciones de Hive.

Configuración de porcentaje de escritura

De forma predeterminada, Amazon EMR administra la carga de solicitudes de la tabla de DynamoDB de acuerdo con el rendimiento aprovisionado actual. Sin embargo, cuando Amazon EMR devuelve información sobre su trabajo que incluye un elevado número de respuestas que superan el rendimiento aprovisionado, puede ajustar la tasa de escritura predeterminada mediante el parámetro dynamodb.throughput.write.percent cuando configure la tabla de Hive. Para obtener más información acerca cómo configurar el parámetro de porcentaje de escritura, consulte Opciones de Hive.

Configuración de duración de reintento

De forma predeterminada, Amazon EMR vuelve a ejecutar una consulta de Hive si no devuelve un resultado en el plazo de dos minutos, el intervalo de reintento predeterminado. Puede ajustar este intervalo configurando el parámetro dynamodb.retry.duration al ejecutar una consulta de Hive. Para obtener más información acerca cómo configurar el parámetro de porcentaje de escritura, consulte Opciones de Hive.

Número de tareas de asignación

Los daemons de asignador que lanza Hadoop para procesar las solicitudes para exportar y consultar datos almacenados en DynamoDB están limitados a una tasa de lectura máxima de 1 MiB por segundo para limitar la capacidad de lectura utilizada. Si dispone de rendimiento aprovisionado adicional en DynamoDB, puede mejorar el rendimiento de las operaciones de consulta y exportación de Hive aumentando el número de daemons de asignador. Para ello, puede aumentar el número de instancias EC2 en su clúster; o aumentar el número de daemons de asignador que se ejecutan en cada instancia EC2.

Puede aumentar el número de instancias EC2 en un clúster; parando el clúster; actual y volviéndolo a lanzar con un número mayor de instancias EC2. Especifique el número de instancias EC2 en el cuadro de diálogo Configurar instancias de EC2 si está lanzando el clúster desde la consola de Amazon EMR o con la opción ‑‑num-instances si está lanzando el clúster desde la CLI.

El número de tareas de asignación que se ejecuta en una instancia depende del tipo de instancia EC2. Para obtener más información sobre los tipos de instancia EC2 y el número de mapeadores que proporciona cada una, consulte Configuración de tareas. Allí encontrará una sección "Task Configuration" para cada una de las configuraciones admitidas.

Otra forma de aumentar el número de daemons de mapeador consiste en cambiar el parámetro de configuración mapreduce.tasktracker.map.tasks.maximum de Hadoop por un valor mayor. Esto tiene la ventaja de proporcionarle más mapeadores sin aumentar el número o el tamaño de instancias EC2, lo que ahorra dinero. Un inconveniente es que si este valor se configura muy alto puede hacer que las instancias EC2 de su clúster se queden sin memoria. Para configurar mapreduce.tasktracker.map.tasks.maximum, lance el clúster y especifique un valor para mapreduce.tasktracker.map.tasks.maximum como una propiedad de la clasificación de configuración mapred-site. Esto se muestra en el siguiente ejemplo. Para obtener más información, consulte Configuración de aplicaciones.

{ "configurations": [ { "classification": "mapred-site", "properties": { "mapred.tasktracker.map.tasks.maximum": "10" } } ] }

Solicitudes de datos paralelas

Varias solicitudes de datos, ya sea de más de un usuario o más de una aplicación en una única tabla podría agotar el rendimiento de lectura aprovisionado y un dar lugar a un rendimiento lento.

Duración del proceso

La consistencia de datos en DynamoDB depende del orden de las operaciones de lectura y escritura en cada nodo. Aunque haya una consulta de Hive en curso, otra aplicación podría cargar nuevos datos en la tabla de DynamoDB o modificar o eliminar datos existentes. En este caso, los resultados de la consulta de Hive podrían no reflejar los cambios realizados en los datos mientras se ejecutaba la consulta.

Evitar un rendimiento excesivo

Al ejecutar consultas de Hive en DynamoDB, tenga cuidado de no superar el rendimiento aprovisionado, ya que esto agotará la capacidad necesaria para las llamadas de la aplicación a DynamoDB::Get. Para asegurarse de que esto no ocurre, debe monitorizar periódicamente el volumen de lectura y limitar de forma controlada las llamadas de la aplicación DynamoDB::Get comprobando los registros y monitorizando las métricas en Amazon CloudWatch.

Tiempo de solicitud

Programar las consultas de Hive que acceden a una tabla de DynamoDB de modo que se lleven a cabo en aquellos momentos en que la demanda de esa tabla de DynamoDB es más baja, mejora el rendimiento. Por ejemplo, si la mayoría de los usuarios de la aplicación viven en San Francisco, podría elegir exportar los datos cada día a las 4:00 h PST, cuando la mayoría de los usuarios están durmiendo, y no actualizan los registros de la base de datos de DynamoDB.

Tablas basadas en tiempo

Si los datos se organizan como una serie de tablas de DynamoDB basadas en tiempo como, por ejemplo, una tabla al día, puede exportar los datos cuando la tabla deje de estar activa. Puede utilizar esta técnica para crear copias de seguridad de los datos en Amazon S3 de manera continuada.

Datos archivados

Si tiene previsto ejecutar muchas consultas de Hive en los datos almacenados en DynamoDB y la aplicación puede tolerar los datos archivados, es posible que desee exportar los datos a HDFS o a Amazon S3 y ejecutar las consultas de Hive en una copia de los datos en lugar de DynamoDB. Esto conserva las operaciones de lectura y el rendimiento aprovisionado.