Зачем изучать Spark?

    Зачем разработчикам изучать 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 и не только.
    • +13
    • 11,3k
    • 9
    EPAM 94,26
    Компания
    Поделиться публикацией
    Похожие публикации
    Комментарии 9
    • +2
      Чтобы прочувствовать как работает спарк нужны источники в несколько терабайт, желательно на разных компьютерах. Всё, что помещается на один — лучше, зачастую, быстрее обрабатывать другими средствами. А scala — язык, более выразительный, чем java. Даже без спарка следует ознакомиться с ним… Да, для spark можно писать и на python, но там есть свои ограничения — например, коллегии столкнулись с тем, что для DataFrame нет метода map — только для rdd.
      • 0
        Чтобы прочувствовать, да, так и есть, можно даже петабайты взять, хотя вы самостоятельно можете себе урезать выч.ресурсы и все будет почти тоже самое (например взять кластер из 8 ядерных машинок по 16GB). Особо большого выигрыша от уборки хипа в десятки GB тут и нет.

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

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

        Про Python — не знал про ограничения API, впрочем обычная ситуация, когда Scala API уехало вперед.
        • 0
          Для чтения, то почему бы не подпустить сразу? Чтобы не было иллюзий о том что сервер будет намного мощнее…
          • 0
            С точки зрения сохранности драгоценных петабайт — да, с точки зрения того, что и чтение может быть неэффективным и сканить все и быть CPU Burst на нашем едином кластере — пусть учатся на локальны машинка вместо 2 Гб занимать 1 Гб, как вы считаете?
            • 0
              так ведь и ресурсы ограничить можно на таску, при запуске spark-submit
      • +1
        Есть хороший плагин Azure Toolkit for IntelliJ. Внутри уже есть готовые примеры (SBT и Maven). Можно заранее выбрать версию Apache Spark, зависимости будут прописаны.
        Пока в плагине отсутствует возможность для сабмита готовых приложений из IDEA на свои локальные кластера (пока только для кластеров в Azure). Плагин позволяет быстрее познакомить с Apache Spark и написать простое приложение на Scala или Java. Eclipce версия тоже существует.

        • 0
          Спасибо, буду пробовать, понравится — буду рекомендовать. Но в целом, уверенному в себе Java-разрабу, собрать скелет проекта с Sbt и найти верные зависимости в maven central будет более чем полезно, как вы считаете?
          • 0
            можно и maven проект использовать — никто на sbt не настаивает. спарку нужна конечная сборка (jar) а чем вы там её собирали — пофиг
        • 0
          Это позволит безболезненно удалить поддержку RDD в Spark 3.0

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

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое