Що таке Big Data Engineering і як розвиватися у цій сфері
Я вже майже три роки працюю як Big Data Engineer. Час від часу доповідаю на технічних конференціях/мітапах в Україні та за кордоном і нерідко замислююся, як там представлятися. Якщо скажу, що працюю Big Data Engineer, більшість людей або не зрозуміє, чим я займаюсь, або буде плутати з іншими спеціальностями — Data Scientist, Data Analyst. За останні кілька років помітила, що рідше потрапляю в такі ситуації за кордоном, ніж в Україні.
Отож спробуймо розібратись, у чому суть професії Big Data Engineer, які його типові завдання, плюси й мінуси професії, шляхи її опанування та особистий досвід розвитку.
Ця стаття буде цікава тим, хто вперше чує про Big Data Engineer, тим, хто знає про існування цієї посади, але не розуміє, у чому суть, і тим, хто цікавиться Big Data й бажає перейти в цю сферу.
Що таке Big Data Engineering
Є багато визначень, що таке Big Data Engineering, і всі вони крутяться навколо даних і маніпуляцій над ними. Це поняття пояснюють як практики маніпуляції над великими даними, що охоплюють побудову інфраструктури роботи з даними, зберігання даних, отримання доступу до них і їх форматування. Великі дані (Big Data) — це дані, в яких є специфічні ознаки, що називають 5V (Volume, Velocity, Veracity, Valence, Value): обсяг, швидкість, точність, зв’язаність, цінність.
Але в назвах професій Data Scientist і Data Analyst теж є слово data. Невже це означає, що всі вони пов’язані? Так. Хоча завдання для Big Data Engineer з’явилися майже одночасно із завданнями для Data Scientist, як професію її виокремили тільки недавно. Тому не дивно, що немало спеціалістів в ІТ-індустрії не чули про Big Data Engineering.
Завдання, які виконують Big Data Engineers, входять у цикл розробки моделей машинного навчання, але їхній обсяг занадто великий для однієї людини. І для їх виконання потрібні різні набори навичок.
Завдання Data Scientists більше пов’язані з дослідженням сфери застосування машинного навчання, визначенням необхідних ознак для створення моделі машинного навчання, побудовою моделей і підвищенням їхньої точності.
Робота Data Engineers — побудувати систему зберігання даних, очистити та відформатувати ці дані, налаштувати процес оновлення даних і їх прийому системою, розгортання системи й допомога в побудові моделей машинного навчання (ці завдання також можуть виконувати Machine Learning Engineers).
Data Analysts перебувають наприкінці цього ланцюжка, вони працюють з обробленими даними через Query Engines або бази даних (які були сконфігуровані Data Engineers), створюють на цій базі звіти, аналізують дані та шукають в них аномалії.
Image Source: Close look at Data Scientist vs Data Engineer
Для Data Scientists краще підійде математична база, тоді як Data Engineers варто мати базу знань з розробки програмного забезпечення. Якщо розібратись, таке розмежування між Data Science і Big Data Engineering є логічним і очевидним. Тому більшість компаній, які створюють продукти у сфері машинного навчання, в якийсь момент зрозуміли, що Data Scientists не можуть одночасно ефективно виконувати завдання з обробки даних і розробляти моделі машинного навчання. Для цього потрібні інші люди з іншим набором навичок. Так професія Big Data Engineer стала відокремлюватись від інших. У чому ж її специфіка?
Типові завдання, які розв’язує Big Data Engineering
Big Data Engineers можуть працювати в досить різноманітних сферах: фінанси, туризм, реклама, безпека, e-commerce. Простіше кажучи, над проєктом чи продуктом, який вимагає роботи з даними великих обсягів, швидкості чи різноманітності в структурі та форматі.
Уявімо, що треба створити звіти з аналітикою за місяць чи рік. Щоб зробити їх, необхідно мати доступ до даних через будь-який інтерфейс, де можна досліджувати дані, запускати SQL-запити, на основі яких буде побудовано звіти. За цим всім стоїть система зберігання даних та отримання доступу до них через Query Engine, з урахуванням того, що дані мають оброблятись швидко. Розробка і підтримка цієї системи і є відповідальністю Data Engineers.
А тепер уявімо інше завдання — побудувати систему розумного будинку. Щоб відстежувати аномалії в стані системи та відсилати нотифікації користувачам, має бути метод зчитування потокових даних з IoT-сенсорів, їх трансформація, зберігання, посилання в модуль аналізу даних. Особливістю цієї системи є обробка даних з мінімальною затримкою і максимальною надійністю (навіть якщо система виходить з ладу, дані залишаються, і система здатна опрацювати пропущені дані за період її падіння, наприклад). Побудова конвеєрної обробки даних — теж частина роботи Data Engineers.
Тепер розберімо технічний бік завдань, які найчастіше виконують Big Data Engineers.
Побудова ефективних процесів конвеєрної обробки даних (Data Pipelines) — одне з найважливіших для Big Data Engineers у будь-якому проєкті. Треба створити структуру процесів обробки даних і, звісно ж, реалізувати її. Багато інших завдань є частиною цього процесу та допомагають його поліпшувати з погляду ефективності. Серед них відомий ETL (Extract Transform Load) — вилучення даних, проведення трансформацій над ними та завантаження в іншу систему для зберігання і подальшої роботи. Для різних видів даних використовують різні інструменти, у Big Data часто працюють зі статичними або потоковими типами даних. Для таких цілей застосовують фреймворки Apache Spark, Flink, Storm, Kafka та хмарні сервіси AWS, Google Cloud, Azure.
Зберігання даних. Big Data Engineers часто визначають механізми зберігання даних та отримання доступу до них. Побудова сховища даних (Data Warehouse або Data Lake) — це досить поширене завдання, для виконання якого треба брати до уваги велику кількість даних, їх різноманітність і погану структурованість (сирі дані). Для зберігання можуть слугувати як реляційні (PostgreSQL, MySQL, MsSQL, Oracle DB), так і нереляційні бази даних (Cassandra, MongoDB, Neo4j), та інші сховища, як-от HDFS чи хмарні сервіси.
Обробка даних. Дані найчастіше бувають різноманітних форматів, тому для їх використання в базах даних чи інших сховищах, треба переводити дані у відповідний структурований формат. Такий тип обробки передбачає зміну формату даних (якщо це необхідно), очищення даних, виявлення аномалій. Найбільш поширені типи даних у сфері Big Data — Parquet, Avro, Protobuf, CSV. Попередня обробка даних може бути частиною конвеєрної обробки або одним з етапів створення моделі машинного навчання.
Інфраструктура. Big Data Engineers повинні розгортати створені рішення (Docker, Kubernetes), брати участь у налаштуванні CI/CD (Jenkins, TeamCity), визначити необхідну кількість ресурсів для виконання програм, будувати механізми збору метрик і логування (Prometheus, Grafana).
І якщо ми повернемося до порівняння з Data Science, то побачимо, що всі ці завдання складаються в одне ціле.
Image Source: Data engineers vs. data scientists
Часто Data Engineering і Data Science становлять дві частини одного продукту. Але Data Engineers можуть працювати та над створенням проєктів, які не охоплюють технології машинного навчання. У моїй кар’єрі більшість проєктів не містили частини Data Science, тож мені не доводилося працювати з відповідною командою. Тому існування незалежних Data Engineering проєктів цілком реальне.
Big Data Engineers здебільшого співпрацюють з командами інфраструктури, тестування, Data Science. І якщо створення інфраструктури і тестування рішень вимагають навичок і знань у сфері великих даних, Data Science частина переважно створюється незалежно. Тому, на мою думку, найбільше труднощів виникає у співпраці з Data Science командою або командою аналітики. Data Scientists і аналітики/ні виступають у ролі споживачів даних (які обробляються і зберігаються Big Data командою). Відповідно в них є вимоги щодо того, як ці дані представляти й надавати. Тому в спілкуванні між ними і Big Data Engineers можуть виникати складнощі й навіть конфлікти.
Головні виклики
Основні виклики пов’язані з природою даних. Йдеться про дуже великий обсяг даних (терабайти/петабайти даних), високу швидкість потокових даних, нестандартний формат, різноманітність даних, які вимагають специфічної обробки. Це проявляється в типовій проблемі оптимізації систем і особливо запитів у БД, враховуючи те, що Data Engineers часто доводиться працювати з ними.
Коли я працювала з потоковими даними, які трансформувались частково за допомогою БД і частково за допомогою фреймворку Spark, головною проблемою було створення такого запиту в NoSQL базі даних, щоб за секунду будувались дані для мільйона користувачів.
Складною проблемою в Big Data є відтворення історичних даних для аналізу або їх переписування. Наприклад, з’явилась необхідність змінити функціонал, на основі якого створюють звіти за рік чи квартал. У цій ситуації важливо зберегти цілісність даних і поширити зміну на тривалий період. Це вимагає повторної обробки історичних даних.
Повторна обробка може бути досить тривалим процесом для статичних даних із великими затратами в обчислювальних навантаженнях. У потокових даних з’являється своя специфіка — багато залежить від можливостей використовуваного фреймворку. Відтворення історичних даних, своєю чергою, вимагає побудови таких систем зберігання даних, щоб вони зберігались тривалий період (квартал/рік), були надійні та доступні для користувачів.
Трансформація даних сама собою може стати викликом, це залежить від природи даних, які потрапляють з джерела. Деякі їх формати вимагають більше етапів обробки. Ще є дані зі специфічних джерел, які потребують очищення та аналізу.
Плюси та мінуси професії
Головні плюси:
- Сфера ще досить молода, особливо в Україні, тому завжди є місце для інновацій і досліджень. З’являється все більше застосувань у різноманітних галузях.
- Конкуренція на кожну позицію не така висока, як в інших сферах, оскільки на ринку загалом не так багато Big Data Engineers. Часто на позицію Big Data Engineers беруть тих, хто працював у back-end розробці, з урахуванням вивчення Big Data екосистеми в процесі.
- Більшість завдань орієнтована на роботу з даними різних форматів, тому, якщо вам таке подобається, це буде великим плюсом у професії.
Але в цій сфері також є мінуси:
- Різноманіття інструментів для розв’язання завдань. Нерідко виникає питання, який інструмент і де краще використовувати. І найскладніше те, що бажано розбиратися в наявних інструментах і фреймворках. Звідси випливає наступний недолік.
- Високий поріг входу в професію. Потрібен кількарічний досвід у розробці, щоб компенсувати знання фреймворків. Деякі інструменти можуть здаватись занадто ускладненими, тому вивчити їх швидко не вийде. Якщо ви зміните роботу, технологічний стек може змінитися теж і доведеться вчитися знову. Досвід у Big Data можна отримати на реальних проєктах через специфіку великих даних. Рet-проєкти в цьому не дуже допомагають.
- Невидима робота. Завдання, які виконують Big Data Engineers, є базою для багатьох рішень, але вони не спрямовані на користувачів. Тому робота цих спеціалістів часто залишається в тіні, на відміну, наприклад, від Data Scientists. І виміряти вплив на продукт/проєкт від цієї роботи — не просто.
Бекграунд для входу в професію
Data Engineering ближче до back-end розробки, ніж до аналітики, тому найпростіше перейти в Big Data з досвідом розробки будь-якою мовою програмування. Під досвідом розробки маю на увазі базове знання алгоритмів та структур даних, їх використання для реальних завдань. Корисно, якщо є досвід роботи з різноманітними типами даних, їх очищенням та обробкою.
Ще краще, якщо такими мовами були Scala, Python чи Java, тому що вони є найбільш поширеними у сфері великих даних. В Україні ринок вакансій Big Data Engineers практично 50 на 50 розділений між Python і Scala з малим відсотком Java. Тому якщо постає питання, яку мову краще вивчити чи удосконалити для отримання позиції Big Data Engineer, не вдасться відповісти однозначно. Але можна проаналізувати вакансії та обрати відповідно до зацікавлення у конкретному проєкті чи компанії.
Я зустрічала інженерок/ів, які навіть працювали з фреймворком Apache Spark, але не виконували повного спектра Big Data завдань. Для них поріг входу може бути найнижчим. Деякі Data Scientists також працювали зі Spark, тому їм для переходу в Data Engineering достатньо опанувати інші необхідні фреймворки або інструменти для побудови інфраструктури (якщо не було з ними досвіду раніше). Навички в машинному навчанні допоможуть краще розуміти контекст і роботу Data Science команди.
Дуже важливо мати гарні аналітичні навички, знання SQL, досвід з різноманітними базами даних — написання запитів, дизайн баз даних. Тому цілком реально перейти з аналітики чи SQL-розробки в Big Data, але тоді треба вдосконалювати навички програмування.
Якщо аналізувати ситуацію за кордоном, то можна знайти спільні тренди в європейському та американському регіонах. Там професію Big Data Engineer почали виділяти раніше, ніж в Україні, тому в більшості компаніях, де є позиція Data Scientist, є і Data Engineer. Галузі, в яких Big Data Engineers вирішують завдання, різноманітніші за кордоном, ніж в Україні, оскільки і кількість компаній більша, і сфера розвивається довше.
Найчастіше посаду Big Data Engineer можна побачити у великих компаніях, як-от Apple, Amazon, Google, Facebook тощо. Таких вакансій мало в Східній Європі та Прибалтиці (там рідко бувають представництва великих гравців або Big Data розробку організовують в інших офісах). Мова програмування буде залежати від того, якою мовою програмування створено більшість проєктів у компанії. Також Big Data Engineers є в консалтинг-компаніях (аутсорс) і стартапах.
В Європі та США зарплати в Big Data Engineering будуть вищими, ніж у бекенд-розробці на Python чи Scala. В США Scala — одна з найбільш оплачуваних мов програмування, тому Big Data Engineers зі знанням Scala можуть очікувати на вищу зарплату, ніж зі Python.
Щодо оплати праці, то на DOU немає окремого розділу зарплат і вакансій для Big Data Engineers, тож це більше залежить від основної мови програмування і компанії. Деякі компанії оцінюють цю спеціальність вище, ніж бекенд-розробку. Але буває, що зарплати з бекенд-розробниками збігаються. Поки що ринок Big Data в Україні не дуже стабільний і не явно відокремлюється від Data Science ринку.
Особистий досвід розвитку в галузі
До того як стати Big Data Engineer, я була Java-розробницею. У якийсь момент машинне навчання набрало популярності, і я теж цим зацікавилась. Я починала зі статей та експериментів з різними алгоритмами, але сам процес побудови моделей машинного навчання мене не захоплював, на відміну від роботи з даними. Тоді я дізналася про окрему спеціальність Big Data Engineer і з цього почався мій шлях у світ великих даних. Я переглянула чимало курсів на Coursera, почала вивчати Python, Spark, Hadoop, але цього було недостатньо.
Тоді ж я подавалася на стажування та офлайн-курси в Big Data. Я пройшла на курси від DataRoot Labs, але викликом стало те, що основною мовою програмування була Scala. Хоча курс був розрахований на тих, хто раніше не вивчав цієї мови, темп був досить швидкий. Заняття тривали два з половиною місяці, після яких я вже могла впевнено програмувати на Scala, вивчила основи Akka, Docker, Ansible. Результатом курсів був фінальний проєкт — у моєму парсились дані з Twitter, записувались в базу даних, зчитувались з неї, відтак на цих даних будувалась мінімальна аналітика. У межах цього проєкту я вперше попрацювала з потоковими даними, які потрапляли в систему в режимі реального часу.
Компанії-партнери курсів відбирали найкращих студентів для працевлаштування, з-поміж них і Ciklum. Так я отримала першу роботу як Big Data Engineer у Big Data & Analytics department (зараз Ciklum Digital). Я брала участь у кількох проєктах, і мої завдання охоплювали дослідження специфічних БД, створення прототипів для внутрішніх програм на основі цих досліджень, робота з потоковими та статичними даними, побудова ETL. Крім того, я брала участь в налаштуванні CI/CD процесів. За півтора року в Ciklum я значно поліпшила свої big data навички та долучалася до різноманітних проєктів.
Сьогодні я працюю в продуктовій компанії Captify і виконую різноманітні завдання. Серед них побудова ETL, поліпшення наявних рішень і створення нових.
Курси і стажування — гарна можливість, щоб отримати знання і практичні навички у цій сфері. Тому раджу починати з них. Та це не найважливіше. На мій розвиток дуже вплинули ментори. Тож дуже рекомендую шукати менторів на робочому місці, на стажуванні/курсах чи в спільнотах, які самі організовують такі програми. Нині я беру участь у менторській програмі від Women Who Code Kyiv як менторка Big Data напряму.
Шляхи розвитку
Сфера великих даних стрімко розвивається, і комусь може стати нудно постійно виконувати схожі завдання. Знання і навички з цієї спеціальності насправді створюють широке коло для діяльності та розвитку.
Для Big Data Engineers є змога перейти в суміжні спеціальності — Data Science чи аналітику. І, звісно ж, можна зростати в менеджменті або архітектурі. Але це доволі очевидні варіанти. На мою думку, мало висвітлюється перехід з Big Data Engineering в Devops-related спеціальності, хоча інженери чи інженерки можуть виконувати багато інфраструктурних завдань. Схоже поєднання навіть створює нові посади, наприклад є ML/Big Data DevOps спеціалісти. Думаю, ця професія не може набриднути, адже завжди можна генерувати нові ідеї та рішення.
Висновки
Досі професія Big Data Engineer є не дуже поширеною на українському ІТ-ринку, але сфера Big Data стрімко розвивається, що відкриває багато можливостей для тих, хто хоче опанувати нову спеціальність. Як і в будь-якій іншій професії, тут є свої плюси та мінуси, і треба брати до уваги, що більшість викликів, пов’язані з природою великих даних.
Сподіваюсь, ця стаття допомогла вам зрозуміти, чим займаються Big Data Engineers і чи потрібні вашій компанії такі спеціалісти.
Ресурси для розвитку в Big Data Engineering
Якщо вам цікаво дізнатися більше про сферу Big Data, раджу такі ресурси:
- Книга про основи: Big Data Fundamentals: Concepts, Drivers & Techniques by Thomas Erl, Wajid Khattak.
- Книжка, в якій багато інформації про задачі, які вирішуються у сфері та за допомогою яких інструментів: Big Data: Principles and best practices of scalable realtime data systems by Nathan Marz, James Warren.
- Фундаментальна спеціалізація на Coursera.
- І більш детально про data engineering vs data science у статтях на DataCamp і TowardsDataScience.