Как стать Data Engineer
Сейчас специализация в области data engineering активно набирает обороты. Судя по отчёту компании hired.com, спрос на data engineer специалистов вырос на 38%, и рост продолжится. Средняя зарплата у Data Engineer в Нью-Йорке составляет $132 тысячи, а в Сан-Франциско $151 тысячу. Что касается рынка СНГ, то спрос на дата инженеров только начинает расти. В России зарплатная вилка варьируется от 100 тысяч рублей до 250 тысяч. Эту информацию я получил из небольшого анализа открытых вакансий на ресурсах Мой Круг и HeadHunter.
Что такое Data Engineering
Из названия понятно, что область data engineering связана с данными, а именно с их доставкой, хранением и обработкой. Главная задача дата инженеров - обеспечить надёжную инфраструктуру для данных. Если обратиться к пирамиде AI, то data engineering занимает в ней первые 2-3 ступени: Collect, Move & Store, Data Preparation. Из этого следует вывод, что любой data-driven организации жизненно необходим data engineer, чтобы добраться до вершины.
Чем же в итоге занимаются дата инженеры? С появлением "больших данных" область ответственности дата инженеров сильно изменилась. Если раньше эти специалисты писали большие SQL запросы и перегоняли данные с помощью инструментов типа Informatica ETL, Pentaho ETL, Talend, то сейчас требования к дата инженерам выросли. Большинство компаний с открытыми позициями на роль Data Engineer предъявляют следующие минимальные требования:
- Отличное знание SQL и Python
- Опыт работы с облачными платформами, в частности Amazon Web Services
- Желательно знание Java/Scala
- Хорошее понимание баз данных SQL и NoSQL (data modeling, data warehousing)
Имейте в виду, что это минимальный набор знаний. Из списка выше можно сделать вывод, что дата инженерами становятся специалисты из области software engineering, backend разработчики. Например, если компания начинает генерировать большой объем данных из разных источников, ваша задача, как дата инженера, организовать сбор информации, её обработку и хранение. Перечень используемых инструментов в этом случае может отличаться, всё зависит от объёма этих данных, скорости их поступления и разнородности. У большинства компаний нет никакой "биг даты", поэтому в качестве централизованного хранилища, т.н. Data Warehouse, подходит SQL база данных (PostgreSQL, MySQL и т.д.) с небольшим количеством скриптов, которые загоняют данные в хранилище.
У IT гигантов типа Google, Amazon, Facebook или Dropbox, требования выше.
- Знание Python, Java или Scala
- Опыт работы с большими данными: Hadoop, Spark, Kafka
- Знания алгоритмов и структур данных
- Понимание основ распределённых систем
- Опыт работы с инструментами визуализации данных типа Tableau или Qlik View будет большим плюсом
То есть здесь явно прослеживается уклон в большие данные, а именно их обработку в условиях высоких нагрузок. У таких компаний требования к отказоустойчивости систем повышенные.
Что нужно знать дата инженеру
Data Engineering это в первую очередь техническая область, где требуются знания основ computer science, а именно понимание эффективных алгоритмов и структур данных. Так как дата инженеры имеют дело с данными, то понимание работы баз данных и структур, лежащих в их основе это необходимость. Например, в основе привычных нам SQL баз данных лежит структура B-Tree, а в современных распределённых хранилищах LSM-Tree и другие модификации хэш таблиц.
Алгоритмы и структуры данных
Хорошим введением в алгоритмы и структуры данных может послужить серия бесплатных курсов от Stepik:
Помимо курсов, неплохим введением в понимание как работают БД изнутри может стать видео от Алекса Петрова из DataStax:
Кроме отличного выступления, у Алекса есть серия постов про нюансы хранения данных на дисках:
- On Disk IO, Part 1: Flavors of IO
- On Disk IO, Part 2: More Flavours of IO
- On Disk IO, Part 3: LSM Trees
- On Disk IO, Part 4: B-Trees and RUM Conjecture
- On Disk IO, Part 5: Access Patterns in LSM Trees
Не забываем про классический труд по алгоритмам от Томаса Кормена - Introduction to Algorithms. Эту книгу я использую как справочник, когда нужно освежить память. Лучше неё ничего нет. Отточить навыки поможет Leetcode.
Также на Youtube есть серия видео-курсов про базы данных от Carnegie Mellon University:
Изучаем SQL
Вся наша жизнь - данные. А чтобы эти данные извлекать из базы, нужно "говорить" с ней на одном языке. SQL (Structured Query Language) это lingua franca в области данных. Кто бы что ни говорил, а SQL жил, жив и будет ещё очень долго жить. Если вы давно в разработке, то наверняка замечали, что периодически появляются слухи о скорой смерти SQL. Язык был разработан в начале 70-х годов и до сих пор дико популярен среди аналитиков, разработчиков и просто энтузиастов. Без знаний SQL в data engineering делать нечего, т.к. вам неизбежно придётся конструировать запросы для извлечения данных. Все современные big data warehouse поддерживают SQL:
- Amazon Redshift
- Yandex Clickhouse
- HP Vertica
- Druid (пока экспериментально)
- Oracle
- SQL Server
и многие другие. Чтобы анализировать большой пласт данных, хранящийся в распределённых системах типа HDFS, придуманы SQL движки: Apache Hive, Impala и т.д. Видите, никуда не деться. Как изучать SQL? На практике.
Из бесплатных ресурсов советую ознакомиться с прекрасным туториалом от Mode Analytics. На образовательной платформе Datacamp можно пройти бесплатно 4 курса, советую обратить внимание на эти:
Отличительной особенностью этих курсов является наличие интерактивной среды, где можно писать и выполнять SQL запросы прямо в браузере. Лишним не будет ресурс Modern SQL. А применить полученные знания можно на задачах Leetcode в разделе Databases . Если вы вдруг знаете другие полезные ресурсы - пишите в комментариях.
Программирование на Python и Java/Scala
Почему стоит изучать язык программирования Python, я уже писал в заметке Почему Python. Что же касается Java и Scala, то большинство инструментов для хранения и обработки огромных массивов данных написаны именно на этих языках. Например:
- Apache Kafka (Scala)
- Hadoop, HDFS (Java)
- Apache Spark (Scala)
- Apache Cassandra (Java)
- HBase (Java)
- Apache Hive (Java)
Перечислять можно долго. Чтобы понимать как работают эти инструменты необходимо знать языки на которых они написаны. Функциональный подход Scala позволяет эффективно решать задачи по параллельной обработке данных. Питон, к сожалению, похвастаться быстродействием и параллельной обработкой не может. Да и в целом знание нескольких языков и парадигм программирования хорошо сказывается на широте подходов к решению задач. Для погружения в язык Scala можно пройти бесплатный курс от Тинькофф Банка на Stepik: Введение в Scala. Параллельно курсу желательно почитывать Programming in Scala от автора языка. Также компания Twitter опубликовала хороший вводный гайд - Scala School.
Что касается Python, то лучшей intermediate level книгой считаю Fluent Python.
Инструменты Big Data
Вот список наиболее популярных инструментов в мире больших данных:
- Apache Spark
- Apache Kafka
- Apache Hadoop (HDFS, HBase, Hive)
- Apache Cassandra
Более подробно про "кирпичики" big data можно узнать в интерактивной среде. Наиболее популярными инструментами являются Spark и Kafka. Их определенно стоит изучать, желательно понимание как они работают изнутри. Jay Kreps (соавтор Kafka) в 2013 году опубликовал монументальный труд The Log: What every software engineer should know about real-time data's unifying abstraction идеи из которого легки в основу Apache Kafka. Введением в Hadoop может служить бесплатный курс на Stepik. Наиболее полным руководством по Apache Spark считаю книгу Spark: The Definitive Guide.
Облачные платформы
Знание хотя бы одной облачной системы есть в требованиях почти каждой открытой позиции на должность Data Engineer. Работодатели отдают предпочтение Amazon Web Services, на втором месте Google Cloud Platform, а заканчивает тройку лидеров Microsoft Azure. Если вы ни разу не работали ни с одной из них, то немедленно начинайте исправлять ситуацию. По Amazon вам помогут первоклассные уроки на русском языке от канала ADV-IT. Что касается GCP, то на Coursera есть целая специализация для дата инженеров - Data Engineering on Google Cloud Platform. Облачные системы стремительно развиваются, поэтому держите руку на пульсе. Из того, что необходимо знать и понимать: Amazon EC2, AWS Lambda, Amazon S3, DynamoDB (есть локальная версия).
Распределённые системы
Работа с большими данными подразумевает наличие кластеров независимо работающих компьютеров, общение между которыми происходит по сети. Чем больше кластер тем больше вероятность выхода из строя входящих в него узлов. Чтобы стать крутым специалистом в области данных, необходимо понимать проблемы и существующие решения для распределенных систем. Область эта старая и сложная. Пионером в ней по праву считается Эндрю Таненбаум. Для любителей теории я рекомендую его книгу Distibuted Systems, для начинающих она может показаться сложной, но это нисколько не приуменьшает её достоинств. Лучшей вводной книгой я считаю Designing Data-Intensive Applications от Martin Kleppmann. Кстати у Мартина есть замечательный блог. Его труд поможет систематизировать знания про построение современной инфраструктуры для хранения и обработки больших данных, а также Мартин в книге делится своим прогнозом относительно будущего data-intensive систем. Эти две книги занимают почетное место у меня на полке.
Для тех кому нравится видео-формат, есть курс Distributed Computer Systems на Youtube. Если вам ближе формат блог постов, то не так давно девушка по имени Vaidehi Joshi запустила блог для начинающих в области распределённых систем. В течение 2019 года она будет каждые 2 недели публиковать пост на тему Distributed Systems. Рекомендую к ознакомлению.
Дата пайплайны
Значительную часть времени data engineer занимается построением т.н. дата пайплайнов, то есть выстраивает процесс доставки данных из одного места в другое. Это могут быть кастомные скрипты, которые ходят в API внешнего сервиса или делают SQL запрос, обогащают полученные данные и укладывают в централизованное хранилище (data warehouse) или хранилище неструктурированных данных (data lakes).
Инструментов для выполнения такой работы масса. Про один из таких я писал больше года назад Строим Data Pipeline на Python и Luigi. Помимо Luigi обязательно обратите внимание на Apache Airflow, который в последнее время переживает настоящий бум популярности. Google Cloud Platform у себя даже запустил сервис на основе Airflow - Cloud Composer.
Внимание! На собственной платформе я запустил полноценный курс по разработке дата-пайплайнов на Luigi. Luigi сильно недооценён, и к нему стоит присмотреться поближе. В курсе я рассказываю зачем нужны пайплайны, как их сделать надёжными и отказоустойчивыми. Всё это заправляется практическими примерами! Не забыл я и про тему деплоя, где затрагивается тема Docker контейнеров, а также облачный деплой дата-пайпланой в AWS с использованием таких технологий как AWS Fargate, Cloud Map, Elastic Container Service и другое.
Более подробно о курсе по ссылке: Введение в Data Engineering: дата-пайплайны
Что-то ещё?!
Data Engineer это командный игрок и в больших компаниях такой специалист бок о бок работает с аналитиками и data scientists. Поэтому не стоит забывать про развитие soft skills: командная работа, культура работы с данными, эмпатия, понимание области бизнеса, открытость к новому.
Если у вас есть идеи чем можно дополнить этот материал, велком в комментарии.
Где искать работу дата-инженером
Теория теорией, а вот практику никто не отменял. Лучше всего обучение проходит за решением реальных задач. Узнать об актуальных вакансиях для дата-инженеров можно на моём сайте-агрегаторе по поиску удалённой работы.