Środowiska przetwarzania

Earth Engine ma różne środowiska do przetwarzania danych: interaktywne i wsadowe. Te 2 środowiska (lub „obszary”) obsługują różne typy zapytań i mają bardzo różne charakterystyki wydajności, dlatego ważne jest, aby wiedzieć, kiedy i jak ich używać.

Środowisko interaktywne

To środowisko, nazywane też stosem „synchronicznym” lub „online”, jest zoptymalizowane pod kątem odpowiadania na małe żądania, które są szybko realizowane (odpowiedzi są ograniczone do kilkudziesięciu megabajtów danych i muszą zostać przetworzone w ciągu 5 minut). Można równolegle wysyłać wiele żądań, aż do osiągnięcia limitów .

Punkty końcowe

Środowisko interaktywne składa się z różnych punktów końcowych interfejsu API: standardowego i o dużej liczbie żądań.

Standardowy punkt końcowy

Standardowy punkt końcowy jest odpowiedni w większości przypadków użycia przez człowieka. To on obsługuje edytor kodu i aplikacje Earth Engine. Ten punkt końcowy najlepiej sprawdza się w przypadku aplikacji wrażliwych na opóźnienia, które obejmują niewielką liczbę równoczesnych żądań nieprogramowych.

Punkt końcowy o dużej liczbie żądań

Punkt końcowy o dużej liczbie żądań jest przeznaczony do obsługi większej liczby żądań równolegle niż standardowy punkt końcowy. Najważniejsze różnice:

  • Większe opóźnienie: punkt końcowy o dużej liczbie żądań ma większe średnie opóźnienie na żądanie.
  • Mniej buforowania: zapewnia mniejsze buforowanie wyników pośrednich, dlatego złożone zapytania mogą wymagać więcej czasu obliczeniowego.
  • Najlepszy do zautomatyzowanych, małych zapytań: punkt końcowy o dużej liczbie żądań doskonale radzi sobie z obsługą wielu żądań programowych, ale najlepiej nadaje się do prostych zapytań które nie wymagają agregacji (np. pobierania kafelków z gotowych obrazów).

W przypadku złożonych analiz, które wymagają wydajnego buforowania, lepszym rozwiązaniem może być standardowy punkt końcowy API. Punkt końcowy o dużej liczbie żądań jest zoptymalizowany pod kątem zadań o dużej przepustowości i niskim poziomie obliczeń. W przypadku złożonych zapytań korzystanie z punktu końcowego o dużej liczbie żądań zwykle wymaga więcej czasu EECU niż w przypadku zwykłego punktu końcowego online.

Korzystanie z punktu końcowego o dużej liczbie żądań

Klient Python

Podczas inicjowania biblioteki earthengine przekaż parametr opt_url i ustaw go na https://earthengine-highvolume.googleapis.com. Jak zawsze, pamiętaj też o przekazaniu odpowiednich danych logowania i określeniu projektu Cloud. Na przykład:

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

Klient JavaScript

Podczas inicjowania biblioteki earthengine za pomocą ee.initialize(), przekaż https://earthengine-highvolume.googleapis.com jako pierwszy parametr.

Interfejs API typu REST

Kieruj żądania REST do https://earthengine-highvolume.googleapis.com (zamiast do https://earthengine.googleapis.com, jak pokazano np. w przewodniku Szybki start dotyczącym interfejsu API typu REST, ).

Środowisko wsadowe

To środowisko, nazywane też stosem „asynchronicznym” lub „offline”, jest zoptymalizowane pod kątem równoległego przetwarzania dużych ilości danych z dużym opóźnieniem. Żądania są przesyłane jako zadania do punktów końcowych przetwarzania wsadowego, zwykle przez wywołanie funkcji importu lub eksportu danych (np. Export.* i ee.batch.*) z bibliotek klienta Earth Engine. Maksymalny czas życia każdego zadania wsadowego wynosi 10 dni. Każdy projekt obsługuje do 3000 zadań oczekujących, ale każdy użytkownik jest ograniczony do niewielkiej liczby zadań wykonywanych jednocześnie.

Cykl życia zadania

Zadania są przesyłane do kolejki i porządkowane według priorytetu (najwyższy jako pierwszy) i czasu przesłania (najwcześniejszy jako pierwszy). Gdy zadania zostaną przypisane do procesora wsadowego, zmienią stan z SUBMITTED (w kolejce) na RUNNING (działające). Każdy procesor jest odpowiedzialny za koordynowanie różnej liczby procesów wsadowych w celu wykonania obliczeń i uzyskania wyników zadania. Liczba procesów dla zadania jest określana przez możliwość równoległego wykonywania zadania przez usługę EE i nie można jej skonfigurować.

Gdy używasz projektu w chmurze, zadania są widoczne dla wszystkich osób, które mają uprawnienia na poziomie projektu do wyświetlania listy zadań. Jeśli projekt jest zarejestrowany na potrzeby płatnego dostępu do Earth Engine, zadania są uporządkowane w kolejce obejmującej cały projekt. Jeśli projekt jest zarejestrowany na potrzeby bezpłatnego dostępu (do celów badawczych), zadania są planowane niezależnie dla każdego użytkownika, ale nadal są widoczne dla wszystkich użytkowników projektu.

Zadania są wykonywane pomyślnie, gdy tworzą niezbędne artefakty (zasoby Earth Engine, pliki w Google Cloud Storage itp.).

Zarządzanie zadaniami

Zadania można wyświetlać i anulować za pomocą tych interfejsów:

Niepowodzenia zadań

Jeśli zadanie nie powiedzie się z powodu, którego nie można naprawić przez ponowienie (np. dane są nieprawidłowe), zostanie oznaczone jako FAILED i nie zostanie ponownie uruchomione.

Jeśli zadanie nie powiedzie się z powodu, który może być przejściowy (np. przekroczy limit czasu podczas wykonywania obliczeń), Earth Engine automatycznie spróbuje je ponowić i wypełni pole retries. Zadania mogą się nie powieść maksymalnie 5 razy, a ostatnie niepowodzenie spowoduje oznaczenie całego zadania jako FAILED.

Identyfikator zadania

Każde zadanie ma alfanumeryczny identyfikator w formacie 3DNU363IM57LNU4SDTMB6I33. Można je wyświetlić lub uzyskać za pomocą naszych interfejsów zarządzania zadaniami. Jeśli uruchamiasz zadania programowo, identyfikator zadania uzyskasz z ee.data.newTaskId. Gdy prosisz o pomoc w debugowaniu zadania eksportu lub pozyskiwania, podaj ten identyfikator zadania jako ciąg znaków, który można skopiować (nie jako zrzut ekranu).

Lista stanów zadań

Zadania mogą mieć te wartości state:

  • UNSUBMITTED – nadal oczekuje na klienta.
  • READY – w kolejce na serwerze.
  • RUNNING – obecnie działa.
  • COMPLETED – ukończone pomyślnie.
  • FAILED – ukończone niepomyślnie.
  • CANCEL_REQUESTED– nadal działa, ale zostało zgłoszone do anulowania (tzn.nie ma gwarancji, że zadanie zostanie anulowane).
  • CANCELLED – anulowane przez właściciela.

Priorytet zadania

Priorytet zadania to mechanizm sterowania kolejnością zadań w kolejce. Zadania o wyższym priorytecie są planowane przed innymi zadaniami oczekującymi o niższym priorytecie, niezależnie od czasu przesłania. Domyślny priorytet zadania to 100.

Możliwość ustawienia innych priorytetów (wyższych lub niższych) w przypadku zadań eksportu jest tylko dostępna dla użytkowników projektów zarejestrowanych na potrzeby płatnego dostępu do Earth Engine dostępu. Zmiana priorytetu zadania eksportu nie wpływa na sposób jego planowania w stosunku do zadań importu, ponieważ te 2 typy zadań są planowane oddzielnie.

Przykład: używanie priorytetów zadań

Rozważmy tę listę zadań, na której zadania 1–5 są przesyłane w naturalnej kolejności z domyślnym priorytetem. Są one wykonywane w kolejności, w jakiej zostały przesłane, ponieważ wszystkie mają ten sam priorytet. Ponieważ w tym projekcie dostępne są 2 miejsca przetwarzania wsadowego, 2 zadania są wykonywane równolegle (pierwsze i drugie przesłane).

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

Przesłanie nowego zadania, MyHighPriorityTask1, nie wpłynie na działające zadania:

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

Gdy jedno z działających zadań zostanie ukończone, zostanie uruchomione zadanie oczekujące o najwyższym priorytecie (w tym przypadku zadanie o wysokim priorytecie):

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