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