Entornos de procesamiento

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

Entorno interactivo

También llamado pila "síncrona" o "en línea", este entorno está optimizado para responder solicitudes pequeñas que se completan 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 alcanzar los límites de cuota.

Extremos

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

Extremo estándar

El extremo estándar es adecuado para la mayoría de los usos impulsados por humanos y es lo que impulsa el Editor de código y las Apps de Earth Engine. Específicamente, este extremo es más adecuado para aplicaciones sensibles a la latencia que implican un volumen bajo de solicitudes simultáneas no programáticas.

Endpoint de alto volumen

El extremo de alto volumen está diseñado para controlar un mayor volumen 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 los resultados intermedios, por lo que las consultas complejas pueden requerir más tiempo de procesamiento.
  • Ideal para consultas automatizadas y pequeñas: El extremo de alto volumen es excelente para controlar muchas solicitudes programáticas, pero es más adecuado para consultas simples que no requieren agregación (como recuperar mosaicos de imágenes prediseñadas).

Para los análisis complejos que requieren un almacenamiento en caché eficiente, es preferible el endpoint de API estándar. El extremo de alto 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 gran volumen que cuando se usa el extremo en línea normal.

Uso del endpoint de gran volumen

Cliente de Python

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 adecuadas y especificar el proyecto de Cloud. Por ejemplo:

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

Cliente de JavaScript

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

API de REST

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 procesamiento por lotes

También llamado pila "asíncrona" o "sin conexión", este entorno está optimizado para el procesamiento paralelo de latencia alta 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 importación o exportación de datos (p.ej., Export.* y ee.batch.*) desde 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 está limitado a una pequeña cantidad de tareas en ejecución simultánea.

Ciclo de vida de la tarea

Las tareas se envían a una cola y se ordenan según su prioridad (primero la más alta) y la hora de envío (primero la más antigua). Las tareas cambian del estado SUBMITTED (en cola) al estado RUNNING cuando se asignan a un procesador por lotes. Cada procesador es responsable de coordinar una cantidad variable de procesadores por lotes para ejecutar el cálculo 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 no se puede configurar por el usuario.

Cuando se usa un proyecto de Cloud, las tareas son visibles para cualquier persona que tenga permiso a nivel del proyecto para enumerar tareas. 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 en las tareas

Si una tarea falla por un motivo que no se solucionará con reintentos (p.ej., los datos no son válidos), 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 cálculo), Earth Engine intentará automáticamente volver a ejecutarla y completar 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. Estos se pueden ver u obtener a través de nuestras interfaces de administración de tareas. Si inicias tareas de forma programática, obtendrás el ID de la tarea de ee.data.newTaskId. Cuando solicites ayuda para depurar una tarea de exportación o transferencia, proporciona el ID de la tarea como una cadena copiable (no como una captura de pantalla).

Lista de estados de tareas

Las tareas pueden tener los siguientes valores de state:

  • UNSUBMITTED, aún pendiente en el cliente
  • READY, en cola en el servidor
  • RUNNING, en ejecución
  • COMPLETED, completada correctamente
  • FAILED, se completó sin éxito
  • CANCEL_REQUESTED, aún en ejecución, pero se solicitó su cancelación (es decir, no se garantiza que se cancele 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 mayor prioridad se programan antes que otras tareas pendientes con prioridades más bajas, independientemente de la hora de envío. La prioridad de 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 el 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 las tareas de importación, ya que los dos tipos de tareas se programan por separado.

Ejemplo: Cómo usar las prioridades de tareas

Considera la siguiente lista de tareas, en la que las tareas 1 a 5 se envían en su orden natural con la prioridad predeterminada. Se ejecutan en el orden en que se enviaron, ya que todas las prioridades son iguales 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 que se enviaron).

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

Enviar una tarea nueva, MyHighPriorityTask1, no afectará 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

Después de 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 alta prioridad):

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