SlideShare a Scribd company logo
13 - Hadoop. Парадигма Spark
Преимущества Spark
• Следующая ступень в обработке BigData:
– Итеративные задачи
– Интерактивная аналитика
• Может работать с разными типами данных (текст,
графы, базы данных)
• Может обрабатывать данные по частям (batch) и в
потоке (streaming)
• Имеет 80 высокоуровневых функций для обработки
данных (кроме map и reduce)
Недостатки MapReduce
Нет эффективных примитивов для общих данных
Input Iter 1
HDFS
Read
HDFS
Write
Iter 2
HDFS
Read
HDFS
Write
HDFS
Read
Недостатки MapReduce
Необходимость применять шаблон MapReduce
Map Reduce Reduce ReduceInput Output
Map Reduce Reduce ReduceInput OutputMap Map
In-Memory Data Processing and Sharing
Input Iter 1
HDFS
Read
HDFS
Write
Iter 2
HDFS
Read
HDFS
Write
HDFS
Read
Input Iter 1
HDFS
Read
Iter 2RAM RAM
Input
Query 1 Result 1
Query 1 Result 1
Query 1 Result 1
Query 1 Result 1
Query 1 Result 1
Query 1 Result 1
Input RAM
Resilient Distributed Datasets (RDD)
• Абстрактное представление распределенной RAM
• RDD делится на партиции, которые являются
атомарными частями информации
• Партиции RDD хранятся на различных серверах
• Над RDD можно производить операции
• При этом сами RDD остаются неизменными
(immutable)
Программная модель Spark
 Основана на parallelizable operators
 Поток обработки данных состоит из любого
числа data sources, operators и data sinks
путем соединения их inputs и outputs
Directed Acyclic Graph (DAG)
Higher-Order Functions
• Существует два типа RDD операторов:
– transformations
– actions
• Transformations: lazy-операторы, которые
создают новые RDD
• Actions: запускают вычисления и возвращают
результат в программу или во внешнее
хранилище
13 - Hadoop. Парадигма Spark
RDD Transformations - Map
// passing each element through a function.
val nums = sc.parallelize(Array(1, 2, 3))
val squares = nums.map(x => x * x) // {1, 4, 9}
// selecting those elements that func returns true.
val even = squares.filter(x => x % 2 == 0) // {4}
// mapping each element to zero or more others.
nums.flatMap(x => Range(0, x, 1)) // {0, 0, 1, 0, 1, 2}
Все пары обрабатываются независимо
RDD Transformations - Reduce
val pets = sc.parallelize(
Seq(("cat", 1), ("dog", 1), ("cat", 2)))
pets.reduceByKey((x, y) => x + y)
// {(cat, 3), (dog, 1)}
pets.groupByKey()
// {(cat, (1, 2)), (dog, (1))}
Пары с одинаковыми ключами группируются
Группы обрабатываются независимо
RDD Transformations - Join
val visits = sc.parallelize(
Seq(("index.html", "1.2.3.4"),
("about.html", "3.4.5.6"),
("index.html", "1.3.3.1")))
val pageNames = sc.parallelize(
Seq(("index.html", "Home"),
("about.html", "About")))
visits.join(pageNames)
// ("index.html", ("1.2.3.4", "Home"))
// ("index.html", ("1.3.3.1", "Home"))
// ("about.html", ("3.4.5.6", "About"))
RDD Transformations - CoGroup
val visits = sc.parallelize(
Seq(("index.html","1.2.3.4"),
("about.html", "3.4.5.6"),
("index.html", "1.3.3.1")))
val pageNames = sc.parallelize(
Seq(("index.html", "Home"),
("about.html", "About")))
visits.cogroup(pageNames)
// ("index.html", (("1.2.3.4", "1.3.3.1"), ("Home")))
// ("about.html", (("3.4.5.6"), ("About")))
Каждый input группируется по ключу
Группы с одинаковыми ключами обрабатываются вместе
RDD Transformations - Union и Sample
Union: объединяет два RDD, дубликаты не удаляются
Sample: выбирает произвольную часть данных
(детерминировано)
RDD Actions
Возвращает все элементы RDD в виде массива
Возвращает массив с первыми n элементами RDD
Возвращает число элементов в RDD
val nums = sc.parallelize(Array(1, 2, 3))
nums.collect() // Array(1, 2, 3)
nums.take(2) // Array(1, 2)
nums.count() // 3
RDD Actions
Агрегирует элементы RDD используя заданную функцию:
Записывает элементы RDD в виде текстового файла:
nums.reduce((x, y) => x + y)
// или
nums.reduce(_ + _) // 6
nums.saveAsTextFile("hdfs://file.txt")
SparkContext
 Основная точка входа для работы со Spark
 Доступна в shell как переменная sc
 В Java необходимо создавать отдельно
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
val sc = new SparkContext(master, appName,
[sparkHome], [jars])
Создание RDD
Преобразовать коллекцию в RDD:
Загрузить текст из локальной FS, HDFS или S3:
val a = sc.parallelize(Array(1, 2, 3))
val a = sc.textFile("file.txt")
val b = sc.textFile("directory/*.txt")
val c = sc.textFile("hdfs://namenode:9000/path/file")
Пример
Посчитать число строк содержащих MAIL
val file = sc.textFile("hdfs://...")
val sics = file.filter(_.contains("MAIL"))
val cached = sics.cache()
val ones = cached.map(_ => 1)
val count = ones.reduce(_+_)
val file = sc.textFile("hdfs://...")
val count = file.filter(_.contains(“MAIL")).count()
Shared Variables
Есть два типа shared variables
– broadcast variables
– accumulators
Shared Variables: Broadcast Variables
• Read-only переменные кешируются на каждой машине
• Не отсылаются на ноду больше одного раза
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: spark.Broadcast[Array[Int]] =
spark.Broadcast(b5c40191-...)
scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)
Shared Variables: Accumulators
• Могут быть только добавлены
• Могут использоваться для реализации счетчиков
scala> val accum = sc.accumulator(0)
accum: spark.Accumulator[Int] = 0
scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
...
scala> accum.value
res2: Int = 10

More Related Content

PDF
06 - Hadoop. Java API и Hadoop Streaming
PDF
14 - Hadoop. Фреймворк Spark
PDF
09 - Hadoop. Pig
PDF
08 - Hadoop. Алгоритмы на графах в MapReduce
PDF
Лекция 12. Spark
PDF
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
PDF
Apache spark
PDF
Опыт использования Spark, Основано на реальных событиях
06 - Hadoop. Java API и Hadoop Streaming
14 - Hadoop. Фреймворк Spark
09 - Hadoop. Pig
08 - Hadoop. Алгоритмы на графах в MapReduce
Лекция 12. Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
Apache spark
Опыт использования Spark, Основано на реальных событиях

What's hot (20)

PDF
Лекция 13. YARN
PDF
Spark: нетипичные примеры использования
PDF
Разработка на Perl под Raspberry PI
PDF
Лекция 10. Apache Mahout
PDF
Apache Spark — Егор Пахомов
PPT
Hadoop implementation in Wikimart
PDF
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
PDF
Лекция 2. Основы Hadoop
PDF
Big Data и Ruby
ODP
Hacking PostgreSQL. Физическое представление данных
PDF
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
PDF
Расширения для PostgreSQL
PDF
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
PDF
Hacking PostgreSQL. Разделяемая память и блокировки.
PDF
Hacking PostgreSQL. Обзор исходного кода
PDF
PDF
Лекция 6. MapReduce в Hadoop (графы)
PDF
Hadoop presentation
PDF
PiterPy#3. DSL in Python. How and why?
Лекция 13. YARN
Spark: нетипичные примеры использования
Разработка на Perl под Raspberry PI
Лекция 10. Apache Mahout
Apache Spark — Егор Пахомов
Hadoop implementation in Wikimart
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Лекция 2. Основы Hadoop
Big Data и Ruby
Hacking PostgreSQL. Физическое представление данных
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Расширения для PostgreSQL
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
MyRocks: табличный движок для MySQL на основе RocksDB
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Обзор исходного кода
Лекция 6. MapReduce в Hadoop (графы)
Hadoop presentation
PiterPy#3. DSL in Python. How and why?
Ad

Similar to 13 - Hadoop. Парадигма Spark (20)

PDF
Expert Fridays Spark Job
PDF
Scala for android
PPT
Интеграция Яндекс Сервер
PDF
Лекция 4. MapReduce в Hadoop (введение)
PPT
Использование Sedna в WEB
PPT
XML Native Database на примере SednaXML
PDF
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
PPTX
Scala для всех (РИФ 2015)
PDF
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
PDF
UWDC 2013, Yii2
PDF
MongoDB@addconf
PDF
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
PPTX
PDF
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PPTX
Расширение библиотеки Slick
PPT
SAMag2007 Conference: PostgreSQL 8.3 presentation
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PPT
LDAP in infrastructure (RootConf 2009)
PDF
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
PPTX
неделя науки
Expert Fridays Spark Job
Scala for android
Интеграция Яндекс Сервер
Лекция 4. MapReduce в Hadoop (введение)
Использование Sedna в WEB
XML Native Database на примере SednaXML
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Scala для всех (РИФ 2015)
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
UWDC 2013, Yii2
MongoDB@addconf
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
Расширение библиотеки Slick
SAMag2007 Conference: PostgreSQL 8.3 presentation
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
LDAP in infrastructure (RootConf 2009)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
неделя науки
Ad

More from Roman Brovko (20)

PDF
Individual task Networking
PPTX
Networking essentials lect3
PPTX
Gl embedded starterkit_ethernet
PPTX
Networking essentials lect2
PPTX
Networking essentials lect1
PPTX
Bare metal training_07_spi_flash
PPTX
Bare metal training_06_I2C
PPTX
Glesk worshop
PPTX
Bare metal training_05_uart
PPTX
Bare metal training_04_adc_temp_sensor
PPTX
Bare metal training_03_timers_pwm
PPTX
Bare metal training_02_le_ds_and_buttons
PPTX
Bare metal training_01_hello_world
PPTX
Bare metal training_00_prerequisites
PPTX
C language lect_23_advanced
PPTX
C language lect_22_advanced
PPTX
C language lect_21_advanced
PPTX
подготовка рабочего окружения
PPTX
C language lect_20_advanced
PPTX
C language lect_19_basics
Individual task Networking
Networking essentials lect3
Gl embedded starterkit_ethernet
Networking essentials lect2
Networking essentials lect1
Bare metal training_07_spi_flash
Bare metal training_06_I2C
Glesk worshop
Bare metal training_05_uart
Bare metal training_04_adc_temp_sensor
Bare metal training_03_timers_pwm
Bare metal training_02_le_ds_and_buttons
Bare metal training_01_hello_world
Bare metal training_00_prerequisites
C language lect_23_advanced
C language lect_22_advanced
C language lect_21_advanced
подготовка рабочего окружения
C language lect_20_advanced
C language lect_19_basics

13 - Hadoop. Парадигма Spark

  • 2. Преимущества Spark • Следующая ступень в обработке BigData: – Итеративные задачи – Интерактивная аналитика • Может работать с разными типами данных (текст, графы, базы данных) • Может обрабатывать данные по частям (batch) и в потоке (streaming) • Имеет 80 высокоуровневых функций для обработки данных (кроме map и reduce)
  • 3. Недостатки MapReduce Нет эффективных примитивов для общих данных Input Iter 1 HDFS Read HDFS Write Iter 2 HDFS Read HDFS Write HDFS Read
  • 4. Недостатки MapReduce Необходимость применять шаблон MapReduce Map Reduce Reduce ReduceInput Output Map Reduce Reduce ReduceInput OutputMap Map
  • 5. In-Memory Data Processing and Sharing Input Iter 1 HDFS Read HDFS Write Iter 2 HDFS Read HDFS Write HDFS Read Input Iter 1 HDFS Read Iter 2RAM RAM
  • 6. Input Query 1 Result 1 Query 1 Result 1 Query 1 Result 1
  • 7. Query 1 Result 1 Query 1 Result 1 Query 1 Result 1 Input RAM
  • 8. Resilient Distributed Datasets (RDD) • Абстрактное представление распределенной RAM • RDD делится на партиции, которые являются атомарными частями информации • Партиции RDD хранятся на различных серверах • Над RDD можно производить операции • При этом сами RDD остаются неизменными (immutable)
  • 9. Программная модель Spark  Основана на parallelizable operators  Поток обработки данных состоит из любого числа data sources, operators и data sinks путем соединения их inputs и outputs
  • 11. Higher-Order Functions • Существует два типа RDD операторов: – transformations – actions • Transformations: lazy-операторы, которые создают новые RDD • Actions: запускают вычисления и возвращают результат в программу или во внешнее хранилище
  • 13. RDD Transformations - Map // passing each element through a function. val nums = sc.parallelize(Array(1, 2, 3)) val squares = nums.map(x => x * x) // {1, 4, 9} // selecting those elements that func returns true. val even = squares.filter(x => x % 2 == 0) // {4} // mapping each element to zero or more others. nums.flatMap(x => Range(0, x, 1)) // {0, 0, 1, 0, 1, 2} Все пары обрабатываются независимо
  • 14. RDD Transformations - Reduce val pets = sc.parallelize( Seq(("cat", 1), ("dog", 1), ("cat", 2))) pets.reduceByKey((x, y) => x + y) // {(cat, 3), (dog, 1)} pets.groupByKey() // {(cat, (1, 2)), (dog, (1))} Пары с одинаковыми ключами группируются Группы обрабатываются независимо
  • 15. RDD Transformations - Join val visits = sc.parallelize( Seq(("index.html", "1.2.3.4"), ("about.html", "3.4.5.6"), ("index.html", "1.3.3.1"))) val pageNames = sc.parallelize( Seq(("index.html", "Home"), ("about.html", "About"))) visits.join(pageNames) // ("index.html", ("1.2.3.4", "Home")) // ("index.html", ("1.3.3.1", "Home")) // ("about.html", ("3.4.5.6", "About"))
  • 16. RDD Transformations - CoGroup val visits = sc.parallelize( Seq(("index.html","1.2.3.4"), ("about.html", "3.4.5.6"), ("index.html", "1.3.3.1"))) val pageNames = sc.parallelize( Seq(("index.html", "Home"), ("about.html", "About"))) visits.cogroup(pageNames) // ("index.html", (("1.2.3.4", "1.3.3.1"), ("Home"))) // ("about.html", (("3.4.5.6"), ("About"))) Каждый input группируется по ключу Группы с одинаковыми ключами обрабатываются вместе
  • 17. RDD Transformations - Union и Sample Union: объединяет два RDD, дубликаты не удаляются Sample: выбирает произвольную часть данных (детерминировано)
  • 18. RDD Actions Возвращает все элементы RDD в виде массива Возвращает массив с первыми n элементами RDD Возвращает число элементов в RDD val nums = sc.parallelize(Array(1, 2, 3)) nums.collect() // Array(1, 2, 3) nums.take(2) // Array(1, 2) nums.count() // 3
  • 19. RDD Actions Агрегирует элементы RDD используя заданную функцию: Записывает элементы RDD в виде текстового файла: nums.reduce((x, y) => x + y) // или nums.reduce(_ + _) // 6 nums.saveAsTextFile("hdfs://file.txt")
  • 20. SparkContext  Основная точка входа для работы со Spark  Доступна в shell как переменная sc  В Java необходимо создавать отдельно import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ val sc = new SparkContext(master, appName, [sparkHome], [jars])
  • 21. Создание RDD Преобразовать коллекцию в RDD: Загрузить текст из локальной FS, HDFS или S3: val a = sc.parallelize(Array(1, 2, 3)) val a = sc.textFile("file.txt") val b = sc.textFile("directory/*.txt") val c = sc.textFile("hdfs://namenode:9000/path/file")
  • 22. Пример Посчитать число строк содержащих MAIL val file = sc.textFile("hdfs://...") val sics = file.filter(_.contains("MAIL")) val cached = sics.cache() val ones = cached.map(_ => 1) val count = ones.reduce(_+_) val file = sc.textFile("hdfs://...") val count = file.filter(_.contains(“MAIL")).count()
  • 23. Shared Variables Есть два типа shared variables – broadcast variables – accumulators
  • 24. Shared Variables: Broadcast Variables • Read-only переменные кешируются на каждой машине • Не отсылаются на ноду больше одного раза scala> val broadcastVar = sc.broadcast(Array(1, 2, 3)) broadcastVar: spark.Broadcast[Array[Int]] = spark.Broadcast(b5c40191-...) scala> broadcastVar.value res0: Array[Int] = Array(1, 2, 3)
  • 25. Shared Variables: Accumulators • Могут быть только добавлены • Могут использоваться для реализации счетчиков scala> val accum = sc.accumulator(0) accum: spark.Accumulator[Int] = 0 scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x) ... scala> accum.value res2: Int = 10