Инженер данных: что это за специалист и как им стать?
Кто такой инженер данных? Инженер данных — это специалист, который занимается созданием и развитием платформы, осуществляющей сбор, обработку, хранение и выдачу данных. По этому определению, конечно, сложно представить, что же он делает. Раньше я работал в банке, и люди, не связанные с ИТ, спрашивали меня о профессии. Я отвечал, что знаю все о клиентах. Это, конечно же, шутка, потому что данные обезличены. Сейчас говорю, что компания анализирует большие объемы данных для принятия решений, а я занимаюсь их сбором и кластеризацией. По крайней мере, это понимают молодые люди. Но находятся и те, кто просто считает меня программистом и, не вдаваясь в подробности, просит «починить комп». И я, конечно, не отказываю. Но вы же тут немного разбираетесь в ИТ и вам нужно больше подробностей? Тогда усаживайтесь поудобнее — сейчас расскажу вам историю. По мере того как развивались технологии, компании, которые их используют, стали производить больше данных. Соответственно, изменились и подходы к их хранению. Если раньше довольствовались базами данных SMP (symmetric multiprocessing), то сегодня существуют иные подходы и технологии, такие как базы данных MPP (massive parallel processing) и Hadoop. SMP хороши для транзакционных данных, веб-форм и метаданных. MPP лучше подходят для высоконагруженных запросов, отчетности, быстрой обработки за счет деления данных по нескольким узлам. А Hadoop — для хранения огромных массивов «холодных» данных. Во всех этих базах информация может храниться в виде таблиц, графиков, документов, аудио, видео, временных рядов и так далее. Пользователю важно иметь удобный интерфейс для работы с информацией, инструменты для сегментации и вывода данных в виде определенной структуры. Пользователь должен быть уверен в качестве данных и быстро извлекать из них пользу. Таким образом, стали появляться разные технологии баз данных: документоориентированные, key-value, time series, in memory, пространственные, графовые, вероятностные и прочие. Со всем этими базами нужно кому-то работать. Раньше, когда компания использовала реляционную SMP базу данных, команда, которая с ней работает, состояла примерно из следующих специалистов: администратора (который занимался инфраструктурой), разработчика (который писал SQL-запросы и «переливал» данные посредством ETL-инструмента), аналитика (который общался с бизнес-заказчиками и формировал требования к разработке потоков данных). Теперь же есть потребность использовать гибридный вариант платформ с различными технологиями, — соответственно, нужны специалисты, обладающие более широкими знаниями и способные при необходимости быстро развернуть ПО, например, в облаке. Так появился data engineer. Как он это делает? Инженер данных нужен как раз для того, чтобы аналитики имели возможность использовать данные для решения бизнес-задач — например, для оптимизации запросов, оценки прибыльности и рентабельности продуктов, отчетности и так далее. Он создает pipeline данных, интеграцию различных систем и источников, предоставляет пользователям инструменты работы с данными. Например, работа инженера в СИБУРе в первую очередь отличается большим количеством производственных данных, генерируемых промышленным оборудованием, АСУ ТП (автоматизированная система управления технологическим процессом), сенсоров и датчиков. Например, мой коллега написал приложение, которое собирает данные с АСУ ТП предприятия в Тобольске и отправляет их на брокер сообщений (программа, которая принимает сообщения от различных отправителей, формирует из них очередь), чтобы доставить их в хранилище. Дальше они заливаются в базу данных, предварительно пройдя фильтрацию и унификацию. Сам я занимаюсь развертыванием системы мониторинга и сбора метрик, основанных на time series. В СИБУРе есть огромное количество ИТ-систем и серверов продуктов, каждый из которых должен стабильно работать. Если одна из систем «упадет» и какая-то часть данных не будет загружена на серверы, компания может понести потери, в том числе и финансовые. За работоспособностью систем нужно внимательно следить — этим и занимается система мониторинга. Каждые 10 секунд с каждого продуктового сервера компании в нее поступают метрики (данные с временной меткой), например, информация о загрузке процессоров, нагрузке на сеть или объеме свободной памяти. Динамика этих показателей отображается на дашбордах (графиках). Также я занимаюсь внедрением Elasticsearch — поискового движка, который помогает поиску по большому объему данных. В СИБУРе мы пока задействуем его для сбора логов с серверов, но планируем использовать значительно шире, потому что вариантов множество. Объяснять пользу этого движка в работе с большими данными можно на примере статей rb.ru. С помощью Elasticsearch можно не только легко найти конкретного автора, но и определить, чем он занимается и какие слова употребляет в своих колонках чаще других спикеров. Как стать инженером данных? С детства мне было интересно, как устроена техника. У меня был компьютер и мотоцикл, которые я периодически разбирал, перебирал, что-то дорабатывал. В школе начал увлекаться физикой, участвовал в олимпиадах и даже поступил на кафедру технической физики в Бауманку. Но со временем понял, что я скорее практик, чем теоретик, люблю делать что-то руками — то есть больше инженер. Я стал искать другие варианты развития. В той же Бауманке на программиста учился мой друг, и он помог мне получить первые технические навыки: дал базовые знания, подсказал, где найти задачи, и помог изучить SQL. Потом был Стэнфордский онлайн-курс по базам данных, решение разных задач по программированию из открытых источников. Так я стал разработчиком SQL. Сперва устроился в ИТ-компанию, где работал все тот же друг. Компания была подрядчиком «Альфа-Банка», и я сидел вместе с другими сотрудниками банка в их офисе. Работал с SMP-базами данных, создавал инструменты для загрузки и трансформации данных. Через два года я понял, что хочу заниматься большими данными и получил такую возможность в «Тинькофф Банке». Там я уже начал работать с базами данных MPP и брал на себя задачи, связанные с Hadoop, Kafka, HBase и Spark. Еще через пару лет я узнал термин data engineer и понял, кто я на самом деле. В то же время мне хотелось развиваться дальше и заняться каким-то проектом с нуля, чтобы научиться администрировать, устанавливать программное обеспечение, конфигурировать его. Я тогда не искал работу, СИБУР нашел меня сам через LinkedIn, предложил должность инженера данных, и я согласился. Меня привлекло в том числе и то, что мой руководитель в СИБУРе Артем Данилов раньше работал в «Авито» и хорошо знает новейшие подходы к работе с данными. Именно поэтому компания сразу начала искать нужных людей. Переход из финансовой сферы в нефтехимию меня не беспокоил: по большому счету для грамотного специалиста неважно, чем занимается компания, главное, что есть большие массивы данных и бизнес-задачи, которые с их помощью можно решить. А в СИБУРе много и того, и другого. Это моя история и, конечно, не единственно верный путь. У других он может быть иным, но пару советов о том, как стать инженером данных, дать все же можно. Желательно окончить технический вуз, потому что, например, у меня было очень много математики, и она реально пригодилась. Но все-таки лучше, чтобы был уклон в computer science: в программирование и ИТ. Я учился на физика и, возможно, упустил некоторые моменты, которые мне приходится наверстывать до сих пор на разных курсах. Дополнительное образование точно не будет лишним. Например, я изучал Python на Coursera, прошел стэнфордский курс по базам данных, задачи брал на sql-ex.ru. Пригодятся и знания Scala и Java. В некотором смысле инженер данных — это и разработчик, и администратор. Он должен хорошо разбираться в SQL-базах данных, отлично знать SQL, иметь опыт работы с Unix-системами, владеть несколькими языками программирования (например, Python, Java, Scala), понимать основы распределенных систем, знать, что делать с большими данными в Hadoop, Spark, Kafka. Всего-то. Качества, необходимые дата-инженеру Способность и желание учиться. Человек должен уметь быстро переключаться на новую для себя область и также быстро в ней развиваться. Иначе не успеть за прогрессом технологий. Любовь к автоматизации. Грамотный специалист умеет быстро и красиво упростить рутинную работу, чтобы не делать постоянно одно и то же, а только контролировать автоматический процесс. Внимание к мелочам. К примеру, часто возникают ситуации, когда в конфигурационном файле появляется неверное значение, и система начинает работать неправильно. Внимательный инженер решит эту проблему быстрее. За последние годы появилось большое число новых технологий, и бизнес нуждается в профессионалах, которые в них разбираются. Но люди пока не успевают за прогрессом и не могут достаточно быстро обучиться новым инструментам, поэтому спрос на таких специалистов, как инженеры данных, очень высокий. В России их не хватает, и во всем мире, кстати, тоже. И, думаю, так будет в ближайшие десять лет. Поэтому вот мой главный совет тем, кто хочет стать инженером данных: выберите интересную для себя часть программирования, какую-то технологию и, каждый день, изучая что-то новое, становитесь лучше — так вы постепенно достигните цели. Фото в материале и на обложке: архив компании