Earth Engine 提供了不同的数据处理环境:交互式和批量。这两个环境(或“领域”)处理不同类型的查询,并且具有非常不同的性能特性,因此请务必了解何时以及如何使用每种环境。
互动环境
此环境也称为“同步”或“在线”堆栈,经过优化可快速回答小型请求(响应数据量限制为几十兆字节,且必须在 5 分钟内完成处理)。可以并行发出多个请求,但不得超过配额限制。
端点
互动环境由不同的 API 端点组成:标准和高流量。
标准端点
标准端点适用于大多数由人驱动的用例,也是 Code Editor 和 Earth Engine 应用的依托平台。具体而言,此端点最适合涉及低量并发非程序化请求且对延迟时间敏感的应用。
高流量端点
与标准端点相比,高吞吐量端点可并行处理更多请求。二者的主要区别如下所示:
- 延迟时间更长:高流量端点的每次请求平均延迟时间更长。
- 缓存较少:它会缓存较少的中间结果,因此复杂查询可能需要更多计算时间。
- 最适合自动执行的小型查询:高吞吐量端点擅长处理大量程序化请求,但最适合不需要汇总的简单查询(例如从预构建的图片提取图块)。
对于需要高效缓存的复杂分析,标准 API 端点可能更适合。高吞吐量端点针对高吞吐量、低计算任务进行了优化。与使用常规在线端点相比,使用高吞吐量端点时,复杂查询通常需要更多的 EECU 时间。
使用高流量端点
初始化 earthengine
库时,传入 opt_url
参数并将其设置为 https://earthengine-highvolume.googleapis.com
。一如既往,请务必传入正确的凭据并指定 Cloud 项目。例如:
ee.Initialize(
credentials=credentials,
project='my-project',
opt_url='https://earthengine-highvolume.googleapis.com'
)
使用 ee.initialize()
初始化 earthengine
库时,请为第一个参数传递 https://earthengine-highvolume.googleapis.com
。
将 REST 请求定向到 https://earthengine-highvolume.googleapis.com
(而不是 https://earthengine.googleapis.com
,如 REST API 快速入门中所示)。
批处理环境
此环境也称为“异步”或“离线”堆栈,经过优化可对大量数据进行高延迟并行处理。请求会作为任务提交到批处理端点,通常是通过调用数据import或导出函数(例如Export.*
和 ee.batch.*
)来执行此操作。每项批处理任务的生命周期不得超过 10 天。每个项目最多支持 3, 000 个待处理任务,但每个用户只能有少量并发运行的任务。
任务生命周期
任务会提交到队列,并按优先级(从高到低)和提交时间(从早到晚)排序。任务分配给批处理器后,其状态会从 SUBMITTED
(已加入队列)更改为 RUNNING
。每个处理器负责协调数量不等的批处理工作器来运行计算并生成任务结果。任务的工作器数量取决于 EE 服务对作业的并行处理能力,无法由用户配置。
使用 Cloud 项目时,具有列出任务的项目级权限的任何人都可以看到任务。如果项目已注册付费 Earth Engine 访问权限,则任务会整理到项目级队列中;如果项目已注册非付费(研究)访问权限,则系统会为每个用户单独安排任务,但这些任务仍会对项目的所有用户可见。
当任务创建必要的工件(Earth Engine 资产、Google Cloud Storage 中的文件等)时,即会成功完成。
任务管理
您可以使用以下接口查看和取消任务:
- Cloud 控制台中的“Tasks”页面
- 在 Cloud 项目一级启用任务管理。今后,此界面将成为管理任务的主要界面。
- “任务管理器”页面
- 此界面会显示用户和项目级别的任务,并支持按任务名称进行过滤。
- “代码编辑器”任务标签页
- 允许在代码编辑器脚本中监控任务。
ListOperations
端点和task
命令- 最适合以编程方式查看和管理任务。
任务失败
如果任务因重试无法解决的原因而失败(例如数据无效),则该任务将被标记为 FAILED
,并且不会再次运行。
如果任务因可能间歇性的原因而失败(例如,在运行计算时超时),Earth Engine 会自动尝试重试该任务并填充 retries
字段。任务最多可以失败五次,最终一次失败会导致整个任务被标记为 FAILED
。
任务 ID
每项任务都有一个字母数字 ID,格式为 3DNU363IM57LNU4SDTMB6I33
。您可以通过我们的任务管理界面查看或获取这些信息。如果您以编程方式启动任务,则可以从 ee.data.newTaskId
获取任务 ID。在请求帮助调试导出或提取任务时,请以可复制的字符串(而非屏幕截图)的形式提供此任务 ID。
任务状态列表
任务可以具有以下 state
值:
UNSUBMITTED
,仍在客户端上待处理READY
,已加入服务器队列RUNNING
,目前正在运行COMPLETED
,已成功完成FAILED
,未能成功完成CANCEL_REQUESTED
,仍在运行,但已收到取消请求(即无法保证任务一定会被取消)CANCELLED
,已被所有者取消
任务优先级
任务优先级是一种用于控制队列中任务顺序的机制。无论提交时间如何,优先级较高的任务都会在优先级较低的其他待处理任务之前安排。默认任务优先级为 100。
只有已注册付费 Earth Engine 访问权限的项目的用户才能为导出任务设置其他优先级(更高或更低)。更改导出任务的优先级不会影响其相对于任何导入任务的安排方式,因为这两类任务是单独安排的。
示例:使用任务优先级
请考虑以下任务列表,其中任务 1-5 按自然顺序提交,并采用默认优先级。由于优先级都相同,并且此项目有 2 个批处理槽可用,因此它们会按提交的顺序运行,其中 2 个(第一个和第二个提交的)会并行运行。
Task name State Priority
---------------------------------------
MyDefaultTask5 READY 100
MyDefaultTask4 READY 100
MyDefaultTask3 READY 100
MyDefaultTask2 RUNNING 100
MyDefaultTask1 RUNNING 100
提交新任务 MyHighPriorityTask1
不会影响正在运行的任务:
Task name State Priority
---------------------------------------
MyHighPriorityTask READY 500
MyDefaultTask5 READY 100
MyDefaultTask4 READY 100
MyDefaultTask3 READY 100
MyDefaultTask2 RUNNING 100
MyDefaultTask1 RUNNING 100
某个正在运行的任务完成后,系统会运行优先级最高的待处理任务(在本例中,即高优先级任务):
Task name State Priority
-----------------------------------------
MyHighPriorityTask RUNNING 500
MyDefaultTask5 READY 100
MyDefaultTask4 READY 100
MyDefaultTask3 READY 100
MyDefaultTask2 COMPLETED 100
MyDefaultTask1 RUNNING 100