Potrzebujemy najlepszych rozwiązań, a nie tych, które po prostu działają. Jakub Tlałka o pracy Data Engineera

– Data engineering dostarcza wciąż nowych i ciekawych wyzwań. Nie wystarczy przeczytać dokumentacji Sparka, by wiedzieć jak naprawdę działa. Frustracje, które mogą się wiązać z kolejnymi nieudanymi próbami wynagradza moment, w którym kod zaczyna działać i przetwarzać terabajty danych dziennie – mówi w rozmowie z nami Jakub Tlałka, Engineering Manager w Samba TV.

Na czym polega praca na stanowisku Data Engineera? Tego dowiecie się z poniższej rozmowy.

Czym zajmuje się Samba TV?

Samba TV łączy świat telewizji i Internetu. Dzięki bezpośredniej integracji w milionach telewizorów oraz zastosowaniu technologii rozpoznawania obrazu, Samba jest w stanie budować w czasie rzeczywistym słupki oglądalności poszczególnych kanałów TV. Dzięki Sambie konsument zyskuje dostęp do prawdziwie spersonalizowanej telewizji, a reklamodawca ma możliwość dotrzeć w Internecie do osób o konkretnych zainteresowaniach, potwierdzonych przez oglądane w telewizji treści.

Czego zazwyczaj dotyczą dane, które analizuje Samba TV?

Dane dotyczą przede wszystkim tego, co ludzie oglądają na swoich telewizorach. Analizujemy wszystkie treści, zarówno telewizję na żywo, serwisy wideo na życzenie, jak i gry z Playstation czy Xboxa.

Co jest największym obciążeniem, jeśli chodzi o analizowane dane? Rodzaj czy ilość danych?

Bardzo istotne jest to jak dane są przechowywane. Przydaje się dzielić je względem różnych parametrów. Jeśli np. przetwarzamy zbiór zdarzeń to naturalnym podziałem jest chociażby godzina zdarzenia. Największe problemy sprawiają duże zbiory surowych danych, przechowywanych w niewygodnych formatach.

Czasami trzeba przeczytać cały taki zbiór, by wyciągnąć z niego jedynie małą część informacji

Mógłbyś przedstawić przykład takiego zadania dla big data engineera?

Załóżmy, że chcemy każdego dnia przeliczać jak dużo czasu ludzie spędzili oglądając sport w ciągu ostatniego roku. Pierwszym podejściem mogłoby być zbieranie danych o oglądalności programów sportowych z całego roku i ich podsumowanie. Jednak przeglądanie danych z całego roku to dość kosztowna i długa operacja. Raczej nie chcemy jej wykonywać każdego dnia. Zamiast tego, codziennie możemy podsumowywać dane z poprzedniego dnia. Wtedy wystarczy raz przeliczyć dane z całego roku, a potem tylko dodawać dane z kolejnego dnia i odejmować dane z dnia, który wypadł z naszego “okienka” czasowego. Zamiast 365 dni, mamy do przeanalizowania tylko dwa.

zespol samba tv big data

Czym jest data engineering? Na czym polega praca na tym stanowisku?

Data engineering to programowanie związane z przetwarzaniem danych o dużych rozmiarach. Nie ma wspólnej definicji tego jakie dane uznajemy za duże. Można np. określić, że jako próg przyjmujemy limit pamięci RAM w pojedynczym komputerze. W praktyce oznacza to wykorzystanie do przetwarzania danych wielu maszyn, które synchronizują wzajemnie swoją pracę. Same operacje obejmują między innymi gromadzenie strumieni napływających danych, konwertowanie ich formatu, porządkowanie względem określonych parametrów wyszukiwania oraz używanie ich do analiz za pomocą narzędzi statystycznych, czy algorytmów uczenia maszynowego.

Dlaczego big data jest tak ważna w tego typu produktach jak Samba TV?

Same dane z telewizorów to setki gigabajtów dziennie. Drugie tyle to dane pozyskiwane z setek kampanii reklamowych. Do tego dochodzą dodatkowe zbiory dane od partnerów. W sumie analizujemy petabajty informacji. Nie dałoby się ich wykorzystać bez zastosowania narzędzi big data.

Z jakimi problemami/wyzwaniami mierzysz się każdego dnia?

Największym wyzwaniem jest zapewnienie stabilności budowanym procesom. Ponieważ większość z nich jest powiązana siecią zależności, drobne niepowodzenia jednego zadania mogą decydować o poważnych problemach w całej architekturze. Dodatkowym utrudnieniem jest to, że komunikaty o błędach rzadko wskazują jednoznacznie na źródło problemu.

Nawet kod, który od miesięcy działał poprawnie, może okazać się niewystarczająco optymalny w obliczu wciąż rosnących danych, które musi obsłużyć

Dlatego pisząc kod musimy szukać możliwie najlepszych rozwiązań i nie zadowalać się tymi, które po prostu działają.

jakub tlałka sambatv

W jaki sposób analizuje się duże dane? Co jest do tego potrzebne i jak taka analiza wygląda w zespole?

Używa się narzędzi, które ułatwiają podzielenie pracy na wiele maszyn, jak np. Spark. Wymusza on konkretny styl pisania kolejnych transformacji danych. Podstawową zaletą jest to, że możemy zwiększać liczbę wykorzystywanych maszyn wraz z rosnącym rozmiarem danych. Jeśli chodzi o pracę w zespole to działa to podobnie do innych specjalizacji. Dzielimy się zadaniami do napisania, które często korzystają nawzajem ze swoich wyników. Przykładamy dużą wagę do code review, czyli przeglądania kodu przez pozostałych członków zespołu. Często spojrzenie z boku pozwala wychwycić błąd, który potencjalnie może nas kosztować realne pieniądze wydane na niepoprawne przeliczenie danych.

Jakie są różnice między pisaniem aplikacji webowych a data engineering?

Pierwsza widoczna różnica to narzędzia, które wykorzystujemy. Aplikacje webowe będą częściej wykorzystywać relacyjne bazy danych, podczas gdy w przetwarzaniu danych bardziej powszechne jest używanie systemów plików takich jak s3. W przypadku tych pierwszych, operacje wykonywane są w czasie rzeczywistym i zazwyczaj nie mogą trwać więcej niż kilkadziesiąt milisekund. Natomiast duże dane są przetwarzane w paczkach, cyklicznie, a czas wykonania mierzy się w minutach, a nawet godzinach. Utrudnia to znacząco ich testowanie i naprawianie, gdyż po każdej poprawce musimy długo czekać, by przekonać się czy zadziałała.

Testy na małych danych pozwalają sprawdzić poprawność składni, ale prawdziwe problemy pojawiają się dopiero w rzeczywistym użyciu

Natomiast zaletą takiej pracy jest to, że błędy najczęściej pozostają ukryte przed światem zewnętrznym, jeśli zdążymy je w porę naprawić. W przypadku aplikacji webowych nawet mały błąd może wpłynąć na działanie serwisu u milionów użytkowników.

Co te dwie dziedziny mają ze sobą wspólnego?

Można powiedzieć, że każde programowanie to w pewnym sensie przetwarzanie danych, różnią się tylko ich rozmiary. Wbrew pozorom w obu przypadkach można wykorzystać te same języki programowania. Na przykład w naszej firmie używamy Pythona zarówno do tworzenia aplikacji, jak i w przetwarzaniu danych, gdzie Python jest wykorzystywany jako interfejs Sparka. Rosnący rozmiar przetwarzanych danych można też porównać ze zwiększającym się ruchem na stronie. Wciąż musimy dbać o to, by nasz kod był przygotowany na coraz większe obciążenia.

Czego większość programistów nie wie na temat data engineeringu?

Większość programistów nie zdaje sobie sprawy, jak mało intuicyjny może być sposób działania pisanych programów. Korzystanie z narzędzi takich jak Spark zdejmuje sporo zmartwień związanych z wykonywaniem zadań na wielu maszynach jednocześnie. Jednak odbywa się to kosztem przejrzystości. Wystarczy spojrzeć na drzewo zadań, które tworzy Spark przy wykonywaniu nawet stosunkowo prostych operacji. Dużo czasu wymaga zrozumienie tego, jak poszczególne linie kodu wpływają na czas działania i zużywaną pamięć. Jeszcze ważniejszym czynnikiem są użyte parametry, których może być nawet kilkadziesiąt.

Jest to praca, w której nie wystarczy nauczyć się składni używanych narzędzi. Największą wartością jest tu doświadczenie

Jakie umiejętności konieczne są w pracy data engineera?

Ważna jest umiejętność szukania źródeł problemów metodą prób i błędów. Komunikaty wypisywane przez niedziałający program rzadko wystarczą do trafnej diagnozy. Istotne jest rozumienie architektury na wysokim poziomie abstrakcji, widzenie tego jak poszczególne elementy na siebie wpływają. Przydaje się skłonność do eksperymentowania, szukania wciąż lepszych rozwiązań. Kluczowa jest cierpliwość.

Jak znaleźć pracę na stanowisku big data engineera?

Jeżeli nie ma się doświadczenia z big data, to warto najpierw samemu napisać proste programy, które operują danymi

W internecie są dostępne dość spore zbiory danych, z których można korzystać. Na pewno warto podszkolić się z SQLa i narzędzi takich jak Hadoop czy Spark. Dobrze jest udostępnić swój kod np. na githubie. To najlepiej pokazuje, że ktoś ma doświadczenie w interesującym nas zakresie.

Powiedz proszę coś więcej na temat języka R i jaką rolę pełni w produktach opierających się na big data?

R to język używany głównie w naszym oddziale Data Science, który rozbudowywujemy w Warszawie [główna siedziba firmy mieści się w San Francisco – przyp.red.]. Pozwala on szybko przeliczyć różne parametry statystyczne na konkretnym zbiorze danych. Przydaje się do tworzenia raportów, których przeliczania nie można lub nie warto uogólniać. Jest używany do badań, ale nie nadaje się zbyt dobrze do budowania architektury, która regularnie przetwarza dane, dlatego też w Sambie skupiamy się przede wszystkim na Pythonie i wspomagających narzędziach, jak Databricks.

Jak dużą rolę w tego typu projektach pełni wybór technologii/języka, w którym został napisany? W jaki sposób podejmuje się taką decyzję?

Ważne by używać narzędzi dostosowanych do pracy z dużymi danymi. My wybraliśmy Sparka, gdyż istnieje do niego wygodny interfejs pythonowy, a jest to język od początku używany w naszej firmie. Spark pozwala definiować transformacje w Pythonie, ale pod spodem są one wykonywane głównie w Scali, która dużo lepiej nadaje się do tego typu operacji.

Jak wyglądał Twój pierwszy kontakt z data engineeringiem?

W zasadzie był to mój pierwszy kontakt z programowaniem zawodowym. Pisałem silnik rekomendacji filmów, który miał przewidywać oceny użytkowników serwisu Filmaster, na podstawie ich przeszłej aktywności. Pierwszym wyzwaniem okazało się nie dobranie inteligentnego algorytmu, ale poradzenie sobie z faktem, że liczba takich przewidywanych ocen rośnie kwadratowo, gdyż jest iloczynem liczby użytkowników i filmów w serwisie. Samo zapisywanie ich codziennie do bazy danych stanowiło duży problem i wymagało ode mnie lepszego zrozumienia tego jak działa Postgresql.

Jak zachęciłbyś innych do zainteresowania się analityką big data?

Data engineering dostarcza wciąż nowych i ciekawych wyzwań. Tak jak wspominałem, nie wystarczy przeczytać dokumentacji Sparka, by wiedzieć jak naprawdę działa. Frustracje, które mogą się wiązać z kolejnymi nieudanymi próbami wynagradza moment, w którym kod zaczyna działać i przetwarzać terabajty danych dziennie.

Oprócz samego programowania, jest tu również miejsce na zabawę konfiguracjami serwerów, która jest kluczowa dla prawidłowego działania całej architektury

Jest to również dziedzina, która ma wciąż rosnące znaczenie w obecnych czasach, które wielu nazywa Erą Informacji.

Jakub Tlałka skończył matematykę i informatykę na Uniwersytecie Warszawskim. Razem z Borysem Musielakiem i Pawłem Czerskim założył w 2011 roku Filmastera, który oprócz serwisu dla kinomaniaków oferował własny silnik rekomendacji filmów kinom i serwisom VOD. W 2015 roku Filmastera kupiła amerykańska firma Samba TV, w której od tego czasu pracuje.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Dlaczego logika w kontrolerach to zło?