
О Big Data сегодня не слышал только человек, совсем далёкий от IT. Тем не менее, молодым IT-шникам не всегда понятно, с чего нужно начать изучение этой темы, какими навыками нужно обладать и какими инструментами стоит пользоваться. Узнаем у экспертов, что они могут посоветовать.
Краткие выводы можно найти внизу статьи.
С чего начать в Big Data? В первую очередь с определения направления:
- Data Engineer — занимается разработкой каркаса, сбора и хранения данных, а также делает соответствующие данные доступными для различных потребительских и внутренних приложений.
- Data Scientist — занимается анализом и поиском закономерностей в данных.
Если в вас больше программирования и понимания, как взаимодействуют компьютеры через интернет, а не высшей математики, то первое подойдёт вам больше. В случае, если вам нравится высшая математика, теория вероятности, комбинаторика — второй вариант. Начать изучение можно с прохождения курса на одной из платформ — Coursera, edX, Stepik предоставляют отличные материалы и упражнения для обучения. Есть бесплатные курсы. В дальнейшем можно посмотреть лекции ШАД (Школа Анализа Данных) от Яндекса.
Для развития навыков Data Science есть отличная платформа Kaggle, на которой проводится большое количество конкурсов по машинному обучению. На этой платформе можно рассмотреть множество готовых кейсов и прокачать свои навыки, решая предложенные задачи.
Смотрите также: Знакомство с Kaggle: изучаем науку о данных на практике
Для начала стоит определиться, что вы понимаете под термином Big Data. Может подразумеваться одно из следующих направлений:
- анализ данных, построение моделей и прочий machine learning;
- построение и интеграция существующих DWH с Hadoop;
- построение стриминговых и RTDM-решений;
- всевозможные интеграции с NoSQL-базами.
Смотрите также: Разбираемся в типах NoSQL СУБД
Я дам советы для направления machine learning как самого популярного, на мой взгляд, ответвления Big Data на текущий момент. В целом же общие рекомендации универсальны, при том, что конкретные цели и майлстоуны будут отличаться в зависимости от выбранного вами направления.
После того, как вы определились с направлением, начинает работать правило 70–20–10.
10 % — курсы. Сейчас очень много курсов, платных и бесплатных, которые можно подобрать под любой запрос, а также есть хорошие книги и обучающие видео. Из книг я бы посоветовал взять следующие:
- «Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking», F. Provost, T. Fawcett;
- «Python и анализ данных», У. Маккини;
- «Построение систем машинного обучения на языке Python», Л. П. Коэльо, В. Ричард.
20 % — опыт других. Проводится много митапов/тематических встреч сообществ, есть онлайн-сообщества. Можно искать по ключевым словам проекты на GitHub и изучать, что уже сделали другие.
70 % — самостоятельные упражнения. Можно выбрать, например, уже решенные соревнования Kaggle и попытаться повторить бейзлайн. Или поучаствовать в открытых соревнованиях, одному или в команде единомышленников.
Также вам помогут:
- Google / Stackoverflow. Там вы наверняка найдёте ответ на любой вопрос.
- Образование. Гораздо проще будет тем, у кого есть математическая подготовка или опыт программирования. Конечно, без профильного образования заниматься Big Data тоже можно, но нужно быть готовым самостоятельно изучать следующие разделы: линейная алгебра (перемножение матриц и векторов), дифференциальное исчисление (производная, градиент), теория вероятностей и математическая статистика.
- Личный ПК или ноутбук (само собой, подключенный к высокоскоростному интернету). Можно или собрать, или заказать производительный ПК за 100–200 тысяч рублей, а можно (иногда даже бесплатно) воспользоваться облачными сервисами и практиковаться решать задачи в облаке.
- Время. Важно погрузить себя в среду полностью, жить этой темой, тогда и результаты будут более ощутимыми. Не нужно иметь завышенные ожидания и ждать, что всё получится само собой уже через неделю. Лучше ориентироваться на 2–3 месяца или даже больше.
Всё вышесказанное поможет достичь уровня Junior. Дальше освоение может длиться всю жизнь, особенно если есть желание дорасти до уровня, когда не просто умеешь виртуозно использовать инструменты и библиотеки, но также видишь целесообразность применения и ожидаемый эффект от использования Big Data в деньгах.
Смотрите также: Основные концепции статистики для data scientist’ов
Всерьёз изучать Big Data сейчас нет особого смысла для, пожалуй, 99,9 % разработчиков, потому что задачи, с которыми они могут столкнуться в своей повседневной работе, будут опираться на хоть и большие, но вполне формализованные и структурированные данные.
С масштабами порядка миллиардов записей в день легко справляются современные базы данных (и документоориентированные, и реляционные). А если уж вдруг жизнь столкнёт с потребностью обработать десятки петабайт скопившегося информационного мусора или очень широкий поток данных в реальном времени, то по ключевым словам Hadoop и Apache Spark гуглится всё необходимое и, потратив пару вечеров, можно разобраться и в подходах к работе с таким данными, и в существующих высокоуровневых решениях. Так что, по моему мнению, «молодым IT-шникам» лучше на эту тему время зря не тратить.
Прежде чем начать осваивать Big Data, нужно ответить на вопрос: «Кем хочется стать в данной области»? Сейчас выделяют 2 основных направления в работе — это Data Engineer и Data Scientist. Для обеих профессий желательно иметь математическое или физико-математическое образование, так как оно даст необходимый базис. Если такого образования нет, но вникнуть в тему больших данных всё же хочется, я рекомендую книгу Big Data for Dummies.
Следующим важным навыком является знание английского языка. Большинство книг, статей и документации к инструментарию написано только на английском языке. Далее идёт изучение языка программирования, например Python или R. Существуют онлайн-курсы по программированию на них и по использованию этих языков для Big Data. На этом моменте пути расходятся. Data Engineer должен заняться глубоким изучением SQL- и NoSQL-решений (таких как Spark, Hadoop, Storm, Cassandra, Hive), их принципов работы и структур данных. Для Data Scientist стоит изучить синтаксис команд, также необходимо углубиться в области статистики, машинного обучения и анализа данных. Благо книг по данным темам очень много.
Термину Big Data предпочитаю Data science. Это широкое понятие включает в себя в том числе и анализ больших данных, и многое другое.
Области знаний специалиста по анализу данных (data scientist): машинное обучение, статистика и знание конкретных инструментов.
Основные платформы анализа данных на данный момент в порядке убывания популярности:
- библиотеки Python (scikit-learn, SciPy и различные библиотеки для работы с нейронными сетями);
- R;
- Matlab.
Я рекомендую Python, поскольку он может быть использован как для исследований, так и для непосредственно обработки данных в составе каких-либо систем. То есть один и тот же код, одни и те же модели могут быть использованы как на стадии исследования, так и production-реализации.
Информации для изучения этой специальности сейчас очень много:
- курсы — как платные так и бесплатные — на Сoursera, Stepic, Udemy и других площадках (Машинное обучение и анализ данных — самый известный курс от Яндекс/МФТИ, Python для анализа данных — сокращённый вариант предыдущего, Введение в машинное обучение — курс от ВШЭ, Анализ данных — специализация от Новосибирского государственного университета, Введение в науку о данных — курс от СПбГУ);
- платные курсы от IT-компаний;
- несколько книг по анализу данных на русском языке и сотни (если не тысячи) дельных книг на английском;
- обучающие статьи. Например открытый курс машинного обучения в виде статей от OpenDataScience на Habr.com. Ну, и в целом блог ODS полезный;
- очень много обучающих роликов и курсов на YouTube;
- в городах-миллионниках регулярно проводятся митапы по анализу данных, а в Москве ещё и специализированные конференции.
Кроме того, я советую прокачаться в статистике. По моему мнению, для DS это «must have».
Такие курсы есть на Stepic — Основы статистики, Основы статистики-2 и Математическая статистика.
Начать, конечно, лучше с азов и почитать учебник по теории вероятности и статистике. Без этого дальше будет очень тяжело ?.
А теперь немного посерьёзнее. Под термином Big Data что только ни подразумевают. Начиная от проведения маркетинговых кампаний и заканчивая программированием процесса извлечения этих самых данных. Не будем сейчас спорить и пытаться привести собственное определение. Просто посмотрим, что же необходимо знать и уметь тому, кто решил связать свою карьеру с этими двумя словами.
Во-первых, понадобится понять, что такое неструктурированные данные и как с ними работать. Для этого можно изучить Hadoop и то, что вращается вокруг него: Pig, Hive, Hbase, Sqoop и т. п. Это позволит понять, как формируются, выгружаются и хранятся данные для анализа. В целом, можно использовать и обычные DB-технологии, но тогда вы рискуете получить обвинение в том, что «это совсем не Big Data!». ? В итоге вы должны иметь представление о том, как работать с данными, получаемыми из разнообразных источников, объединять и связывать их между собой, складывать и перемещать их.
Следующий шаг — это знакомство с современными методами аналитической обработки данных, методами поиска закономерностей и моделирования. Вот здесь как раз и понадобятся знания статистики и теории вероятности. Именно они рассказывают о том, как извлекать знания из большого набора наблюдений, определять наличие или отсутствие связей между событиями, определять причины и следствия, проверять гипотезы и т. п. После изучения «мат. части» очень пригодится умение программировать на современных языках типа Python, R или знание систем SAS, SPSS и аналогичных для применения полученных знаний к данным, которые мы собрали и подготовили на первом этапе. Знания о том, что такое Random Forest, Neural Network, Boosting, как и для чего они применяются, также просто необходимо.
Можно, конечно, программировать все методы и алгоритмы самостоятельно, но, поверьте, это отнимет очень много сил и времени, так что рекомендую воспользоваться уже подготовленным и протестированным инструментарием. Здесь уместно будет сделать замечание по поводу open source и проприетарных продуктов. При огромных преимуществах первых, они, увы, не гарантируют вам быстрое и качественное исправление ошибок, защиту и поддержку.
Итак, вы освоили обработку данных и методы моделирования, остаётся последний и самый важный шаг: понять, а для чего вообще всё это надо и решение каких задач вы хотите реализовать с применением технологии Big Data? Тут, с одной стороны, всё просто: мы начали с того, что Big Data сейчас используется практически везде. С другой стороны, начав использовать эти технологии в решении своих задач, можно осознать, что они могут быть решены и без применения так называемых «Big Data tools». Иногда даже быстрее и проще.
Мой совет тем, кто собирается посвятить своё время изучению Big Data — это очень интересное и перспективное направление. Только всегда отталкивайтесь от той задачи, которую надо решить, и выбирайте те средства, которые наиболее эффективны.
Смотрите на задачи и проблемы шире — это поможет намного больше, чем знание конкретного языка или framework’а.
Удачи!
Чаще всего инструментарий в создании Big Data проектов выбирается под конкретную бизнес-задачу и зависит от существующей инфраструктуры клиента. Можно выделить следующие направления: анализ данных и архитектура хранения и обработки.
Анализ данных начните изучать с Python и open-source библиотек, таких как numpy, pandas, matplotlib, scikit-learn. Не забывайте об SQL, поскольку большая часть корпоративных данных продолжает храниться в реляционном виде и важно уметь использовать эти источники.
Изучите типовые архитектурные паттерны по распределённым вычислениям и хранению данных, обработке данных в режиме реального времени, работе с неструктурированными и структурированными данными, базовые принципы управления данными. Для решения задач по распределённой обработке данных изучите Apache Spark, по распределённому хранению данных — основы HDFS.
Не забывайте об инструментах, связанных с проверкой качества данных, ведением бизнес-глоссариев, визуализацией данных конечным потребителям. Это очень влияет на успешность внедрения проектов Big Data.
Сконцентрируйтесь на методах анализа данных, научитесь извлекать инсайты, находить скрытые закономерности для оптимизации существующих процессов и прогнозирования будущих событий. Применяйте навыки представления и визуализации результатов анализа.
Смотрите также: Качественно новый уровень визуализации данных в Python
Не забывайте, что системы создаются для конечного пользователя! Для этого ответьте себе на вопрос: кто будет использовать данное решение (от администратора до конечного потребителя)? Не старайтесь создать очередную «свалку» данных просто ради внедрения каких-то технологий. Используйте ваши знания, чтобы создавать действительно ценный продукт, который станет колоссальным ресурсом для компаний, их «козырем» в конкурентной борьбе на рынке.
На просторах интернета огромное количество информации о технологиях формирования и методах использования БигДаты в коммерческих и социальных сферах, но как определить значимость материалов и с чего начать первые шаги в пространстве данных? Сферу Big Data можно разделить на два направления: аналитика (консолидация и анализ данных) и разработка (создание систем для вычислений и обработки массива данных). Чтобы понять основы и определиться с направлением работы, предлагаю начать знакомство с основами на проверенных ресурсах: Rb и Wikipedia.
Если хотите далее продвигаться в разработке Big Data — изучайте темы: SQL, NoSQL, основы статистического анализа (если прогуляли в университете), C# или Python, или Java, или Go (мне предпочтительнее Python), основы машинного обучения, распределённые вычисления на примере Amazon, Google — потому что они отражают масштабы, когда Big Data открывает новые возможности и приносит ощутимую ценность компании.
Из печатной литературы рекомендую зарубежных авторов — у них больше опыта, изложение материала понятное и даже захватывающее. Для начала подойдут самые популярные книги, например «The Human Face of Big Data» (Человеческое лицо БигДаты) Рика Смолана и Дженнифер Эрвитт или «Predictive Analytics: The Power to Predict Who Will Click, Buy, Lie, or Die» Эрика Сигеля.
В этом деле без массива данных или доступа к стороннему хранилищу Big Data оттачивать навыки бессмысленно. Любые новые познания без практики сводят процесс обучения к нулю, но если действительно хочется заниматься Big Data — идите на стажировку в соответствующую компанию.
Есть другие «модные» направления (перечисляю не все): это облачные хранилища (Hadoop), распределённые вычисления (MapReduce), машинное обучение (machine learning, но тут надо знать С# или Python), DataMining (выявления закономерностей). Все эти направления появились благодаря или по причине экспоненциального роста массива данных.

Ко мне частенько приходят коллеги и огорошивают простым, на первый взгляд, вопросом: «С чего начать изучение Big Data/Hadoop/Streaming/ML/…?»
В моём понимании, хорошо, когда изучение этих технологий базируется на трёх «слонах». Кстати слон — это эмблема Hadoop, который является практически родоначальником того, что сейчас принято называть экосистемой Big Data.
Первый «слон» — это понимание принципов работы с данными. Вы можете написать SQL-запрос, понимаете, как устроены различные индексы, слышали про принцип ACID.
Второй «слон» — это общие навыки программирования и даже скорее умение читать и понимать чужой код, ибо Open Source живёт по принципу «лучшая документация — это код».
И третий «слон» — это умение работать с консолью (отсутствие навыков работы с Linux сильно осложнит ваше знакомство с любыми технологиями).
И немного практических советов.
Как делать не надо
Не пытайтесь изучать технологии впрок — это бесполезно. Изучайте их, если есть потенциальная возможность практического применения.
Практика First
Не читайте — делайте. Открыли User Guide, скачали, настроили, запустили, попробовали, PROFIT!
Найдите прикладную задачу
Перетащите БД бухгалтерии на Hive. Это плохая идея, но пока не попробуешь, не узнаешь, почему.
Big Data — это про БОЛЬШИЕ данные
Эту фразу уже можно использовать в качестве эпитафии на немалом количестве проектов. Если попробовали сделать предыдущий пункт, то сами сможете ответить, почему. Если нет, то придётся просто поверить.
Что гуглить?
Хранение данных/замена SQL-базы данных: Hive, HDFS, ClikHouse, Hbase + Phoenix, Cassandra.
Асинхронное взаимодействие, очередь, «шина»: Kafka — на самом деле, один из немногих продуктов, альтернативы которому в некоторых применениях почти нет.
Обработка событий налету, например фильтрация запросов на сайт от поисковых систем и подсчёт количества запросов по уникальным пользователям: Storm, Spark Streaming.
Хороший «комбайн» — Apache Nifi. Позволяет сделать Internet of Things, не открывая консоли IDE, имеет удобный визуальный интерфейс и даёт возможность запускаться даже на «калькуляторах».
Если хочется All Inclusive, то могу посоветовать уже готовые пакетные дистрибутивы типа Horton Works HDP/HDF. Отличительная особенность в том, что все компоненты в таком дистрибутиве будут совместимыми друг с другом, а также будут обладать механизмами автоматического развёртывания и мониторинга из коробки. Поэтому вам не придётся разбираться, почему Spark не хочет подключаться к Kafka и как настроить Phoenix для подключения к Hbase.
Прежде всего, чтобы избежать путаницы, надо определится, идёт ли речь о Big Datа или о Data Science. К сожалению, многие часто смешивают эти два понятия. Big Data — это набор в значительной степени инженерных технологий и продуктов для сбора, хранения и «преобразования» больших объёмов данных. В то время как Data Science — это методики и алгоритмы извлечения знаний из данных, не обязательно больших.
Что учить?
Основой Big Data является Hadoop. При первом знакомстве с Big Data лучше всего воспользоваться готовыми дистрибутивами от Cloudera или Hortonworks и изучить продукты, входящие в эти дистрибутивы:
- HDFS и форматы файлов ( avro, parquet, …);
- HBASE;
- MapReduce;
- Spark;
- Flume;
- Kafka;
- Hive и, может быть, Impala;
- Hue;
- Pig;
- …
И уже потом, понимая назначение и ограничения этих стандартных дистрибутивов, продвигаться к более новым и/или специализированным продуктам.
Поскольку большая часть продуктов написаны на Java или более современном Scala и предоставляют API на них же, то обойтись без этих языков в решении серьёзных задач вряд ли удастся. В ряде случаев поддерживается API на Python, что обычно ценится в привязке к Data Science.
Как учить?
Учить придётся самому: читая учебные материалы, руководства по продуктам, делая упражнения. Мечта об обучении во сне для Big Data не реализована.
Как получить учебные материалы?
Как обычно, есть два пути: платный и бесплатный. Платный — вендоры и учебные центры, которые имеют авторизованные программы обучения. Официальная сертификация — это всегда дополнительный плюс. Однако, если обучение с преподавателем и последующая сертификация не критичны, можно купить только подписку на учебные материалы. Например, в Cloudera есть отличная библиотека платных учебных курсов, которые можно освоить без преподавателя.
В качестве примера бесплатного обучения можно привести платформу Coursera, которая предлагает большое количество курсов и сертификаций, включая Big Data и Data Science. Курсы подготовлены ведущими университетами, в том числе и российскими. Есть и Yandex.
Вот, как пример, пара достойных курсов: «Functional Programming in Scala» и «Big Data for Data Engineers».
Пройти курс на Coursera можно бесплатно и в своём темпе, за сертификат придётся заплатить.
Ну, и, наконец, есть множество ресурсов в интернете — возможно, не всеобъемлющих и не очень глубоких, но иногда отвечающих конкретно на вашу проблему.
1. Прежде всего необходимо понять цель изучения Big Data и какую именно специализацию хочет приобрести молодой ИТ-профессионал.
Каждая специальность предусматривает свой функционал и путь развития:
- Менеджер проекта/продукт-менеджер — эксперт, который понимает потребности в аналитике, профессиональную терминологию специалистов по работе с данными и умеет ставить задачи разработчикам. Такой человек не обязательно умеет «кодить», но знает верхнеуровневые концепции машинного обучения и статистического анализа больших данных. Чтобы развиваться в этом направлении, полезнее всего изучать успешные кейсы внедрения аналитических проектов, понимать проблемы и потребности своей компании в области аналитики. Для этой специальности лучше всего подходят люди, которые уже отработали в компании некоторое время и обладают доменной экспертизой, т. е. понимают внутренние процессы и внешний рынок.
- Data scientist/исследователь данных — специалист по обработке больших массивов данных, знаток машинного обучения и статистики. Он должен уметь совершать всевозможные преобразования над данными и строить аналитические модели, в большей степени с применением машинного обучения. Также важно правильно валидировать алгоритмы и презентовать свои наработки членам своей команды и другим подразделениям. На эту специальность можно обучиться в вузах, к примеру, в Иннополисе. Также можно пройти онлайн-курсы на многочисленных ресурсах вроде Coursera, Edx, Stepik, Udacity или от крупных российских/зарубежных ИТ-компаний. Будет полезно подписаться на профильные ресурсы. Много знаний можно почерпнуть от участия в соревнованиях, которые проходят как офлайн, так и онлайн. Самая популярная платформа — Kaggle. Технологический стек, который применяется в этой области — ML-библиотеки, Python, R, SQL.
- Data engineer/дата инженеры. Для работы с данными нужны сами данные. Дата-инженеры занимаются созданием инфраструктуры сбора и хранения данных. Такие эксперты умеют собирать, грузить данные из разных источников и аккуратно складывать в хранилище, чтобы специалисты по работе с данными могли беспрепятственно их использовать. Также можно выделить machine learning engineer — специалиста, который может автоматизировать работу предикативной модели от процесса сбора данных до расчёта признаков, получения результата и предоставления результата потребителю/заказчику. Зачастую инженеры будут выполнять задачи по devops. Такие специалисты могут пройти онлайн-курсы по специализации Big Data, курсы по работе с базами данных и оптимизации вычислений. Технологический стек: Python, Hadoop, Spark, DBA.
2. После определения специализации следует найти ресурсы, которые подробно расписывают дорожную карту развития компетенций (желательно заручившись поддержкой более опытных коллег/друзей). Рекомендую изучить Data engineer career path from Amazon, курс на Habr от Open Data Science (русский), data scientist 2019 path from av.com, классический курс по машинному обучению для продвинутых (на английском), специализацию от Яндекс по Big Data, специализацию по машинному обучению от Яндекс и МФТИ.
3. Далее советую поставить конкретные цели для изучения. Без них и без видения конечного результата внутренняя мотивация снижается, и сложно дойти до успешного результата.
4. Выделить время и приступить.
Это зависит от выбранного направления. Условно сферу Big Data можно разделить на две категории — Big Data Engeneering и Big Data Scientist / Data Analyst. Они различаются по характеру задач, тем не менее, в обеих сферах необходимы навыки программирования, мы рекомендуем их осваивать, и знание высшей математики.
Для старта карьеры Data Scientist и Data Analyst следует научиться писать SQL-запросы и начать работать с базой данных, научиться обрабатывать файлы и интерпретировать результаты, также уметь предобрабатывать массивы данных, формировать большие данные в кластеры, уметь обрабатывать данные в Hadoop. Из фундаментальных знаний пригодятся статистика, аналитика, теория вероятностей и хорошая математическая база. Все это необходимо для построения алгоритмов.
Для работы в области Big Data Engeneering нужно уметь строить саму архитектуру хранилищ данных, уметь настроить систему хранилищ так, чтобы данные не пропадали, чтобы поиск был удобным и вовремя происходило резервное копирование данных. Это направление работы включает в себя проектирование и развертывание систем, над которыми должны выполняться вычисления. Начать обучение имеет смысл с основ программирования, основ SQL и освоения работы с базами данных.
Если вы собираетесь развиваться в направлении Big Data Engineering, то есть заниматься разработкой архитектуры системы, настройкой сбора и хранения больших объемов данных, то прежде всего, нужно обладать навыками программирования, понимать принцип работы Hadoop, понимать внутреннее устройство СУБД, иметь представление о многопоточном программировании.
В свою очередь, Big Data Analytics предполагает использование массивов данных из готовых систем, разработанных специалистами по Big Data Engineering. Анализ Big Data включает в себя выявление тенденций и закономерностей, разработку различных систем классификации и прогнозирования, интерпретацию результатов. Если вы хорошо разбираетесь в программировании, успешно решаете сложные задачи по высшей математике, знаете теорию вероятностей, математический анализ, комбинаторику, то это как раз те навыки, которые пригодятся в работе в области Big Data Analytics.
Для математических вычислений и построения алгоритмов пригодятся SAS, Python, R. Для выгрузки массивов из баз необходимо уметь писать SQL-запросы. Главным инструментом в работе с Big Data считается Hadoop. Иногда может требоваться Spark – он выполняет задачи, схожие с Hadoop.
С чего начинающему программисту нужно начать изучение темы Big Data, какими навыками нужно обладать?
Для ответа на этот вопрос нужно в первую очередь разграничить, с какой точки зрения мы подходим к изучению Big Data.
Это может быть:
- Сбор и хранение данных.
- Анализ данных.
Анализ данных — это о-о-очень много математики. Это знание алгоритмов и математических методов, причём порою весьма специфических. Это интуиция, в том числе математическая интуиция, если можно так сказать. Например, как посмотреть на те же самые цифры по-другому.
С другой стороны, вся область Big Data была бы не востребована, если бы не были собраны, обработаны и сохранены миллиарды записей. Поэтому важно эффективно данные записывать, хранить и обрабатывать.
Начинающему разработчику требуется для себя понять, с чем он справится, что ему, прежде всего, интересно: осваивать фреймворки, писать всевозможные модули по сбору данных, начать работать с таким инструментарием как Kafka, Spark, Elastic Stack, Hadoop и другими похожими технологиями в контексте именно сбора и накопления данных. Либо ему, как математику, интересно прежде всего постепенно учиться строить простые модели, простую выборку данных, и дальше всё углубляться и углубляться в процесс, применяя тот или иной язык, специфический для анализа данных.
Очень часто данные анализируются с помощью языка Python, либо R, также используются более специализированные языки. Некоторые делают анализ данных на функциональных языках типа Scala, Haskell. А вот собираются данные часто с использованием Java, и вообще тем, что там было придумано на JVM-машине и применимо для сбора, анализа, обработки данных. Netty, Akka, Kafka, Spark и прочее, и прочее.
Хотелось бы отметить, что начинающему программисту об этом думать вообще не надо. То есть сами понятия «начинающий программист» и «Big Data», они несколько несовместимые.
Программист должен быть довольно опытным, чтобы, например, заниматься сбором данных. Или, если это аналитик данных, то это даже больше не программист, а больше математик, тот, кто «дружит» с системным анализом, с математической вероятностью, со статистическими погрешностями и тому подобными вещами для исследования.
Например, на сегодня обычный путь разработчика Big Data — это относительно простые на первом этапе приложения по стандартной схеме: получили данные, записали их в реляционную базу, научились оттуда получать, фильтровать, агрегировать, группировать, строить таблицы фактов, использовать колоночные NoSQL-решения для накопления и последующей выборки. Иногда даже саму реляционную базу можно опустить, но всё равно язык SQL никто не отменял. Почему? Потому что на популярных NoSQL-решениях, том же Spark, который входит в большую Hadoop-экосистему, в нём часто имеет смысл представить данные как некий data frame, который является аналогом таблицы в реляционной базе, и потом применить подобные языку SQL запросы. Иногда это удобнее и быстрее, эффективнее в контексте данных или опыта команды разработки.
Чтобы стать разработчиком Big Data, нужно обладать большим кругозором, а также попасть в команду, которая уже эффективно занимается Big Data.
Но, как правило, в эти команды зовут опытных людей из других, смежных областей, а не начинающих разработчиков.
Сразу стать программистом, связанным с Big Data, — это очень сложно. Даже захотеть сложно. То есть надо понимать, почему ты туда попал, почему ты хочешь с этим работать. А это значит, что нужен опыт. А опыт есть у опытных программистов. Игра слов, но всё-таки.
Какими навыками нужно обладать и какими инструментами стоит пользоваться?
Программист должен хорошо знать алгоритмы и структуры данных. Хорошая алгоритмическая подготовка и всевозможные структуры, представления данных. Почему? Например, B-Tree. Это удобная структура для хранения данных в файловой системе, то есть на диске. Рано или поздно все данные попадают на диск. И если мы предлагаем какое-то другое решение для хранения, мы очень хорошо должны представлять, а нет ли в семействе структур данных B-Tree чего-то подходящего и хорошо изученного с известным временем выборки, эффективностью использования памяти, и так далее, чтобы это наше «другое решение» не оказалось «велосипедом» или малоизученным решением с неизвестными проблемами. Это странно, но часто даже опытные разработчики используют B-Tree-индексы в базах данных, не понимая, как они работают. Я уже не говорю про то, что хэш-таблицу, фильтр Блума, SS Table надо просто очень здорово понимать и уметь эффективно использовать.
А это только опыт, опыт и опыт. Теория — хорошо, но знать и уметь применять — вещи разные.
Кроме того, есть важная специфика работы с большими данными. Потому что, как мы только говорим о Big Data, мы сразу получаем и «большие» проблемы. Нам всегда мало оперативной памяти, нам всегда мало дискового пространства, и нам всегда мало нод в кластере. Это нормальная история, которую надо уметь превращать из печальной в работоспособную. А кто доверит неопытному человеку, допустим, Linux-кластер, в котором 100 нод? Для заказчика, для компании — это деньги. Впустую потраченное неопытной командой электричество сравнимо с затратами на опытных в работе с большими данными разработчиков.
Big Data — это не два компьютера в компании, которые потребляют немного электричества, и, допустим, простой которых некритичен. Это большой согласованный кластер со сложным ПО и высокими затратами на эксплуатацию, обслуживание. И, как правило, эти большие данные и анализ для кого-то предназначены. Если они пропадают, неэффективно обрабатываются, то проект обречён на провал… Важно не только правильно проанализировать данные, но и успеть это сделать за определённый конечный интервал времени, успеть дать ответ к конкретной дате.
Например, какой-либо совет на основе анализа по запросу маркетологов крупного интернет-магазина нужен, допустим, в течение месяца. Если месяц прошел, а понятного ответа на заданный вопрос нет, то всё, сезон скидок закончился, мы так и не узнали, какие товары надо было предложить клиенту интернет-магазина в «чёрную пятницу» (условно). В результате год готовились, исследовали, считали, и ничего не сосчитали. Это будет весьма болезненно для компании. Доверит ли она работу с Big Data начинающим разработчикам и исследователям?
Отрасль Big Data не только очень популярна, но и является одной из самых быстро развивающихся областей знаний. Поэтому наиболее важным навыком, позволяющим не только занять в данной отрасли устойчивую позицию сейчас, но и продолжить развиваться в качестве специалиста по большим данным в будущем, является фундаментальное базовое образование в области компьютерных наук и математики. Для специалистов в данной отрасли важны не только навыки программирования и работы с базами данных, но и знание основ алгоритмирования, вычислительной математики, статистического анализа, комбинаторики и т. д. Фундаментальное образование играет ключевую роль в развитии специалиста по большим данным, закладывая основу эффективного самостоятельного развития в рамках данной отрасли. Поэтому одним из приоритетных направлений для компании Naumen является подготовка IT-специалистов на базе ведущих естественно-научных факультетов УрФУ, а также образовательные мероприятия для сотрудников компании.
Для начала стоит определить, о какого рода специалистах идет речь, поскольку данная область весьма обширна и включает в себя специалистов в области построения, хранения и обработки больших данных — Data Engineers, специалистов в области анализа данных и построения алгоритмов машинного обучения — Data Scientists, а также нового поколения бизнес-аналитиков, которые могут переносить потребности бизнеса на язык IT с учётом новых задач, которые ставит перед бизнесом внедрение технологий больших данных. Основные инструменты для Data Engineer на данный момент — это технологический стек Hadoop, как наиболее распространённое решение в области хранения и обработки больших данных, а также понимание и навыки работы с различным NoSQL базами данных. Специалисты Data Science в свою очередь должны уметь работать с такими фреймворками как Spark и h2o. Знание и понимания алгоритмов нейронных сетей, как наиболее универсального инструмента построения алгоритмов машинного обучения, является неотъемлемым для любого специалиста в области Data Science. Важным качеством специалистов в области больших данных является гибкость и умение работать в рамках разных технологических стеков, то есть понимание того, что машинное обучение не является синонимом Python или R, а большие данные — не синоним Hadoop или HP Vertica. И для Data Engineer, и для Data Scientist будет полезным интерес в области квантовых вычислений. Сегодня область квантовых вычислений – это, по большей части, ещё наука, но возможно, что для нового поколения IT-специалистов квантовые компьютеры станут реальностью. Для бизнес-аналитиков важно не только понимание, как описать бизнес-процессы заказчика, но и умение выстраивать данные процессы в рамках задачи внедрить технологию больших данных на уровне сложных структурных взаимодействий между дочерними предприятиями и подразделениями крупных и средних компаний, а также умение быть арбитром во внутрикорпоративных спорах, возникающих в условиях необходимости единого хранения, обработки и обмена корпоративными данными.
Технологии и алгоритмы, которые ещё вчера были передовыми, сменяются новыми разработками, но это не значит, что стоит переписывать все задачи на новых фреймворках с применением новых алгоритмов. Стоит сохранять пристальное внимание и понимание происходящих вокруг изменений, но брать на вооружение только те методики и технологии, которые могут принести реальную и максимальную пользу бизнесу в рамках неизбежной ограниченности как вычислительных, так и финансовых ресурсов. Для компании Naumen это означает внимание ко всем аспектам внедрения технологий больших данных, изучение и тестирование наиболее актуальных open source-решений с акцентом на реальное состояние IT- и бизнес-структуры клиентов компании.
Важно сначала разобраться, что же такое Big Data, когда именно они начинаются.
Big Data — это данные, которые не помещаются в оперативную память компьютера.
Поэтому всю подготовку стоит разделить на анализ данных и анализ больших данных.
На основе анализа данных вы можете создать новые смыслы и незримые значимые выводы, но есть известный парадокс — очень легко породить ложные смыслы. Поэтому важно уметь в целом разбираться с данными.
Поскольку эта сфера сейчас быстро развивается, то информации относительно неё всегда много, и она также будет расти дальше. Поэтому важно уметь конкретно в своей голове работать с большими наплывом обучающей информации и структурировать её «под себя». Для этого важно выбрать себе базис, основной костяк информации, на который вы как на дерево будете насаживать разные ветки текущих знаний, да и будущих, с которыми вам ещё предстоит столкнуться. Свой личный базис поможет Вам не путаться во всём многообразии материалов на эту тему и спокойно в нём «жить». Я предложу своё видение, что можно взять за базис и в каких направлениях его стоит расширять, чтобы шаг за шагом повышать своё мастерство и освоить Big Data. Но повторюсь, что важно собрать базис под себя, поэтому будьте вольны всё, что указано ниже, рассматривать только как пример, а конкретный путь выбирать сами.
1 этап. Выстроить тот самый базис: научиться ориентироваться, какие типы данных вообще бывают, и что с ними можно делать.
Казалось бы, тривиальный вопрос для IT-шника, но порой это иллюзия. Вот один живой пример. Часто в интернете мы видим разные рейтинги, например рейтинги фильмов. Это знакомая всем история, когда посетители ресурса ставят оценку фильму от 1 до 5 звёздочек, а сайт автоматически интерактивно подсчитывает среднее значение рейтинга фильма. Это очень частая картина, но смысл в том, что тут-то и происходит подмена понятий: идёт искажение реальной оценки рейтинга фильма. Нельзя считать среднее значение, если расстояние между всеми оценками неодинаковое. Ведь для кого-то 4 — как для вас 3, или наоборот, как 5. Как в школе: 4 у определённого педагога — это подарок «с небес», а у другого 5 получить удаётся легко, и 4 наоборот «обижает». То есть оценки от разных пользователей неравнозначны. Поэтому тут для адекватной оценки рейтинга специалисты Data Science используют другие меры расчёта. И вот таких жизненных примеров много. Поэтому повторюсь, базис важно знать, и с него стоит начинать своё обучение Big Data. Доступней всего эти важные основы излагают, как ни странно, в гуманитарных науках. Там минимизированное количество формул и больше жизненных понятных примеров вместо абстрактных определений, которыми кишит статический анализ для естественных наук. Конечно, в чистой математике определения максимально точные, но из-за сложности языка не так-то легко бывает уловить смысл. Поэтому подбирайте под себя литературу о методах математической обработки, например, для психологов, социологов и, возможно, экономистов. И на жизненных примерах на доступном языке вы разберётесь с нужными основами быстрее. К тому же по пути вы разберётесь в том, как данные отбирать. Каким данным стоит верить, а какие ставить под сомнение. Это тоже важно. А заодно определитесь с вашим уровнем знаний в статистике и начнёте параллельно на тех же самых примерах его «подкачивать».
2 этап. Развивать навык задавать интересные осмысленные вопросы.
Дело в том, что когда вы видите огромный объём данных, очень важно знать, что именно вы хотите разузнать, прояснить и выверить. Поэтому важно уметь видеть не просто данные, а смысл за ними. Допустим, вы хотите выявить ТОП-10 фильмов XX и XXI веков с наибольшими кассовыми сборами. Вариант просто сделать ранжирование фильмов по убыванию общей суммы кассовых сборов не подходит. Важно видеть смысл и нюансы. В этом примере нужно сначала пересчитать суммы сборов с учётом инфляции доллара с момента выхода фильма до сегодняшнего дня. И только после этого сделать ранжирование и определить ТОП-10 фильмов. А для развития этого важного навыка задавания интересных и осмысленных вопросов полезно читать книги типа «Все лгут. Поисковики, Big Data и Интернет знают о вас всё» и разные научно-популярные книги, которые провоцируют ваш мозг думать нестандартно и замечать критические нюансы. Также в этом помогают навыки из других дисциплин, например, коучинг. А ещё, конечно, детективы содействуют, потому что, на мой взгляд, специалист в анализе данных — это некий Digital Шерлок.
3 этап. Развивать навык, как из интересных вопросов строить гипотезы, переводить их на язык математики и «компьютерного мышления» и проверять их.
Сначала, на всякий случай, поясню: любой исследователь вам скажет, что одна гипотеза — это не вариант, их должно быть как минимум три. И кроме этого, важно разбираться в стратегии их проверки. На уровне анализа обычных данных в первую очередь проверяется гипотеза от противного, а не наоборот, как часто бывает в наших привычках. Приведу пример. Допустим, у вас есть гипотеза, что онлайн-образование влияет на мотивацию учеников учиться. Просто проверка именно этой гипотезы ничего не доказывает, важно проверить обратную гипотезу, что онлайн-образование НЕ влияет на мотивацию учеников учиться. И если именно обратная гипотеза не будет подтверждена, то верна первоначальная гипотеза: что онлайн-образование влияет на мотивацию. Так что эти нюансы важны. Где можно почерпнуть эти знания? Там же, где и про типы данных. В литературе для гуманитариев по методам матобработки в исследованиях по психологии, социологии и т. п.
4 этап. Обучаться на конкретных примерах, не зацикливаясь на языке программирования.
На мой взгляд, в первую очередь важно набивать руку не на коде, а на смыслах. Для этого хорошо подходят онлайн-программы MOOC, в частности edX. Можно подобрать себе бесплатные онлайн-курсы на Python, R или аналогичные варианты. Есть ряд курсов, где не растрачивается время на сложности программирования и настройку среды программирования, и для этого задействуются настроенные версии web-платформ для интерактивных вычислений, таких как open-source проект Jupiter. В его названии как раз и кроется ответ, какие языки этот проект поддерживает: Julia, Python и R. На самом деле там больше языков, но суть в том, что благодаря Jupiter и другим аналогичным проектам вы можете сразу начать программировать на онлайн-курсе, разбирая ключевые смыслы задач, не тратя время на настройку среды. На этом этапе — то, что надо, чтобы не тратить время на сложности языка. А живые примеры помогут вам укрепить свой базис, начать в этом разбираться. А также по пути вы научитесь структурировать данные и обогащать копилку методов и приемов, которые используют как в обычном анализе данных, так и в анализе больших данных. Плюс ко всему, вы обучитесь азам визуализации данных, что очень полезно и важно для выверки верности своих гипотез.
5 этап. Переход на чистый Big Data Analysis.
На этом этапе вы, уже понимая ключевые смыслы анализа данных, обновляете свои инструменты именно для работы с суперкомпьютерами, кластерами и хранилищами данных. То есть этот этап позволит вам оптимизировать вычисления через парадигму параллельных вычислений и платформ обработки для распределённых в разных местах больших данных (Hadoop, Scala и т. п.). Именно их используют, когда объём данных уже слишком велик, и не помещается в оперативную память одного компьютера. Если есть азарт выходить на уровень промышленного или научного программирования, то тут понадобятся знания языков C++ или Go и подключение параллельных библиотек MPI или CUDA. Если ваши аппетиты чуть пониже, то тогда можно остановиться на обработке информации через различные системы (например для обработки информации в реальном времени используют платформы Scala и Storm). Системы обработки больших данных являются фреймворками, то есть каркасами, для использования которых необходимо состыковать их с другими фреймворками, прикладным программным обеспечением пользователя и системой хранения данных. Для изучения инструментов этого этапа также подойдут различные MOOC-курсы, либо при сильной математической подготовке можно раскачать свои навыки Big Data Analysis в Школе Анализа Данных Яндекса.
Ну, а дальше начинается своя самостоятельная дорога.
На базе заказов с Big Data, общения с коллегами и использования разных научных публикаций формируется ваш профессионализм и личная версия мастерства. И, как говорится, нет предела совершенству.
Итак, как можно освоить Big Data?
- Выберите предпочитаемое направление.
- Изучите нужные технологии и инструменты, например Hadoop, Kafka, Spark, Python, NoSQL и т. д.
- Проходите курсы (например курс от OpenDataScience), а также читайте книги/статьи, коих бесчисленное множество.
- Посещайте различные конференции, взаимодействуйте с людьми на форумах, изучайте проекты на GitHub, одним словом — общайтесь и делитесь опытом.
- Постоянно практикуйтесь. Можете заняться своим собственным проектом, а можете поучаствовать на площадке для соревнований вроде Kaggle.
Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.