Hater series: Azure Data Factory

Witam w cyklu postów z serii – jak wyprowadzić w pole programistę, zmarnować mu kilka dobrych godzin i spowodować, że wykres słów, powszechnie uważanych za wulgarne, od czasu, zacznie przypominać wykres N!.

Dzisiejszy odcinek sponsoruje usługa Azure Data Factory.

Naszym hostem jest nikt inny jak znany specjalista od kontr produktywności: Microsoft Visual Studio!

ADF-guest
Azure Data Factory and Visual Studio

Visual Studio: Zapraszam, zapraszam. Proszę przedstawić się naszym czytelnikom.

Azure Data Factory: Witam, możecie nazywać mnie ADF. Na co dzień można mnie znaleźć w katalogu usług Azure. Na co dzień zajmuje się ułatwianiem pracy przy “Big Data”.

VS: Na czym polega Twoja pomoc?

ADF: Umożliwiam programistom tworzenie pipeline’ów przetwarzających dane. Pipeline zawiera tabele (Table), aktywności (Activity) oraz inne pipeline’y które można łączyć w dowolny sposób. Tablice są źródłami danych a aktywności są kawałkiem kodu który przetwarza dane z tablicy A do tablicy B.

VS: No dobrze, ale co konkretnie ułatwia programistom pracę?

ADF: Cały pipeline jest uruchamiany na klastrach HDInsight 1 które mogą być albo tworzone dynamicznie albo mogą być hostowane przez programistę. W przypadku dynamicznych – zajmuję się ich tworzeniem gdy przychodzi potrzeba przetwarzania danych oraz usuwaniem gdy klaster nie jest używany.

VS: Czyli automatyzujesz pracę klastrów, czy coś jeszcze?

ADF: Oczywiście! Cały proces jest podzielony na tzw. data slices – fragmenty czasu które determinują zakres przetwarzanych danych. Developer definiuje fragment czasowy dla każdej tablicy (co ile czasu nowe dane są dostępne) – następnie ja zajmuję się opalaniem odpowiednich zadań w odpowiednim czasie.

VS: Aha, czyli developer musi tylko zdefiniować Tablice i Aktywności a resztą Ty się zajmujesz.

ADF: Dokładnie – cały proces uruchamiania, zarządzania, monitorowania oraz logowania jest załatwiany przeze mnie. Dodatkowo oferuję sporą ilość już gotowych aktywności do wykorzystania. Np. kopiowanie danych pomiędzy usługami Azure, uruchamianie skryptów Hive itp.. Udostępniam również framework do tworzenia Aktywności w C#.

VS: Wow! To naprawdę pokaźny zakres funkcjonalności. Musisz być naprawdę popularny w swoim gatunku. Sprawdźmy zatem czy suche słowa mają pokrycie w rzeczywistości.
Łączymy się teraz z naszym recenzentem na polu bitwy. Halo, halo jak nas słychać?

Słychać słabo ale czytać będę w stanie.

VS: Doskonale! Czy mógłbyś przybliżyć czytelnikom swoją opinię na temat pracy z Azure Data Factory.

ADF? Och, tak. Jasne. Pamiętam dobrze jedną z wielu historii o ADF.

Pewnego pięknego dnia otrzymałem proste zadanie:

Pamiętasz usługę ADF która stoi teraz na naszym środowisku developerskim? Jesteśmy z niej zadowoleni – wrzuć ją teraz na Staging 2.

Z wierzchu nie wyglądało to na skomplikowane zadanie:

  1. Weź wszystkie zmiany dotyczące ADF z brancha Dev i wykonaj Merge do brancha Main
  2. Pozmieniaj wszystkie stałe/hasła/adresy na odpowiednie dla środowiska Stage
  3. Wyklep w Azure wszystkie wymagane usługi do działania ADF
  4. Wykonaj deployment ADF na uprzednio przygotowanego Azure’a

Trochę to czasochłonne ale cóż. Na szczęście punkty 1,2,3 poszły bez problemu.

Został ostatni 4 punkt. Próba wykonania publishu z Visual Studio 2015 z wtyczką do ADF okazała się totalnie bezowocna. Nie dość, że sama wtyczka “łaskawie” raczyła ruszyć za około piątym razem to oczywiście nie poradziła sobie z wysłaniem plików na Azure storage.

Nie, nie chce mi się dłużej z nią walczyć – wyśle te brakujące pliki sam. Kilka minut i po sprawie.

Ok, teraz wszystko wygląda w porządku – no to odpalamy!
Godzinę później mamy wynik (odpalanie klastra trwa wieczność) – CRASH!

No to do logów.

Aaa, moja wina – skrypty hive były źle zakodowane. ASCII only!

(VS oczywiście standardowo koduje w Unicode. Nie, żeby mogli to wziąć pod uwagę przy korzystaniu z OFICJALNEGO TEMPLATE dla skryptów hive – ale ok. To nie jest duży problem. Przekodujemy 7 plików i będzie dobrze. Prawda?

Gó*no prawda…

Przy następnym uruchomieniu (kolejna godzina na marne) wita nas w logach miła wiadomość:

ADF-error
ADF Error

Taaaak, NullPointerException.

Wszystko wiem! No ba, oczywista oczywistość – problem leży w…
No właśnie, gdzie jest problem?

Hmm, edytowałem niby skrypty hive w czasie działania klastra – może klaster zgłupiał?
Godzinny restart później…

Nope!
Dalej to samo.

Ok, nie ma co się cackać – zrobimy diff WSZYSTKICH skryptów pomiędzy wersją developerską która działa a obecną i się dowiemy.

Ehhh…

ADF-pipeline
Reczy do “zdiffowania”…

Diffu diffu diffu…

sometimelater

SĄ IDENTYCZNE!
(Wdech. Wydech. Wdech. Wydech.)

Ok, spokojnie, powoli – co jeszcze mogło się skaszanić?

  • Usługi – stoją
  • Skrypty – są poprawne
  • Aktywności .NET – działają poprawne
  • Zewnętrzne zasoby – wszystko online

Żeby nie przeciągać.

Okazało się, że brakuje “kontenerów” w usłudze Azure Storage. Owe “kontenery” wykorzystywane są przez Hive jako miejsce gdzie mają wylądować wyniki ze skryptów.

Rozumiem – mogłem sprawdzić, upewnić się czy zostały stworzone.

Ale no kutfa… NullPointerException?!
Naprawdę?
To innych wyjątków nie mają? Są dodatkowo płatne czy coś?

ARGH…

VS: Dziękujemy za Tą wyczerpującą wypowiedź! Niestety ale nasz czas internetowy zbliża się ku końcowi.
Żegnamy się więc z czytelnikami i do zobaczenia!

  1. W wielkim skrócie to hadoop dla Windows
  2. Środowisko pre-produkcyjne.

Be First to Comment

A penny for your thoughts