Optimización del rendimiento de escritura - AWS Guía prescriptiva

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.

Optimización del rendimiento de escritura

En esta sección se describen las propiedades de las tablas que se pueden ajustar para optimizar el rendimiento de escritura en las tablas Iceberg, independientemente del motor.

Configure el modo de distribución de la tabla

Iceberg ofrece varios modos de distribución de escritura que definen cómo se distribuyen los datos de escritura en las tareas de Spark. Para obtener una descripción general de los modos disponibles, consulta Cómo escribir los modos de distribución en la documentación de Iceberg.

Para los casos de uso que dan prioridad a la velocidad de escritura, especialmente en cargas de trabajo de streaming, write.distribution-mode establézcalo en. none Esto garantiza que Iceberg no solicite una reorganización adicional de Spark y que los datos se escriban a medida que estén disponibles en las tareas de Spark. Este modo es especialmente adecuado para las aplicaciones de streaming estructurado de Spark.

nota

Si se configura el modo de distribución de escritura, se none suelen producir numerosos archivos pequeños, lo que reduce el rendimiento de lectura. Se recomienda compactarlos con regularidad para consolidar estos archivos pequeños en archivos del tamaño adecuado para el rendimiento de las consultas.

Elija la estrategia de actualización adecuada

Utilice una merge-on-read estrategia para optimizar el rendimiento de escritura cuando las operaciones de lectura más lentas de los datos más recientes sean aceptables para su caso de uso.

Cuando lo usas merge-on-read, Iceberg graba las actualizaciones y las elimina en el almacenamiento como pequeños archivos independientes. Cuando se lee la tabla, el lector debe combinar estos cambios con los archivos base para obtener la última vista de los datos. Esto se traduce en una penalización del rendimiento de las operaciones de lectura, pero acelera la escritura de actualizaciones y eliminaciones. Por lo general, merge-on-read es ideal para transmitir cargas de trabajo con actualizaciones o trabajos con pocas actualizaciones distribuidas en muchas particiones de tablas.

Puede configurar merge-on-read las configuraciones (write.update.modewrite.delete.mode, ywrite.merge.mode) a nivel de tabla o de forma independiente desde el punto de vista de la aplicación.

Su uso merge-on-read requiere una compactación regular para evitar que el rendimiento de lectura se degrade con el tiempo. La compactación reconcilia las actualizaciones y las eliminaciones con los archivos de datos existentes para crear un nuevo conjunto de archivos de datos, lo que elimina la penalización de rendimiento en la parte de lectura. De forma predeterminada, la compactación de Iceberg no fusiona ni elimina los archivos a menos que se cambie el valor predeterminado de la delete-file-threshold propiedad por un valor menor (consulte la documentación de Iceberg). Para obtener más información sobre la compactación, consulte la sección Compactación de iceberg más adelante en esta guía.

Elija el formato de archivo correcto

Iceberg admite la escritura de datos en los formatos Parquet, ORC y Avro. El formato predeterminado es Parquet. Parquet y ORC son formatos en columnas que ofrecen un rendimiento de lectura superior, pero generalmente son más lentos de escribir. Esto representa el equilibrio típico entre el rendimiento de lectura y el de escritura.

Si la velocidad de escritura es importante para su caso de uso, como en el caso de cargas de trabajo en streaming, considere la posibilidad de escribir en formato Avro configurándolo Avro en write-format las opciones de grabación. Como Avro es un formato basado en filas, proporciona tiempos de escritura más rápidos a costa de un rendimiento de lectura más lento.

Para mejorar el rendimiento de lectura, ejecute una compactación regular para combinar y transformar archivos Avro pequeños en archivos Parquet más grandes. El resultado del proceso de compactación depende de la configuración de la write.format.default tabla. El formato predeterminado de Iceberg es Parquet, por lo que si escribe en Avro y, a continuación, ejecuta la compactación, Iceberg transformará los archivos de Avro en archivos de Parquet. A continuación se muestra un ejemplo:

spark.sql(f""" CREATE TABLE IF NOT EXISTS glue_catalog.{DB_NAME}.{TABLE_NAME} ( Col_1 float, <<<…other columns…>> ts timestamp) USING iceberg PARTITIONED BY (days(ts)) OPTIONS ( 'format-version'='2', write.format.default'=parquet) """) query = df \ .writeStream \ .format("iceberg") \ .option("write-format", "avro") \ .outputMode("append") \ .trigger(processingTime='60 seconds') \ .option("path", f"glue_catalog.{DB_NAME}.{TABLE_NAME}") \ .option("checkpointLocation", f"s3://{BUCKET_NAME}/checkpoints/iceberg/") .start()