Зачем разработчикам изучать Spark? Как освоить технологию в домашних условиях? Что умеет, а чего не умеет Spark и что ждет его в будущем? Об этом – в интервью с тренером по Java и Big Data в ЕРАМ Алексеем Зиновьевым.


image — Ты тренер по 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 в два клика, но мало материалов о том, что делать дальше. Что посоветуешь?

— Я могу порекомендовать несколько ресурсов:


— Разработчикам какого уровня стоит осваивать 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 и не только.

Комментарии (9)


  1. kxl
    21.08.2017 19:30
    +2

    Чтобы прочувствовать как работает спарк нужны источники в несколько терабайт, желательно на разных компьютерах. Всё, что помещается на один — лучше, зачастую, быстрее обрабатывать другими средствами. А scala — язык, более выразительный, чем java. Даже без спарка следует ознакомиться с ним… Да, для spark можно писать и на python, но там есть свои ограничения — например, коллегии столкнулись с тем, что для DataFrame нет метода map — только для rdd.


    1. zaleslaw
      21.08.2017 21:00

      Чтобы прочувствовать, да, так и есть, можно даже петабайты взять, хотя вы самостоятельно можете себе урезать выч.ресурсы и все будет почти тоже самое (например взять кластер из 8 ядерных машинок по 16GB). Особо большого выигрыша от уборки хипа в десятки GB тут и нет.

      А чтобы освоить Spark API на базовом уровне, до того как тебя подпустят к терабайтам и петабайтам — вполне хватит самостоятельной работы с опорой на источнике.

      Согласитесь, подпускать к драгоценным терабайтам бойца, который не знает что такое Parquet и пытается сам оптимизировать руками набор операций над DataFrame-ом — не стоит, пусть подучит матчасть.

      Про Python — не знал про ограничения API, впрочем обычная ситуация, когда Scala API уехало вперед.


      1. kxl
        21.08.2017 22:15

        Для чтения, то почему бы не подпустить сразу? Чтобы не было иллюзий о том что сервер будет намного мощнее…


        1. zaleslaw
          22.08.2017 12:47

          С точки зрения сохранности драгоценных петабайт — да, с точки зрения того, что и чтение может быть неэффективным и сканить все и быть CPU Burst на нашем едином кластере — пусть учатся на локальны машинка вместо 2 Гб занимать 1 Гб, как вы считаете?


          1. kxl
            22.08.2017 14:16

            так ведь и ресурсы ограничить можно на таску, при запуске spark-submit


  1. pak63
    22.08.2017 06:44
    +1

    Есть хороший плагин Azure Toolkit for IntelliJ. Внутри уже есть готовые примеры (SBT и Maven). Можно заранее выбрать версию Apache Spark, зависимости будут прописаны.
    Пока в плагине отсутствует возможность для сабмита готовых приложений из IDEA на свои локальные кластера (пока только для кластеров в Azure). Плагин позволяет быстрее познакомить с Apache Spark и написать простое приложение на Scala или Java. Eclipce версия тоже существует.


    1. zaleslaw
      22.08.2017 12:45

      Спасибо, буду пробовать, понравится — буду рекомендовать. Но в целом, уверенному в себе Java-разрабу, собрать скелет проекта с Sbt и найти верные зависимости в maven central будет более чем полезно, как вы считаете?


      1. kxl
        22.08.2017 14:20

        можно и maven проект использовать — никто на sbt не настаивает. спарку нужна конечная сборка (jar) а чем вы там её собирали — пофиг


  1. ov7a
    23.08.2017 10:53

    Это позволит безболезненно удалить поддержку RDD в Spark 3.0

    Хотелось бы пруфов. Да, MLib отказываются от rdd, но о подтверждений того, что от rdd откажутся в core (или хотя бы думают над этим) я не смог найти.