SlideShare a Scribd company logo
Архитектура Apache Spark
Архитектура Apache Spark
Владимир Штанько, Rambler&Co
v.shtanko@rambler-co.ru
Архитектура Apache Spark
Архитектура Apache Spark
Resilient
Distributed
Dataset
rdd1.join(rdd2)
.groupby(...)
.filter(...)
Архитектура Apache Spark
Архитектура Apache Spark
Архитектура Apache Spark
Архитектура Apache Spark
• RDD – низкоуровневый API без оптимизаций
• DataSet – RDD с организацией данных в поименованные колонки
• DataFrame – DataSet[Row]
• Tungsten Execution Backend
Архитектура Apache Spark
Transformations:
.map
.filter
.distinct
.reduceByKey
.union
.intersection
.cartesian
Actions:
.save
.collect
.take
.count
Архитектура Apache Spark
Архитектура Apache Spark
rdd1 = sc.parallelize(["one", "two",
"three", 'five'])
rdd2 = sc.parallelize(["two", "three",
"four", 'five'])
rdd1 = rdd1.map(lambda x: (x, len(x)))
rdd2 = rdd2.map(lambda x: (x, len(x)))
rdd1 = rdd1.filter(lambda x: x[1] > 3)
rdd2 = rdd2.filter(lambda x: x[1] > 3)
rdd1 = rdd1.join(rdd2)
rdd1 = rdd1.filter(lambda x: len(x[0]) > 4)
rdd1.collect()
Архитектура Apache Spark

More Related Content

PPTX
Минуты из жизни со Spark
PPTX
Декларативные даги в Apache Airflow
PPTX
Пайплайн машинного обучения на Apache Spark
PPTX
Динамическая аллокация ресурсов или как жить в условиях общежития?
PDF
Антон Галицын
PDF
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
PPTX
Масштабирование и отказоустойчивость с Nginx
PDF
2020.10.13 HA Redis is simple. FWDays Highload
Минуты из жизни со Spark
Декларативные даги в Apache Airflow
Пайплайн машинного обучения на Apache Spark
Динамическая аллокация ресурсов или как жить в условиях общежития?
Антон Галицын
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
Масштабирование и отказоустойчивость с Nginx
2020.10.13 HA Redis is simple. FWDays Highload

What's hot (20)

PDF
Вячеслав Бахмутов
PDF
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
PPTX
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
PDF
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
PDF
Юрий Насретдинов, Badoo
PDF
Apache Kafka and stream processing peculiarities [ru]
PDF
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
PDF
Облако в Badoo год спустя
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PPTX
Антон Турецкий
PDF
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
PDF
Архитектура хранения фотографий в Badoo
PDF
Алексей Федоров
PDF
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
PDF
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
PDF
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
PPTX
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
PPTX
Apache Ignite.NET в действии
PPTX
Drupal 8 и хостинг
Вячеслав Бахмутов
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Юрий Насретдинов, Badoo
Apache Kafka and stream processing peculiarities [ru]
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Облако в Badoo год спустя
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Антон Турецкий
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Архитектура хранения фотографий в Badoo
Алексей Федоров
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
Apache Ignite.NET в действии
Drupal 8 и хостинг
Ad

Similar to Архитектура Apache Spark (20)

PDF
Expert Fridays Spark Job
PDF
Spark overview (18.06.2015)
PDF
14 - Hadoop. Фреймворк Spark
PDF
Apache spark
PDF
Лекция 12. Spark
PDF
13 - Hadoop. Парадигма Spark
PPTX
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
PPTX
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...
PDF
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
PDF
мифы о спарке
PDF
Spark: нетипичные примеры использования
PDF
Apache Spark — Егор Пахомов
PPTX
OpenACC short review
PDF
Scala, SBT & Play! for Rapid Application Development
PDF
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
PDF
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
PPTX
3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )
PPTX
Расширение библиотеки Slick
PDF
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Expert Fridays Spark Job
Spark overview (18.06.2015)
14 - Hadoop. Фреймворк Spark
Apache spark
Лекция 12. Spark
13 - Hadoop. Парадигма Spark
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
мифы о спарке
Spark: нетипичные примеры использования
Apache Spark — Егор Пахомов
OpenACC short review
Scala, SBT & Play! for Rapid Application Development
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )
Расширение библиотеки Slick
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Ad

Архитектура Apache Spark

Editor's Notes

  • #2: Всем добрый день, меня зовут Вова Штанько, я – математик-разработчик в компании Рамблер. Сегодня я и мой коллега Костя Колоколов постараемся рассказать вам про то, как поднять свой скилл программирования на Спарк. Для этого мы разбили наш рассказ на две части. Я кратко напомню вам про то, как устроен Спарк. Костя же уделит внимание всяческим «фишкам», ускоряющим работу и «подводным камням», которые стоит обходить.
  • #3: Вот на этой картинке показана схема работы на Spark. Предположим, у нас есть код, который мы хотим исполнить. Для этого в первую очередь нам нужен драйвер. На драйвере (это процесс, где запускается main() существующий на какой—то машине в сети, пользовательской или не очень), исходя из конфигурации кластера создается SparkContext, который является точкой входа в систему. Через spark context код попадает на Cluster Manager, который может быть разный, например, Yarn, Mezos или standalone. На рабочих нодах запускаются отдельные процессы, которые исполняют код на выделенных им кусках данных. Потом результаты вычислений собираются обратно на драйвер, если есть такая нужда, или сохраняются в HDFS. Я думаю, здесь стоит упомянуть, что Спарк исполняется на JVM со всеми вытекающими последствиями, а именно настройкой JVM на самих нодах и драйвере, настройкой GC для оптимальной работы, а также возможностью использовать такие инструменты как jstack или visualvm для мониторинга, оптимизации и дебага.
  • #4: Основной абстракцией, или интерфейсом при работе со Спарком является RDD, или resilient distributed dataset. Почему именно так называется? Dataset – это коллекция, которая может содержать в меру произвольные элементы, но одного типа. Distributed говорит о том, что элементы одной RDD могут находиться на разных машинах. Resilient – о том, что каждая RDD содержит информацию о том, как она может быть пересчитана заново из исходных данных, если что-то пойдет не так. Кроме того, у RDD есть еще ряд свойств, которые частично связаны с тем, что Spark использует элементы функциональной парадигмы программирования.
  • #5: Первая из них - immutability, или неизменяемость РДД. Нельзя внести изменения в существующую РДД – можно только создать новую. Это облегчает пересчет РДД в случае, если что-то пойдет не так.
  • #6: Второе свойство – lazy evaluation, или отложенные вычисления. Вычисления РДД будут производиться только тогда, когда они понадобятся, и только в том количестве, которое потребуется. Впереди еще будет несколько примеров, поэтому если кто-то не знаком с этим понятием, дальше станет понятнее.
  • #7: Третье свойство – partitioned, или партицирование. Как уже говорилось ранее, РДД являются распределенными. Партицирование – это принцип их распределения. Он может быть банальным – случайным или по близости к данным, или более хитрым – например RDD имен можен быть партицирован по первой букве имени. Это может помочь оптимизировать скорость вычислений и об этом вам еще подробнее расскажет Костя.
  • #8: Кроме RDD, современный Спарк (от версии 1.6 и выше) содержит еще два API, более высокоуровневых. Это DataSet и DataFrame. Они доступны из библиотеки SparkSql. Их использование позволяет добиться повышения производительности за счет встроенных оптимизаторов, плюс интерфейс DataFrame пытается максимально эмулировать интерфейс привычных DataFrame из Pandas или R. Как правило, для работы с машинным обучением и аналитикой используются в основном DataFrame. Кроме того, из PySpark в принципе не доступен DataSet.  Когда работа идет со Spark Sql, к процессу старта задачи, который я показывал на одном из первых слайдов, добавляется еще вот этот пайплайн. Здесь происходит трансформация запроса в Sql в RDD, и его оптимизация.
  • #9: Теперь давайте перейдем к специфике программирования на Спарк. В ней есть две большие разницы: первая разница – это разница между трансформациями и действиями, а вторая – разница между узкими и широкими трансформациями. Про первую. Как проявление парадигмы lazy valuation вычисления в Spark начинаются только тогда, когда непосредственно вызывается какой-либо action. До этого момента мы можем заявить произвольное количество трансформаций, они встанут в условную «очередь», но выполнены не будут.
  • #10: Shuffle – это перемещение данных между executor’ами. В лучшем случае – это межпроцессная коммуникация, в редком случае когда мы работаем на одной машине. Чаще – это одновременно сетевая и дисковая операция. Она дорогая, поэтому их число необходимо минимизировать, а по возможности – избегать. Вот примеры широких и узких трансформаций. Об оптимизации shuffle вам еще расскажет Костя. А я постараюсь показать вам нагляднее, как все это выглядит с точки зрения исполнения задачи.
  • #11: Предположим у нас есть вот такой тривиальный код.
  • #12: Отдельно несколько слов про PySpark.