Зачем разработчикам изучать Spark? Как освоить технологию в домашних условиях? Что умеет, а чего не умеет Spark и что ждет его в будущем? Об этом – в интервью с тренером по Java и Big Data в ЕРАМ Алексеем Зиновьевым.
— Ты тренер по Java и Big Data – что это значит? Чем ты занимаешься?
— В EPAM я готовлю и провожу тренинги по запросу команд для старших и ведущих инженеров (или, как говорят у нас на Айтищщине, – синьоров и лидов). Копать все темы с буквой J на глубоком уровне не под силу одному человеку, поэтому я специализируюсь на следующих: Java Concurrency, JVM Internals (те самые кишочки), Spring Boot, Kafka, Spark, Lombok, модель акторов – в общем, на том, что позволяет как повысить производительность самого разработчика, так и ускорить работу его приложения. Конечно, если потребуется, могу подготовить тренинг и по Java EE или паттернам, но таких материалов уже достаточно и в EPAM, и вне его.
— Ты перечислил довольно много разных тем.
— Даже в этих темах постоянно появляется так много новых вопросов и задач, что почти каждое утро я вынужден говорить себе: «Так, стоп, вот этим я не занимаюсь». Так, методом отсечений, получается выделить ряд направлений, с которыми я и работаю. Одно из них – Spark. Семейство Spark-фреймворков растет и ширится, поэтому и здесь приходится выбирать что-то одно, чтобы стать настоящим экспертом. В этом году я выбрал Structured Streaming, чтобы понимать, что творится на уровне его исходников и оперативно решать возникающие проблемы.
— Зачем разработчику учиться работать со Spark?
— Три года назад, если ты хотел заниматься Big Data, ты должен был кровь из носу уметь разворачивать Hadoop, настраивать его, писать ручками кровавые MapReduce джобы и т.д. Теперь столь же важно знание Apache Spark. Хотя и сейчас на собеседовании любого Big Data-инженера все равно будут гонять по Hadoop. Но, может, уже не так тщательно, и не станут требовать опыта боевого использования.
Если под Hadoop долго и мучительно выходили интеграционные мостики с другими форматами данных, платформами, фреймворками, то в случае Spark мы видим другую ситуацию. Комьюнити, которое его разрабатывает, наперегонки соревнуется за честь подключить очередную NoSQL базу данных, написав для нее коннектор.
Это приводит к тому, что многие крупные компании обращают внимание на Spark и проводят и миграцию на него: там реализовано большинство их пожеланий. Раньше они копировали Hadoop в общих деталях, при этом у них были свои изюминки, связанные с поддержкой дополнительных операций, какого-то внутреннего оптимизатора и т.д.
— Есть еще Spark-зоопарк. Что можно делать с помощью него?
— Во-первых, Spark-зоопарк помогает быстро строить отчеты, извлекать факты, агрегаты из большого количества как статично лежащих данных, так и стремительно втекающих в ваш Data Lake.
Во-вторых, он решает проблему интеграции машинного обучения и распределенных данных, которые размазаны по кластеру и обсчитываются параллельно. Это делается достаточно легко, причем за счет R- и Python-коннекторов возможностями Spark могут пользоваться дата-сайентисты, которые максимально далеки от проблем построения высокопроизводительных бэкэндов.
В-третьих, он справляется с проблемой интеграции всего со всем. Все пишут Spark-коннекторы. Spark можно использовать как быстрый фильтр для уменьшения размерности входных данных. Например, перегонять, фильтруя и агрегируя поток из Kafka, складывая его в MySQL, почему нет?
— А есть проблемы, с которыми Spark не может справиться?
— Конечно есть, ведь мы все-таки не на ярмарке фреймворков, чтобы я вам продал идеальный молоток, которым можно красить стены. Если говорить о том же машинном обучении, работы по построению идеального фреймворка еще ведутся. Ломается много копий по конечному дизайну API, часть алгоритмов не распараллеливается (есть только статьи и имплементации по однопоточному варианту).
Есть определенная проблема в том, что в Spark Core уже сменились три витка API: RDD, DataFrame, DataSet. Многие компоненты до сих пор построены на RDD (я имею в виду Streaming, большинство алгоритмов MLlib, обработку больших графов).
— Что скажешь о новых фреймворках Spark?
— Все они пока недостаточно хороши, чтобы использовать в продакшене. Самый готовый сейчас – Structured Streaming, который вышел из экспериментального подполья. Но в нем пока нельзя, например, сделать join двум потокам. Приходится делать кувырок назад и писать на миксе DStreams/DataFrames. Зато почти нет проблем с тем, что разработчики ломают API от версии к версии. Тут все достаточно спокойно, и код, написанный на Spark пару лет назад, будет работать и теперь с небольшими изменениями.
— Куда движется Spark? Какие задачи он сможет решать в ближайшем будущем?
— Spark движется к тотальному квадратно-гнездовому восприятию действительности а-ля DataFrame везде, для всех компонент. Это позволит безболезненно удалить поддержку RDD в Spark 3.0 и полностью сосредоточиться на движке для оптимизации того SparkAssembler, в который превращается ваш верxнеуровневый набор операций над табличками. Spark идет по пути сильной интеграции с DeepLearning, в частности, силами проекта TensorFrames.
— Чего ждать через год, например?
— Я думаю, в 2018 году станет больше, чем сейчас, инструментов мониторинга, деплоя и прочих сервисов, которые будут предлагать «Spark-кластер за один клик с полной интеграцией со всем подряд и визуальным конструктором» за разумные деньги или даже слегка бесплатно – только с оплатой времени серверов.
— На Youtube есть много много роликов, как поставить Spark в два клика, но мало материалов о том, что делать дальше. Что посоветуешь?
— Я могу порекомендовать несколько ресурсов:
- Databricks блог (eng) — основной источник информации
- Mastering Apache Spark 2 (eng) — наиболее полный GitBook по всем аспектам Spark в стиле тех.документации
- Обработка данных на Spark 2.2 и Kafka 0.10 (рус) — практические кейсы
- BigData/Hadoop/Spark видео (рус) — набор моих видео с различных конференций
- Spark Summit видео (eng) — фестиваль спарководоводов со всего мира.
— Разработчикам какого уровня стоит осваивать Spark?
— Посадить писать код на Spark можно, конечно, и человека, имеющего пару лаб на Pascal или Python. «Hello World» он сможет запустить без проблем, но зачем это ему?
Мне кажется, изучать Spark будет полезно разработчикам, которые уже поработали в «кровавом ынтерпрайзе», пописали бэкэнды, хранимые процедуры. То же самое – о тех, у кого есть солидный опыт настройки СУБД и оптимизации запросов, кто еще не забыл еще курс Computer Science, кому нравится думать, как обрабатывать данные, понижая константу в оценке трудоемкости того или иного алгоритма. Если вы тимлидите уже несколько лет, и «ковыряться в исходниках» – не ваше, лучше пройти мимо Spark.
— Можно ли освоить Spark в домашних условиях?
— Стартовать можно и с ноутбуком, на котором стоит хотя бы 8Gb RAM и пара ядер. Достаточно поставить IDEA Community Edition + Scala Plugin + Sbt (можно и Maven), закинуть пару зависимостей и вперед. Это будет работать даже под Windows, но, конечно, лучше сразу все раскатывать под Ubuntu/CentOS.
После этого можно развернуть в облаке небольшой кластер Spark для какого-то проекта со сбором данных в Сети или для обработки какого-либо открытого датасета с github.com/caesar0301/awesome-public-datasets. Ну и читать мой GitBook, конечно.
— С какими трудностями обычно сталкиваются при работе со Spark?
— То, что работает на небольшом наборе данных (методы тестирования и какие-то настройки JVM), часто ведет себя иначе на больших хипах в продакшене.
Еще одна трудность для Java-разработчика заключается в том, что нужно изучать Scala. Большая часть кодовой базы и сигнатур функций требует навыков чтения Scala-кода со словарем. Впрочем, это приятная трудность.
И последняя по порядку, но не по значимости сложность – даже Pet Project на «небольшом кластере» и «средней руки датасете» обходится очень дорого. Счета за Amazon возрастают по сравнению с web-поделками для осовоения очередного Java-фреймворка.
9 сентября в Петербурге я проведу тренинг по Apache Spark для Java-разработчиков. Поделюсь своим опытом и расскажу, какие компоненты Spark стоит использовать сразу, как настроить окружение, построить свой процесс ETL, как работать с новейшей версией Spark и не только.
Автор: AliceMir