Tworzenie bezserwerowego potoku danych: IoT w Analytics

1. Omówienie/wprowadzenie

Chociaż wielowarstwowe aplikacje obejmujące sieć, serwer aplikacji i bazę danych są fundamentem tworzenia stron internetowych i stanowią punkt wyjścia dla wielu witryn, sukces często wiąże się z wyzwaniami dotyczącymi skalowalności, integracji i elastyczności. Jak można przetwarzać dane w czasie rzeczywistym i udostępniać je w wielu kluczowych systemach biznesowych? Te problemy w połączeniu z wymaganiami aplikacji internetowych doprowadziły do potrzeby stworzenia rozproszonego systemu przesyłania wiadomości i wygenerowały architektoniczny wzorzec używania potoku danych w celu uzyskania odpornych systemów działających w czasie rzeczywistym. Dlatego umiejętność publikowania danych w czasie rzeczywistym w rozproszonych systemach przesyłania wiadomości i tworzenie strumienia danych są kluczowymi umiejętnościami zarówno dla programistów, jak i architektów.

Co utworzysz

W tym laboratorium programistycznym utworzysz potok danych o pogodzie, który zaczyna się od urządzenia IoT, wykorzystuje kolejkę wiadomości do odbierania i przesyłania danych, korzysta z funkcji bezserwerowej do przenoszenia danych do hurtowni danych, a potem tworzy panel wyświetlający informacje. Do urządzenia IoT zostanie użyty Raspberry Pi z czujnikiem pogody, a potok danych będzie się składać z kilku komponentów Google Cloud Platform. Utworzenie Raspberry Pi, choć przydatne, jest opcjonalną częścią tego Codelab, a strumień danych o pogodzie można zastąpić skryptem.

79cd6c68e83f7fea.png

Po ukończeniu tego ćwiczenia z programowania otrzymasz strumień danych zasilający panel, który wyświetla temperaturę, wilgotność, punkt rosy i ciśnienie powietrza.

e28ca9ea4abb1457.png

Czego się nauczysz

  • Jak korzystać z Google Pub/Sub
  • Jak wdrożyć funkcję w Google Cloud Functions
  • Jak korzystać z Google BigQuery
  • Jak utworzyć panel za pomocą Google Data Studio
  • Jeśli utworzysz czujnik IoT, dowiesz się też, jak używać pakietu Google Cloud SDK i jak zabezpieczać wywołania dostępu zdalnego do Google Cloud Platform.

Czego potrzebujesz

Jeśli chcesz zbudować część czujnika IoT w tym Codelab zamiast korzystać z przykładowych danych i skryptu, musisz też mieć: (można je zamówić jako kompletny zestaw lub jako poszczególne części tutaj)

  • Raspberry Pi Zero W z zasilaczem, kartą pamięci SD i etui
  • Czytnik kart USB
  • Koncentrator USB (umożliwiający podłączenie klawiatury i myszy do jedynego portu USB w Raspberry Pi)
  • Przewody do płytki prototypowej żeńskie i żeńskie
  • Nagłówki GPIO Hammer
  • Czujnik BME280
  • Lutownica z lutem

Zakładamy też, że użytkownik musi mieć dostęp do monitora komputera lub telewizora z wejściem HDMI, kabla HDMI, klawiatury i myszy.

2. Przygotowanie

Samodzielne konfigurowanie środowiska

Jeśli nie masz jeszcze konta Google (Gmaila lub G Suite), musisz je utworzyć. Niezależnie od tego, czy masz już konto Google, skorzystaj z bezpłatnego okresu próbnego, w ramach którego masz do dyspozycji środki w wysokości 300 USD.

Zaloguj się w konsoli Google Cloud Platform (console.cloud.google.com). Możesz użyć w tym module domyślnego projektu („Mój pierwszy projekt”) lub utworzyć nowy projekt. Jeśli chcesz utworzyć nowy projekt, możesz użyć strony zarządzania zasobami. Identyfikator projektu musi być unikalny wśród wszystkich projektów Google Cloud (ten widoczny poniżej jest już zajęty i nie będzie działać). Zanotuj identyfikator swojego projektu (np. identyfikator projektu _____), ponieważ będzie potrzebny później.

f414a63d955621a7.png

3415e861c09cd06a.png

Wykonanie tych ćwiczeń w programie nie powinno kosztować więcej niż kilka dolarów, ale może być wyższe, jeśli zdecydujesz się użyć więcej zasobów lub w ogóle je pozostawić. Zapoznaj się z sekcją Czyszczenie na końcu tego ćwiczenia z programowania.

3. Tworzenie tabeli BigQuery

BigQuery to bezserwerowa, wysoce skalowalna i tania hurtownia danych dla firm. Będzie idealną opcją przechowywania danych przesyłanych strumieniowo z urządzeń IoT, a jednocześnie umożliwi panelowi analitycznemu zapytania o informacje.

Utwórzmy tabelę, która będzie zawierać wszystkie dane pogodowe IoT. Wybierz BigQuery w konsoli Google Cloud. Otworzy to BigQuery w nowym oknie (nie zamykaj oryginalnego okna, ponieważ będziesz z niego korzystać ponownie).

12a838f78a10144a.png

Kliknij ikonę strzałki w dół obok nazwy projektu, a potem wybierz „Utwórz nowy zbiór danych”.

27616683b64ce34a.png

Wpisz „WeatherData” dla zbioru danych, wybierz lokalizację, w której będą przechowywane, i kliknij „OK”

62cfcbd1add830ea.png

Aby utworzyć nową tabelę, kliknij znak „+” obok zbioru danych.

3d7bff6f9843fa3c.png

W polu Dane źródłowe wybierz Utwórz pustą tabelę. W polu Nazwa tabeli docelowej wpisz pogodęDataTable. W sekcji Schemat klikaj przycisk Dodaj pole, aż będzie łącznie 9 pol. Wypełnij pola zgodnie z podanym niżej wzorcem, pamiętając o wybraniu odpowiedniego typu dla każdego z nich. Gdy skończysz, kliknij przycisk Utwórz tabelę.

eef352614a5696a7.png

Powinien wyświetlić się taki wynik...

7D10e5ab8c6d6a0d.png

Masz już skonfigurowane hurtownię danych, która będzie odbierać dane o pogodzie.

4. Tworzenie tematu Pub/Sub

Cloud Pub/Sub to prosta, niezawodna i skalowalna podstawa do analizy strumieni i systemów obliczeniowych opartych na zdarzeniach. W związku z tym doskonale nadaje się do obsługi przychodzących wiadomości IoT, a następnie umożliwienia ich przetworzenia przez kolejne systemy.

Jeśli nadal widzisz okno BigQuery, przełącz się z powrotem na konsolę Cloud. Jeśli konsola Cloud została przez Ciebie zamknięta, otwórz stronę https://console.cloud.google.com

W konsoli Google Cloud wybierz Pub/Sub, a następnie Topics (Tematy).

331ad71e8a1ea7b.png

Jeśli pojawi się prośba o włączenie interfejsu API, kliknij przycisk Włącz API.

9f6fca9dc8684801.png

Kliknij przycisk Utwórz temat.

643670164e9fae12.png

Wpisz „weatherdata” jako nazwę tematu i kliknij Utwórz.

d7b049bc66a34db6.png

Powinien być widoczny nowo utworzony temat.

7c385759f65a1031.png

Masz już temat Pub/Sub, do którego możesz publikować wiadomości IoT i umożliwiać innym procesom dostęp do tych wiadomości.

Bezpieczne publikowanie w temacie

Jeśli planujesz publikować wiadomości na temat Pub/Sub z zasobów spoza Google Cloud Console (np. czujnika IoT), musisz zapewnić ściślejszą kontrolę dostępu za pomocą konta usługi i zabezpieczyć połączenie, tworząc certyfikat zaufania.

W konsoli Cloud wybierz Administracja, a następnie Konta usługi.

8e2f8a1428d0feca.png

Kliknij przycisk Utwórz konto usługi

60892b564e0ac140.png

Z menu Rola wybierz rolę publikującego Pub/Sub.

31f8c944af11270e.png

Wpisz nazwę konta usługi (iotWeatherPublisher), zaznacz pole wyboru Udostępnij nowy klucz prywatny, upewnij się, że typ klucza jest ustawiony na JSON i kliknij „Utwórz”

7e3f9d7e56a44796.png

Klucz bezpieczeństwa zostanie pobrany automatycznie. Do klucza jest tylko 1 klucz, więc trzeba go nie stracić. Kliknij „Zamknij”.

60a7da32dd85ba73.png

Powinno być widać, że konto usługi zostało utworzone i powiązany jest z nim identyfikator klucza.

b25f6f5629fe8fd7.png

Abyś mógł/mogła łatwo uzyskać do niego dostęp później, zapiszemy go w Google Cloud Storage. W konsoli Cloud wybierz Storage, a następnie Browser.

c4414fe61be320a9.png

Kliknij przycisk Utwórz zasobnik.

cde91311b267fc65.png

Wybierz nazwę zasobnika Cloud Storage (musi być ona globalnie niepowtarzalna w Google Cloud) i kliknij przycisk Utwórz.

28c10e41b401f479.png

Znajdź klucz bezpieczeństwa, który został automatycznie pobrany, a następnie przeciągnij go i upuść lub prześlij do zasobnika na dane.

a0f6d069d42cec4b.png

Po przesłaniu klucza powinien on pojawić się w przeglądarce Cloud Storage.

55b25c8b9d73ec19.png

Zapisz sobie nazwę zasobnika i nazwę pliku klucza bezpieczeństwa.

5. Utwórz funkcję w Cloud Functions

Komputery w chmurze umożliwiły tworzenie w pełni bezserwerowych modeli obliczeniowych, w których logikę można uruchamiać na żądanie w odpowiedzi na zdarzenia pochodzące z dowolnego miejsca. W tym laboratorium funkcja Cloud Functions będzie uruchamiana za każdym razem, gdy zostanie opublikowana wiadomość na temat pogody. Funkcja odczyta wiadomość i zapisze ją w BigQuery.

W konsoli Cloud Console wybierz Cloud Functions.

a14ac2e4f03bf831.png

Jeśli wyświetli się komunikat interfejsu API, kliknij przycisk Włącz API

40ba0a08430e0e8a.png

Kliknij przycisk Utwórz funkcję.

5d82d8faeffa55bf.png

W polu Nazwa wpisz function-weatherPubSubToBQ. W sekcji „Wyzwalacz” wybierz temat Cloud Pub/Sub, a w menu „Temat” wybierz weatherdata. W przypadku kodu źródłowego wybierz edytor wbudowany. Na karcie index.js wklej ten kod w miejscu, od którego należy zacząć. Pamiętaj, aby zmienić stałe wartości projectId, datasetId i tableId, aby pasowały do Twojego środowiska.

/**
 * Background Cloud Function to be triggered by PubSub.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.subscribe = function (event, callback) {
  const BigQuery = require('@google-cloud/bigquery');
  const projectId = "myProject"; //Enter your project ID here
  const datasetId = "myDataset"; //Enter your BigQuery dataset name here
  const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
  const PubSubMessage = event.data;
  // Incoming data is in JSON format
  const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
  const jsonData = JSON.parse(incomingData);
  var rows = [jsonData];

  console.log(`Uploading data: ${JSON.stringify(rows)}`);

  // Instantiates a client
  const bigquery = BigQuery({
    projectId: projectId
  });

  // Inserts data into a table
  bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows)
    .then((foundErrors) => {
      rows.forEach((row) => console.log('Inserted: ', row));

      if (foundErrors && foundErrors.insertErrors != undefined) {
        foundErrors.forEach((err) => {
            console.log('Error: ', err);
        })
      }
    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END bigquery_insert_stream]


  callback();
};

Na karcie package.json wklej ten kod, zastępując umieszczony w nim kod zastępczy.

{
  "name": "function-weatherPubSubToBQ",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "dependencies": {
    "@google-cloud/bigquery": "^0.9.6"
  }
}

Jeśli funkcja do wykonania jest ustawiona na „HelloWorld”, zmień ją na „subscribe”. Z użyciem przycisku Utwórz

3266d5268980a4db.png

Funkcja pokaże, że została wdrożona, po około 2 minutach

26f45854948426d0.png

Gratulacje! Pub/Sub został połączony z BigQuery za pomocą funkcji.

6. Konfigurowanie sprzętu IoT (opcjonalnie)

Montaż Raspberry Pi i czujnika

Jeśli jest ich więcej niż 7, skróć nagłówek do 7 pinów. Przylutuj styki nagłówka do płytki czujnika.

a162e24426118c97.png

Ostrożnie włóż styki młotka do Raspberry Pi.

a3a697907fe3c9a9.png

Sformatuj kartę SD i zainstaluj instalator NOOBS (New Of Box Software), wykonując czynności opisane tutaj. Włóż kartę SD do Raspberry Pi i włóż ją do etui.

1e4e2459cd3333ec.png

Użyj przewodów płytki prototypowej, aby podłączyć czujnik do Raspberry Pi, zgodnie z poniższym schematem.

392c2a9c85187094.png

Złącze Raspberry Pi

Połączenie czujnika

Pin 1 (3,3 V)

Numer VIN

Pin 3 (CPIO2)

SDI

Kod PIN 5 (GPIO3)

SCK

Pin 9 (transport lądowy)

GND

44322e38d467d66a.png

Podłącz monitor (złącze mini-HDMI), klawiaturę/mysz (z koncentratorem USB), a na koniec podłącz zasilacz.

Konfigurowanie Raspberry Pi i czujnika

Po uruchomieniu Raspberry Pi wybierz system operacyjny Raspbian, sprawdź, czy wybrany język jest prawidłowy, a potem kliknij Zainstaluj (ikona dysku twardego w lewym górnym rogu okna).

a16f0da19b93126.png

Kliknij ikonę Wi-Fi (w prawym górnym rogu ekranu) i wybierz sieć. Jeśli korzystasz z sieci zabezpieczonej, wpisz hasło (klucz wstępnie udostępniony).

17f380b2d41751a8.png

Kliknij ikonę maliny (w lewym górnym rogu ekranu), wybierz Preferences (Preferencje), a następnie wybierz Raspberry Pi Configuration (Konfiguracja Raspberry Pi). Na karcie Interfejsy włącz I2C. Na karcie Lokalizacja ustaw język i strefę czasową. Po ustawieniu strefy czasowej zezwól na ponowne uruchomienie Raspberry Pi.

14741a77fccdb7e7.png

Po ponownym uruchomieniu urządzenia kliknij ikonę terminala, aby otworzyć okno terminala.

9df6f228f6a31601.png

Wpisz następujące polecenie, aby sprawdzić, czy czujnik jest prawidłowo podłączony.

  sudo i2cdetect -y 1

Wynik powinien wyglądać tak – upewnij się, że wyświetla się 77.

cd35cd97bee8085a.png

Instalowanie pakietu SDK Google Cloud

Aby korzystać z narzędzi na platformie Google Cloud, na Raspberry Pi trzeba zainstalować pakiet Google Cloud SDK. Pakiet SDK zawiera narzędzia potrzebne do zarządzania Google Cloud Platform i korzystania z niej. Jest dostępny w różnych językach programowania.

Otwórz okno terminala na Raspberry Pi (jeśli jeszcze nie jest otwarte) i ustaw zmienną środowiskową, która będzie pasować do wersji pakietu SDK do systemu operacyjnego na Raspberry Pi.

  export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

Teraz dodaj lokalizację, w której są przechowywane pakiety Google Cloud SDK, aby narzędzia do instalacji wiedziały, gdzie szukać pakietu SDK.

  echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" |  sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

Dodaj klucz publiczny z repozytorium pakietów Google, aby umożliwić Raspberry Pi weryfikację zabezpieczeń i ufność treści podczas instalacji

  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Sprawdź, czy oprogramowanie na Raspberry Pi jest aktualne, i zainstaluj podstawowy pakiet SDK Google Cloud

  sudo apt-get update && sudo apt-get install google-cloud-sdk

Gdy pojawi się pytanie „Czy chcesz kontynuować?”, naciśnij klawisz Enter.

Zainstaluj pakiet tendo za pomocą menedżera pakietów Pythona. Ten pakiet służy do sprawdzania, czy skrypt jest uruchomiony więcej niż raz i jest instalowany dla jego aplikacji w skrypcie pogody.

  pip install tendo

Upewnij się, że pakiety Google Cloud Pub/Sub i OAuth2 dla Pythona są zainstalowane i zaktualizowane za pomocą menedżera pakietów Pythona.

  sudo pip install --upgrade google-cloud-pubsub
  sudo pip install --upgrade oauth2client

Inicjowanie pakietu Google Cloud SDK

Pakiet SDK umożliwia zdalny, uwierzytelniony dostęp do Google Cloud. W tym przypadku będzie on używany do uzyskiwania dostępu do zasobnika, aby można było łatwo pobrać klucz bezpieczeństwa na Raspberry Pi.

W wierszu poleceń na Raspberry Pi wpisz

  gcloud init --console-only

Gdy pojawi się pytanie „Czy chcesz się zalogować (T/n)?”, naciśnij Enter.

Gdy zobaczysz komunikat „Otwórz ten link w przeglądarce:”, a pod nim długi adres URL zaczynający się od https://accounts.google.com/o/oauth?..., najedź kursorem na adres URL, kliknij prawym przyciskiem myszy i wybierz „Kopiuj adres URL”. Następnie otwórz przeglądarkę (ikona niebieskiej kuli ziemskiej w lewym górnym rogu ekranu), kliknij pasek adresu prawym przyciskiem myszy i wybierz „Wklej”.

Gdy zobaczysz ekran logowania, wpisz adres e-mail powiązany z Twoim kontem Google Cloud i naciśnij Enter. Następnie wpisz hasło i kliknij przycisk Dalej.

Zobaczysz prośbę, że pakiet SDK Google Cloud chce uzyskać dostęp do Twojego konta Google. Kliknij przycisk Zezwól.

Zobaczysz kod weryfikacyjny. Zaznacz go myszką, a potem kliknij prawym przyciskiem myszy i wybierz Kopiuj. Wróć do okna terminala, sprawdź, czy kursor znajduje się po prawej stronie pola „Wpisz kod weryfikacyjny:”, kliknij prawym przyciskiem myszy i wybierz Wklej. Naciśnij Enter.

Jeśli pojawi się prośba o wybranie projektu w chmurze, którego chcesz użyć, wpisz liczbę odpowiadającą nazwie projektu, która została przez Ciebie użyta w tym ćwiczeniu w programowaniu, a następnie naciśnij Enter.

Jeśli pojawi się prośba o włączenie interfejsu compute API, naciśnij klawisz Enter, aby go włączyć. Następnie zostanie wyświetlony komunikat z prośbą o skonfigurowanie ustawień Google Compute Engine. Naciśnij klawisz Enter. Wyświetli się lista możliwych regionów lub stref – wybierz ten, który znajduje się najbliżej Ciebie, wpisz odpowiedni numer i naciśnij klawisz Enter.

Za chwilę pojawią się dodatkowe informacje. Pakiet Google Cloud SDK jest teraz skonfigurowany. Możesz zamknąć okno przeglądarki, ponieważ nie będzie już potrzebny.

Instalowanie oprogramowania czujnika i skryptu pogodowego

Na linii poleceń na Raspberry Pi sklonuj potrzebne pakiety do odczytu informacji z pinów wejścia/wyjścia.

  git clone https://github.com/adafruit/Adafruit_Python_GPIO

Instalowanie pobranych pakietów

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

Skopiuj kod projektu, który włącza czujnik pogody

  git clone https://github.com/googlecodelabs/iot-data-pipeline

Skopiuj sterownik czujnika do tego samego katalogu, w którym znajduje się pozostała część pobranego oprogramowania.

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

Edytuj skrypt, wpisując...

  nano checkWeather.py

Zmień projekt na identyfikator projektu, a temat na nazwę tematu Pub/Sub (te informacje zostały podane w sekcji Konfiguracja i Tworzenie tematu Pub/Sub w tym laboratorium kodu).

Zmień wartości sensorID, sensorZipCode, sensorLat i sensorLong na dowolną wartość. Wartości szerokości i długości geograficznej dla konkretnej lokalizacji lub adresu znajdziesz tutaj.

Po wprowadzeniu niezbędnych zmian naciśnij Ctrl+X, aby zamknąć edytor nano. Naciśnij Y, aby potwierdzić.

# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"

Instalowanie klucza bezpieczeństwa

Skopiuj klucz bezpieczeństwa (z sekcji „Bezpieczne publikowanie w temacie”) do Raspberry Pi.

Jeśli skopiowałeś klucz bezpieczeństwa z lokalnego komputera na Raspberry Pi (do katalogu /home/pi) za pomocą SFTP lub SCP, możesz pominąć następny krok i przejść do eksportowania ścieżki.

Jeśli klucz bezpieczeństwa został umieszczony w zasobniku na dane, musisz zapamiętać nazwę zasobnika na dane i nazwę pliku. Aby skopiować klucz bezpieczeństwa, użyj polecenia gsutil. To polecenie może uzyskać dostęp do Google Storage (stąd nazwa gsutil i ścieżka do pliku zaczynająca się od gs://). Pamiętaj, aby w poniższym poleceniu podać nazwę Twojego zasobnika i nazwy pliku.

  gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .

Powinien pojawić się komunikat o kopiowaniu pliku, a potem o zakończeniu operacji.

Z wiersza poleceń w Raspberry Pi wyeksportuj ścieżkę do klucza bezpieczeństwa (zmień nazwę pliku, aby była zgodna z tym, co masz).

  export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json

Masz teraz gotowy czujnik pogodowy IoT, który jest gotowy do przesyłania danych do Google Cloud.

7. Uruchamianie potoku danych

Konieczne może być włączenie interfejsu Compute API

Strumieniowanie danych z Raspberry Pi

Jeśli masz czujnik pogody IoT Raspberry Pi, uruchom skrypt, który odczyta dane pogodowe i prześle je do Google Cloud Pub/Sub. Jeśli nie jesteś w katalogu /home/pi/iot-data-pipeline, przejdź najpierw do tego katalogu

  cd /home/pi/iot-data-pipeline

Uruchamianie skryptu pogody

  python checkWeather.py

W oknie terminala co minutę powinny pojawiać się wyniki dotyczące danych pogodowych. Jeśli dane są przesyłane, możesz przejść do następnej sekcji (Sprawdzanie, czy dane są przesyłane).

Symulowany strumień danych

Jeśli czujnik pogody IoT nie został utworzony przez Ciebie, możesz zasymulować strumieniowanie danych, korzystając z publicznego zbioru danych zapisanego w Google Cloud Storage i przesyłając go do istniejącego tematu Pub/Sub. Użyjesz usługi Google Dataflow oraz udostępnionego przez Google szablonu do odczytywania danych z Cloud Storage i publikowania ich w Pub/Sub.

W ramach tego procesu Dataflow będzie potrzebować tymczasowego miejsca na dane, więc utwórzmy zasobnik na potrzeby tego celu.

W konsoli Cloud wybierz Storage, a następnie Browser.

c4414fe61be320a9.png

Kliknij przycisk Utwórz zasobnik.

cde91311b267fc65.png

Wybierz nazwę zasobnika (pamiętaj, że musi być ona globalnie niepowtarzalna w całej usłudze Google Cloud) i kliknij przycisk Utwórz. Zapamiętaj nazwę tego zasobnika na dane, ponieważ będzie Ci ona potrzebna za chwilę.

1dad4cfbccfc96b1.png

W konsoli Cloud wybierz Dataflow.

43ec245b47ae2e78.png

Kliknij Utwórz zadanie z szablonu (w górnej części ekranu).

da55aaf2a1b0a0d0.png

Podaj szczegóły stanowiska, jak pokazano poniżej. Zwróć uwagę na te kwestie:

  • Wpisz nazwę zadania dataflow-gcs-to-pubsub
  • Region powinien być wybierany automatycznie na podstawie miejsca hostowania projektu i nie powinien wymagać zmiany.
  • Wybierz szablon Cloud Dataflow GCS Text to Cloud Pub/Sub (Tekst GCS do Cloud Pub/Sub)
  • W polu „Pliki wejściowe w Cloud Storage” wpisz gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (to publiczny zbiór danych).
  • Dokładna ścieżka w wyjściowym temacie Pub/Sub będzie zależała od nazwy projektu i będzie wyglądać mniej więcej tak: „projekty/nazwaProjektu/tematy/danepogodowe”.
  • Ustaw lokalizację tymczasową na nazwę utworzonego właśnie zasobnika Cloud Storage oraz prefiks nazwy pliku „tmp”. Powinien on wyglądać tak: „gs://myStorageBucketName/tmp”.

Po wpisaniu wszystkich informacji (patrz poniżej) kliknij przycisk Uruchom zadanie

5f8ca16672f19d9b.png

Zadanie Dataflow powinno się uruchomić.

e020015c369639ad.png

Ukończenie zadania Dataflow powinno zająć około minuty.

218a3ff7197dcf75.png

8. Sprawdzanie, czy dane są przesyłane

Logi funkcji w Cloud Functions

Sprawdź, czy funkcja w Cloud Functions jest aktywowana przez Pub/Sub

  gcloud beta functions logs read function-weatherPubSubToBQ

Logi powinny wskazywać, że funkcja jest wykonywana, odbiera dane i że są wstawiane do BigQuery

d88f7831dabc8b3f.png

Dane BigQuery

Sprawdź, czy dane są przesyłane do tabeli BigQuery. W konsoli Cloud otwórz BigQuery (bigquery.cloud.google.com).

85627127d58f1d2e.png

Pod nazwą projektu (po lewej stronie okna) kliknij Zbiór danych (weatherData), a potem tabelę (weatherDataTable) i kliknij przycisk Tabela zapytań.

44dc0f765a69580c.png

Dodaj gwiazdkę do instrukcji SQL, aby wyglądała ona jak SELECT * FROM…, jak pokazano poniżej, a potem kliknij przycisk Uruchom zapytanie.

b3a001e11c2902f2.png

Jeśli pojawi się taka prośba, kliknij przycisk Uruchom zapytanie.

2c894d091b789ca3.png

Jeśli pojawią się wyniki, oznacza to, że przepływ danych jest prawidłowy.

c8a061cebb7b528a.png

W przypadku przepływu danych możesz teraz utworzyć panel analityczny.

9. Tworzenie panelu Studia danych

Studio danych Google pozwala Ci tworzyć przyjazne raporty i panele informacyjne na podstawie Twoich danych – do tego możesz je dopasować do swoich potrzeb i łatwo udostępniać.

W przeglądarce otwórz stronę https://datastudio.google.com

10f8c27060cd7430.png

W sekcji „Tworzenie nowego raportu” kliknij Pusty, a następnie przycisk Rozpocznij

df1404bc0047595e.png

Zaznacz pole wyboru, aby zaakceptować warunki, kliknij przycisk Dalej, wybierz e-maile, które chcesz otrzymywać, i kliknij Gotowe. Ponownie w sekcji „Utwórz nowy raport” kliknij Pusty.

55e91d3dd88b05ca.png

Kliknij przycisk Utwórz nowe źródło danych.

a22f3fac05774fc9.png

Kliknij BigQuery, a potem przycisk Autoryzuj i wybierz konto Google, którego chcesz używać w Studiu danych (powinno to być to samo konto, którego używasz w ramach laboratorium kodu).

5ab03f341edc8964.png

Kliknij przycisk Zezwól.

22bcdbb5f5f1d30c.png

Wybierz nazwę projektu, zbiór danych i tabelę. Następnie kliknij przycisk Connect (Połącz).

dc6b6b0ed9ced509.png

Zmień pola typu zgodnie z podanym niżej wzorcem (wszystko powinno być liczbą z wyjątkiem pól timecollected i sensorID). Pamiętaj, że parametr timecollected ma wartość Date Hour (a nie tylko Date). Zmień wartości w polach Agregacja zgodnie z poniższym opisem (punkt rosy, temperatura, wilgotność i ciśnienie powinny być wartościami średnimi, a w pozostałych przypadkach mieć wartość „Brak”). Kliknij przycisk Utwórz raport.

c60887e29c3bdf9b.png

Potwierdź, klikając przycisk Dodaj do raportu.

5ec3888dfdd85095.png

Jeśli pojawi się prośba o wybranie konta Google, zrób to, a potem kliknij przycisk Zezwól, aby umożliwić Studiu danych przechowywanie raportów na Dysku Google.

7b8006a813b3defa.png

Pojawi się puste pole, w którym możesz utworzyć panel. Z górnego rzędu ikon wybierz Seria czasowa.

c7cd97354e1cde04.png

W lewym górnym rogu pustego arkusza narysuj prostokąt. Powinien zajmować około 1⁄4 pustej arkusza.

e0e82cb19921f835.png

Po prawej stronie okna kliknij kartę Styl. Zmień ustawienie „Brak danych” z „Linie do zera” na „Znaki końca wiersza”. W sekcji Lewa oś Y usuń 0 z pola Oś minimalna, aby zmienić je na (Auto).

c7620bfe734d546.png

Kliknij wykres w arkuszu i skopiuj go i wklej (Ctrl+C/Ctrl+V) trzy razy. Dopasuj wykresy tak, aby każdy z nich miał 1⁄4 jego układu.

9a7d3faa28996219.png

Kliknij każdy wykres, a następnie w sekcji Właściwości i dane ciągu czasowego kliknij istniejący wskaźnik (punkt rosy), wybierz inne dane, które będą wyświetlane, dopóki wszystkie cztery odczyty pogody (punkt rosy, temperatura, wilgotność i ciśnienie) nie będą miały własnego wykresu.

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

Masz teraz podstawowy pulpit nawigacyjny.

8f59e8f4d44b8552.png

10. Gratulacje!

Udało Ci się utworzyć cały potok danych. W ramach tego ćwiczenia poznasz sposób korzystania z Google Pub/Sub, wdrażania funkcji bez serwera, korzystania z BigQuery oraz tworzenia panelu analitycznego w Studiu danych. Wiesz też, jak bezpiecznie przesyłać dane do Google Cloud Platform przy użyciu pakietu Google Cloud SDK. W końcu zdobywasz praktyczne doświadczenie w zakresie ważnego wzorca architektury, które pozwala obsłużyć duże ilości danych przy zachowaniu dostępności.

79cd6c68e83f7fea.png

Porządkowanie roszczeń

Gdy zakończysz eksperymentowanie z danymi pogodowymi i potokiem analitycznym, możesz usunąć uruchomione zasoby.

Jeśli masz czujnik IoT, wyłącz go. Naciśnij Ctrl+C w oknie terminala, aby zatrzymać skrypt, a następnie wpisz następujące polecenie, aby wyłączyć Raspberry Pi

  shutdown -h now

Otwórz Cloud Functions, kliknij pole wyboru obok funkcji function-weatherPubSubToBQ, a potem kliknij Usuń.

ae95f4f7178262e0.png

Otwórz Pub/Sub, kliknij Temat, kliknij pole wyboru obok tematu weatherdata, a następnie kliknij Usuń.

6fb0bba3163d9a32.png

Przejdź do sekcji Pamięć, kliknij pola wyboru obok zasobników pamięci, a następnie kliknij Usuń.

9067fb2af9f907f4.png

Otwórz stronę bigquery.cloud.google.com, kliknij strzałkę w dół obok nazwy projektu, kliknij strzałkę w dół po prawej stronie zbioru danych weatherData, a potem kliknij Usuń zbiór danych.

a952dfeec49248c4.png

Gdy pojawi się odpowiedni komunikat, wpisz identyfikator zbioru danych (weatherData), aby zakończyć usuwanie danych.

6310b1cc8da31a77.png