SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Áëåñê è íèùåòà
ðàñïðåäåëåííûõ
ñòðèìîâ
@gAmUssA @hazelcast #jbreak #hazelcastjet
http://bit.ly/streams_jbreak2017
@gAmUssA @hazelcast #jbreak #hazelcastjet
Solutions Architect
Developer Advocate
@gamussa в интернетах
А ты зафоловил меня в Twitter? ©
> Кто?
@gAmUssA @hazelcast #jbreak #hazelcastjet
О чем поговорим?
Стримы в Java 8
Распределяй и властвуй
Распределенные стримы
Как? Зачем?
@gAmUssA @hazelcast #jbreak #hazelcastjet
Пример: Считаем слова
Map<Integer, String>, где
ключ - номер строки, а
значение – строка из файла.
Сколько раз каждое слово встречается?
найти Top X слов *
@gAmUssA @hazelcast #jbreak #hazelcastjet
Что для этого надо?
Проходим по всем строкам в файле
Разбиваем строки на слова
Обновляем значение счетчика по
каждому слову
@gAmUssA @hazelcast #jbreak #hazelcastjet
Что будем считать?
fillMapWithData("pestni.txt", source);
for (String line : source.values()) {
for (String word : PATTERN.split(line)) {
if (word.length() >= 5)
counts.compute(
cleanWord(word).toLowerCase(),
(w, c) -> c == null ? 1L : c + 1
);
}
}
Проходим по всем строкам в файле
fillMapWithData("pestni.txt", source);
for (String line : source.values()) {
for (String word : PATTERN.split(line)) {
if (word.length() >= 5)
counts.compute(
cleanWord(word).toLowerCase(),
(w, c) -> c == null ? 1L : c + 1
);
}
}
Разбиваем строки на слова
fillMapWithData("pestni.txt", source);
for (String line : source.values()) {
for (String word : PATTERN.split(line)) {
if (word.length() >= 5)
counts.compute(
cleanWord(word).toLowerCase(),
(w, c) -> c == null ? 1L : c + 1
);
}
}
Обновляем значение счетчика по каждому слову
fillMapWithData("pestni.txt", source);
for (String line : source.values()) {
for (String word : PATTERN.split(line)) {
if (word.length() >= 5)
counts.compute(
cleanWord(word).toLowerCase(),
(w, c) -> c == null ? 1L : c + 1
);
}
}
java.util.stream
@gAmUssA @hazelcast #jbreak #hazelcastjet
Стримы в Java 8…
Абстракция для представления
последовательности элементов
Не является самостоятельной структурой
«проводят» элемент через конвейер
преобразований
Не меняют источника данных
@gAmUssA @hazelcast #jbreak #hazelcastjet
java.util.stream
map(), flatMap(), filter()
reduce(), collect()
sorted(), distinct()
Intermediate operation
Terminal operation
Stateful Intermediate (Blocking) operation
@gAmUssA @hazelcast #jbreak #hazelcastjet
Нельзя просто так взять… ©
Параллельное выполнение возможно только
внутри одного процесса JVM (читай
parallelStream)
Дизайн подразумевает локальные данные
Несериализуемые лямбды используются API
Результаты выполнения так же
несериализуемые
@gAmUssA @hazelcast #jbreak #hazelcastjet
А что если… ©
Параллельное выполнение межу
JVM процессами
Иметь распределенные данные
Поддержка сериализации лямбд
Сериализуемые результаты и
распределенные данные
http://cs.yale.edu/homes/xs45/pdf/ssgos-vldb2014.pdf
@gAmUssA @hazelcast #jbreak #hazelcastjet
Что нам стоит распределенный стрим
построить
Stream extends DistributedStream
DistributedStream extends Stream
Что-то еще?
@gAmUssA @hazelcast #jbreak #hazelcastjet
Why would one need a cluster?
@gAmUssA @hazelcast #jbreak #hazelcastjet
Problem
Data doesn’t fit just one machine
Данных слишком много,
чтобы они поместились
на одной машине
@gAmUssA @hazelcast #jbreak #hazelcastjet
Данные слишком важны,
чтобы хранить их на одной
машине
@gAmUssA @hazelcast #jbreak #hazelcastjet
Oracle Coherence
In-memory data grid
Распределенные кэши
RemoteStreams
Коммерческий продукт
@gAmUssA @hazelcast #jbreak #hazelcastjet
Oracle Coherence
Map<String, Integer> collect = source.stream()
.flatMap(m -> Stream.of(PATTERN.split(m.getValue())))
.map(String::toLowerCase)
.map(WordUtil::cleanWord)
.filter(m -> m.length() >= 5)
.collect(RemoteCollectors.toMap(ve1, ve2, Integer::sum));
@gAmUssA @hazelcast #jbreak #hazelcastjet
Infinispan
In-memory data grid
распределённые кэши
Куча всяких интеграций
Лицензия Apache v2
@gAmUssA @hazelcast #jbreak #hazelcastjet
Еще хотелки…
Простота
знакомый API
встраиваемость
Cloud Native
@gAmUssA @hazelcast #jbreak #hazelcastjet
Для тех кто в танке - Hazelcast IMDG
In-memory Data Grid
Бесплатно Apache v2
Распределенные
Кэши (IMap, JCache)
Java коллекции (IList, ISet, IQueue)
Обмен сообщениями (Topic, RingBuffer)
Вычисления (ExecutorService, M-R)
1 900 звездочек
GitHub
100%Open Source
134 контрибьютера
@gAmUssA @hazelcast #jbreak #hazelcastjet
Green
Primary
Green
Backup
Green
Shard
@gAmUssA @hazelcast #jbreak #hazelcastjet
Ну и в чем же проблема?
IMap.values().stream() ?
или
IMap.entrySet().stream() ?
4
5
@gAmUssA @hazelcast #jbreak #hazelcastjet
А ты не лопнешь, деточка ©?
OutOfMemoryError
4
8
Jet Streams
jet.hazelcast.org
@gAmUssA @hazelcast #jbreak #hazelcastjet
Что такое Jet?
Библиотека для распределенных
вычислений
Основана на описании модели с помощью
графа
Основана на Hazelcast IMDG
Будем сравнивать Spark or Flink
5
0
@gAmUssA @hazelcast #jbreak #hazelcastjet
DAG
vertex vertex
vertex vertex
SOURCE
SINK
@gAmUssA @hazelcast #jbreak #hazelcastjet
Исполнение графа
Каждая нода кластера исполняет граф
целиком
@gAmUssA @hazelcast #jbreak #hazelcastjet
Исполнение графа
Каждая нода кластера исполняет граф целиком
Каждая вершина графа исполняется набором
tasklet-ов
Ограниченное число «настоящих» потоком
~ кол-во процессоров
Work-stealing между потоками
Back pressure между вершинами
Áåí÷ìàðêè
Сравниваем Spark, Flink, Hadoop используя WordCount
Кластер: 9 нод, 40 ядер на каждой
https://github.com/hazelcast/big-data-benchmark
@gAmUssA @hazelcast #jbreak #hazelcastjet
Сравним с обычными стримами
@gAmUssA @hazelcast #jbreak #hazelcastjet
Надо брать пока горячо!!!
jet.hazelcast.org
hazelcast/hazelcast-jet
http://bit.ly/streams_jbreak2017
документация
Код на github
Материалы презентации
@gAmUssA @hazelcast #jbreak #hazelcastjet
В качестве заключения
Стримы предоставляют
функциональный API для запросов и
агрегаций
@gAmUssA @hazelcast #jbreak #hazelcastjet
Распределенные стримы
Параллелизация на кластере
Запись данных на кластер
Стабильные результаты даже при
падениях нод
SlidesCarnival icons are editable
shapes.
This means that you can:
● Resize them without losing quality.
● Change fill color and opacity.
Isn’t that nice? :)
Examples:
Now you can use any emoji as an icon!
And of course it resizes without losing quality and you can change the color.
How? Follow Google instructions
https://twitter.com/googledocs/status/730087240156643328
✋👆👉👍👤👦👧👨👩👪💃🏃💑❤😂
😉😋😒😭👶😸🐟🍒🍔💣📌📖🔨🎃🎈
🎨🏈🏰🌏🔌🔑and many more...
😉
@gAmUssA @hazelcast #jbreak #hazelcastjet
Extra graphics

Mais conteúdo relacionado

Mais procurados

JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
Anton Arhipov
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ontico
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Ontico
 

Mais procurados (17)

Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
 
Component Inspector
Component InspectorComponent Inspector
Component Inspector
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
WebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный PythonWebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный Python
 
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
бегун
бегунбегун
бегун
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 

Semelhante a [JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017

Распределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный ударРаспределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный удар
Viktor Gamov
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
guest32215a
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
 
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
HighLoad2009
 

Semelhante a [JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017 (20)

Распределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный ударРаспределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный удар
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
[JokerConf] Верхом на реактивных стримах, 10/13/2016
[JokerConf] Верхом на реактивных стримах, 10/13/2016[JokerConf] Верхом на реактивных стримах, 10/13/2016
[JokerConf] Верхом на реактивных стримах, 10/13/2016
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 
Regular expressions
Regular expressionsRegular expressions
Regular expressions
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестами
 
Optimization of a big PostgreSQL database
Optimization of a big PostgreSQL databaseOptimization of a big PostgreSQL database
Optimization of a big PostgreSQL database
 
python vs ruby
python vs rubypython vs ruby
python vs ruby
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
 
Igor Khotin - Domain Specific Languages
Igor Khotin - Domain Specific LanguagesIgor Khotin - Domain Specific Languages
Igor Khotin - Domain Specific Languages
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
 

Mais de Viktor Gamov

WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
Viktor Gamov
 

Mais de Viktor Gamov (14)

[DataSciCon] Divide, distribute and conquer stream v. batch
[DataSciCon] Divide, distribute and conquer  stream v. batch[DataSciCon] Divide, distribute and conquer  stream v. batch
[DataSciCon] Divide, distribute and conquer stream v. batch
 
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
 
Testing containers with TestContainers @ AJUG 7/18/2017
Testing containers with TestContainers @ AJUG 7/18/2017Testing containers with TestContainers @ AJUG 7/18/2017
Testing containers with TestContainers @ AJUG 7/18/2017
 
Distributed caching for your next node.js project cf summit - 06-15-2017
Distributed caching for your next node.js project   cf summit - 06-15-2017Distributed caching for your next node.js project   cf summit - 06-15-2017
Distributed caching for your next node.js project cf summit - 06-15-2017
 
[Philly ETE] Java Puzzlers NG
[Philly ETE] Java Puzzlers NG[Philly ETE] Java Puzzlers NG
[Philly ETE] Java Puzzlers NG
 
[OracleCode - SF] Distributed caching for your next node.js project
[OracleCode - SF] Distributed caching for your next node.js project[OracleCode - SF] Distributed caching for your next node.js project
[OracleCode - SF] Distributed caching for your next node.js project
 
[OracleCode SF] In memory analytics with apache spark and hazelcast
[OracleCode SF] In memory analytics with apache spark and hazelcast[OracleCode SF] In memory analytics with apache spark and hazelcast
[OracleCode SF] In memory analytics with apache spark and hazelcast
 
[Jfokus] Riding the Jet Streams
[Jfokus] Riding the Jet Streams[Jfokus] Riding the Jet Streams
[Jfokus] Riding the Jet Streams
 
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
 
[Codemash] Caching Made "Bootiful"!
[Codemash] Caching Made "Bootiful"![Codemash] Caching Made "Bootiful"!
[Codemash] Caching Made "Bootiful"!
 
JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
 
Functional UI testing of Adobe Flex RIA
Functional UI testing of Adobe Flex RIAFunctional UI testing of Adobe Flex RIA
Functional UI testing of Adobe Flex RIA
 
Testing Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user groupTesting Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user group
 

[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017

  • 1. Áëåñê è íèùåòà ðàñïðåäåëåííûõ ñòðèìîâ @gAmUssA @hazelcast #jbreak #hazelcastjet http://bit.ly/streams_jbreak2017
  • 2. @gAmUssA @hazelcast #jbreak #hazelcastjet Solutions Architect Developer Advocate @gamussa в интернетах А ты зафоловил меня в Twitter? © > Кто?
  • 3. @gAmUssA @hazelcast #jbreak #hazelcastjet О чем поговорим? Стримы в Java 8 Распределяй и властвуй Распределенные стримы Как? Зачем?
  • 4.
  • 5. @gAmUssA @hazelcast #jbreak #hazelcastjet Пример: Считаем слова Map<Integer, String>, где ключ - номер строки, а значение – строка из файла. Сколько раз каждое слово встречается? найти Top X слов *
  • 6.
  • 7. @gAmUssA @hazelcast #jbreak #hazelcastjet Что для этого надо? Проходим по всем строкам в файле Разбиваем строки на слова Обновляем значение счетчика по каждому слову
  • 8. @gAmUssA @hazelcast #jbreak #hazelcastjet Что будем считать?
  • 9.
  • 10. fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  • 11. Проходим по всем строкам в файле fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  • 12. Разбиваем строки на слова fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  • 13. Обновляем значение счетчика по каждому слову fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  • 15. @gAmUssA @hazelcast #jbreak #hazelcastjet Стримы в Java 8… Абстракция для представления последовательности элементов Не является самостоятельной структурой «проводят» элемент через конвейер преобразований Не меняют источника данных
  • 16.
  • 17. @gAmUssA @hazelcast #jbreak #hazelcastjet java.util.stream map(), flatMap(), filter() reduce(), collect() sorted(), distinct() Intermediate operation Terminal operation Stateful Intermediate (Blocking) operation
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24. @gAmUssA @hazelcast #jbreak #hazelcastjet Нельзя просто так взять… © Параллельное выполнение возможно только внутри одного процесса JVM (читай parallelStream) Дизайн подразумевает локальные данные Несериализуемые лямбды используются API Результаты выполнения так же несериализуемые
  • 25. @gAmUssA @hazelcast #jbreak #hazelcastjet А что если… © Параллельное выполнение межу JVM процессами Иметь распределенные данные Поддержка сериализации лямбд Сериализуемые результаты и распределенные данные
  • 27. @gAmUssA @hazelcast #jbreak #hazelcastjet Что нам стоит распределенный стрим построить Stream extends DistributedStream DistributedStream extends Stream Что-то еще?
  • 28.
  • 29.
  • 30.
  • 31. @gAmUssA @hazelcast #jbreak #hazelcastjet Why would one need a cluster?
  • 32. @gAmUssA @hazelcast #jbreak #hazelcastjet Problem Data doesn’t fit just one machine
  • 33. Данных слишком много, чтобы они поместились на одной машине
  • 34. @gAmUssA @hazelcast #jbreak #hazelcastjet Данные слишком важны, чтобы хранить их на одной машине
  • 35. @gAmUssA @hazelcast #jbreak #hazelcastjet Oracle Coherence In-memory data grid Распределенные кэши RemoteStreams Коммерческий продукт
  • 36. @gAmUssA @hazelcast #jbreak #hazelcastjet Oracle Coherence Map<String, Integer> collect = source.stream() .flatMap(m -> Stream.of(PATTERN.split(m.getValue()))) .map(String::toLowerCase) .map(WordUtil::cleanWord) .filter(m -> m.length() >= 5) .collect(RemoteCollectors.toMap(ve1, ve2, Integer::sum));
  • 37. @gAmUssA @hazelcast #jbreak #hazelcastjet Infinispan In-memory data grid распределённые кэши Куча всяких интеграций Лицензия Apache v2
  • 38. @gAmUssA @hazelcast #jbreak #hazelcastjet Еще хотелки… Простота знакомый API встраиваемость Cloud Native
  • 39. @gAmUssA @hazelcast #jbreak #hazelcastjet Для тех кто в танке - Hazelcast IMDG In-memory Data Grid Бесплатно Apache v2 Распределенные Кэши (IMap, JCache) Java коллекции (IList, ISet, IQueue) Обмен сообщениями (Topic, RingBuffer) Вычисления (ExecutorService, M-R)
  • 40. 1 900 звездочек GitHub 100%Open Source 134 контрибьютера
  • 41.
  • 42.
  • 43.
  • 44. @gAmUssA @hazelcast #jbreak #hazelcastjet Green Primary Green Backup Green Shard
  • 45. @gAmUssA @hazelcast #jbreak #hazelcastjet Ну и в чем же проблема? IMap.values().stream() ? или IMap.entrySet().stream() ? 4 5
  • 46. @gAmUssA @hazelcast #jbreak #hazelcastjet А ты не лопнешь, деточка ©? OutOfMemoryError
  • 47.
  • 50. @gAmUssA @hazelcast #jbreak #hazelcastjet Что такое Jet? Библиотека для распределенных вычислений Основана на описании модели с помощью графа Основана на Hazelcast IMDG Будем сравнивать Spark or Flink 5 0
  • 51. @gAmUssA @hazelcast #jbreak #hazelcastjet DAG vertex vertex vertex vertex SOURCE SINK
  • 52. @gAmUssA @hazelcast #jbreak #hazelcastjet Исполнение графа Каждая нода кластера исполняет граф целиком
  • 53.
  • 54. @gAmUssA @hazelcast #jbreak #hazelcastjet Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоком ~ кол-во процессоров Work-stealing между потоками Back pressure между вершинами
  • 55. Áåí÷ìàðêè Сравниваем Spark, Flink, Hadoop используя WordCount Кластер: 9 нод, 40 ядер на каждой
  • 57. @gAmUssA @hazelcast #jbreak #hazelcastjet Сравним с обычными стримами
  • 58. @gAmUssA @hazelcast #jbreak #hazelcastjet Надо брать пока горячо!!! jet.hazelcast.org hazelcast/hazelcast-jet http://bit.ly/streams_jbreak2017 документация Код на github Материалы презентации
  • 59. @gAmUssA @hazelcast #jbreak #hazelcastjet В качестве заключения Стримы предоставляют функциональный API для запросов и агрегаций
  • 60. @gAmUssA @hazelcast #jbreak #hazelcastjet Распределенные стримы Параллелизация на кластере Запись данных на кластер Стабильные результаты даже при падениях нод
  • 61.
  • 62. SlidesCarnival icons are editable shapes. This means that you can: ● Resize them without losing quality. ● Change fill color and opacity. Isn’t that nice? :) Examples:
  • 63. Now you can use any emoji as an icon! And of course it resizes without losing quality and you can change the color. How? Follow Google instructions https://twitter.com/googledocs/status/730087240156643328 ✋👆👉👍👤👦👧👨👩👪💃🏃💑❤😂 😉😋😒😭👶😸🐟🍒🍔💣📌📖🔨🎃🎈 🎨🏈🏰🌏🔌🔑and many more... 😉
  • 64. @gAmUssA @hazelcast #jbreak #hazelcastjet Extra graphics