Entornos de procesamiento

Earth Engine tiene diferentes entornos para procesar datos: interactivo y por lotes. Estos dos entornos (o "reinos") controlan diferentes tipos de consultas y tienen características de rendimiento muy diferentes, por lo que es importante comprender cuándo y cómo usar cada uno.

Entorno interactivo

Este entorno, también llamado pila "síncrona" o "en línea", está optimizado para responder solicitudes pequeñas que terminan rápidamente (las respuestas se limitan a decenas de megabytes de datos y deben terminar de procesarse en un plazo de cinco minutos). Se pueden realizar muchas solicitudes en paralelo hasta los límites de la cuota.

Extremos

El entorno interactivo se compone de diferentes extremos de API: estándares y de alto volumen.

Extremo estándar

El extremo estándar es adecuado para la mayoría de los usos manuales y es lo que potencia las apps de Code Editor y Earth Engine. Específicamente, este extremo es más adecuado para aplicaciones sensibles a la latencia que involucran un volumen bajo de solicitudes simultáneas no programáticas.

Extremo de alto volumen

El extremo de alto volumen está diseñado para controlar un volumen más alto de solicitudes en paralelo que el extremo estándar. Las diferencias clave incluyen lo siguiente:

  • Latencia más alta: El extremo de alto volumen tiene una latencia promedio más alta por solicitud.
  • Menos almacenamiento en caché: Proporciona menos almacenamiento en caché de resultados intermedios, por lo que las consultas complejas pueden requerir más tiempo de procesamiento.
  • Mejor para consultas pequeñas y automatizadas: El extremo de alto volumen se destaca por controlar muchas solicitudes programáticas, pero es más adecuado para consultas simples que no requieren agregación (como recuperar tarjetas de imágenes precompiladas).

Para los análisis complejos que necesitan un almacenamiento en caché eficiente, es posible que sea preferible el extremo de la API estándar. El extremo de gran volumen está optimizado para tareas de alta capacidad de procesamiento y baja computación. Por lo general, las consultas complejas requieren más tiempo de EECU cuando se usa el extremo de alto volumen que en el extremo en línea normal.

Uso del extremo de alto volumen

Cuando inicialices la biblioteca earthengine, pasa un parámetro opt_url y establécelo en https://earthengine-highvolume.googleapis.com. Como siempre, asegúrate de pasar las credenciales correctas y especificar el proyecto de Cloud. Por ejemplo:

ee.Initialize(
    credentials=credentials,
    project='my-project',
    opt_url='https://earthengine-highvolume.googleapis.com'
)

Cuando inicialices la biblioteca earthengine con ee.initialize(), pasa https://earthengine-highvolume.googleapis.com para el primer parámetro.

Dirige tus solicitudes de REST a https://earthengine-highvolume.googleapis.com (en lugar de https://earthengine.googleapis.com, como se muestra en la Guía de inicio rápido de la API de REST, por ejemplo).

Entorno de Batch

Este entorno, también llamado pila "asíncrona" o "sin conexión", está optimizado para el procesamiento en paralelo de alta latencia de grandes cantidades de datos. Las solicitudes se envían como tareas a los extremos de procesamiento por lotes, por lo general, llamando a las funciones de import o exportación de datos (p.ej., Export.* y ee.batch.*) de las bibliotecas cliente de Earth Engine. Cada tarea por lotes tiene una duración máxima de diez días. Cada proyecto admite hasta 3,000 tareas pendientes, pero cada usuario individual tiene un límite de una pequeña cantidad de tareas que se ejecutan de forma simultánea.

Ciclo de vida de la tarea

Las tareas se envían a una cola y se ordenan según su prioridad (la más alta primero) y el tiempo de envío (la más antigua primero). Las tareas cambian del estado SUBMITTED (en cola) al estado RUNNING cuando se asignan a un procesador por lotes. Cada procesador es responsable de organizar una cantidad variable de trabajadores por lotes para ejecutar el procesamiento y producir los resultados de la tarea. La cantidad de trabajadores para una tarea se determina según la capacidad del servicio de EE para paralelizar el trabajo y el usuario no puede configurarla.

Cuando usas un proyecto de Cloud, las tareas son visibles para cualquier persona que tenga el permiso a nivel del proyecto para enumerarlas. Si el proyecto está registrado para el acceso pagado a Earth Engine, las tareas se organizan en una cola para todo el proyecto. Si el proyecto está registrado para el acceso no pagado (investigación), las tareas se programan de forma independiente para cada persona, pero siguen siendo visibles para todos los usuarios del proyecto.

Las tareas se completan correctamente cuando crean los artefactos necesarios (recursos de Earth Engine, archivos en Google Cloud Storage, etcétera).

Administración de tareas

Las tareas se pueden ver y cancelar con las siguientes interfaces:

Fallas de tareas

Si una tarea falla por un motivo que no se solucionará con un reintento (p.ej., los datos no son válidos), la tarea se marcará como FAILED y no se volverá a ejecutar.

Si una tarea falla por un motivo que podría ser intermitente (p.ej., se agotó el tiempo de espera cuando se ejecutaba un procesamiento), Earth Engine intentará volver a ejecutarla automáticamente y propagará el campo retries. Las tareas pueden fallar hasta cinco veces, y la falla final hará que toda la tarea se marque como FAILED.

ID de la tarea

Cada tarea tiene un ID alfanumérico con el formato 3DNU363IM57LNU4SDTMB6I33. Se pueden ver o obtener a través de nuestras interfaces de administración de tareas. Si inicias tareas de manera programática, obtienes el ID de la tarea de ee.data.newTaskId. Cuando solicites ayuda para depurar una tarea de exportación o transferencia, proporciona este ID de tarea como una cadena que se pueda copiar (no una captura de pantalla).

Lista de estados de tareas

Las tareas pueden tener los siguientes valores de state:

  • UNSUBMITTED, aún pendiente del cliente
  • READY, en fila en el servidor
  • RUNNING, en ejecución actualmente
  • COMPLETED, completado correctamente
  • FAILED, completado con errores
  • CANCEL_REQUESTED, aún se está ejecutando, pero se solicitó que se cancele (es decir, no es una garantía de que se cancelará la tarea)
  • CANCELLED, cancelada por el propietario

Prioridad de la tarea

La prioridad de la tarea es un mecanismo para controlar el orden de las tareas en la cola. Las tareas de prioridad más alta se programan antes que otras tareas pendientes con prioridades más bajas, independientemente del momento en que se envíen. La prioridad de la tarea predeterminada es 100.

La capacidad de establecer otras prioridades (más altas o más bajas) en las tareas de exportación solo está disponible para los usuarios de proyectos registrados para obtener acceso pagado a Earth Engine. Cambiar la prioridad de una tarea de exportación no afecta la forma en que se programa en relación con cualquier tarea de importación, ya que los dos tipos de tareas se programan por separado.

Ejemplo: Usa prioridades de tareas

Considera la siguiente lista de tareas, en la que las tareas del 1 al 5 se envían en su orden natural con la prioridad predeterminada. Se ejecutan en el orden en que se enviaron, ya que las prioridades son las mismas y, como hay dos ranuras de procesamiento por lotes disponibles para este proyecto, dos se ejecutan de forma simultánea (la primera y la segunda enviadas).

Task name           State      Priority
---------------------------------------
MyDefaultTask5      READY      100
MyDefaultTask4      READY      100
MyDefaultTask3      READY      100
MyDefaultTask2      RUNNING    100
MyDefaultTask1      RUNNING    100

El envío de una tarea nueva, MyHighPriorityTask1, no afectará a las tareas en ejecución:

Task name           State      Priority
---------------------------------------
MyHighPriorityTask    READY      500
MyDefaultTask5        READY      100
MyDefaultTask4        READY      100
MyDefaultTask3        READY      100
MyDefaultTask2        RUNNING    100
MyDefaultTask1        RUNNING    100

Una vez que se complete una de las tareas en ejecución, se ejecutará la tarea pendiente con la prioridad más alta (en este caso, nuestra tarea de prioridad alta):

Task name             State      Priority
-----------------------------------------
MyHighPriorityTask    RUNNING    500
MyDefaultTask5        READY      100
MyDefaultTask4        READY      100
MyDefaultTask3        READY      100
MyDefaultTask2        COMPLETED  100
MyDefaultTask1        RUNNING    100