SlideShare a Scribd company logo
1 of 36
Download to read offline
1
2 
Apache Spark 
Егор Пахомов 
Я.Субботник в Минске, 30.08.2014
3 
О себе 
! Участвовал в создании Apache Solr based search engine для 
крупного западного e-commerce 
! Разрабатывал Яндекс.Острова последний год 
! Spark Contributor
4 
Сложности больших данных 
! Файлы слишком большие, чтобы разместить на одной 
машине 
! Суперкомпьютеры дорогие и трубуют специальной 
экспертизы 
! В случае поломки одной машины → перепрогонять весь 
алгоритм
5 
Hadoop придет на помощь!
6 
HDFS как хранилище файлов 
HDSF 
Client NameNode Secondary 
NameNode 
DataNode 
DataNode 
DataNode 
DataNode 
DataNode
7 
Модель map-reduce
8 
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> 
{ 
private final static IntWritable one = new IntWritable(1); 
private Text word = new Text(); 
@Override 
public void map(LongWritable key, Text value, Context context) throws 
IOException, InterruptedException 
{ 
String line = value.toString(); 
StringTokenizer tokenizer = new StringTokenizer(line); 
while (tokenizer.hasMoreTokens()) 
{ 
word.set(tokenizer.nextToken()); 
context.write(word, one); 
} 
} 
} 
public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> 
{ 
@Override 
public void reduce(Text key, Iterable<IntWritable> values, Context context) 
throws IOException, InterruptedException 
{ 
int sum = 0; 
for (IntWritable val : values) 
{ 
sum += val.get(); 
} 
context.write(key, new IntWritable(sum)); 
} 
}
9 
Что сделал Hadoop 
! Fault tolerance 
! Data locality 
! Новая вычислительная модель
10 
Проблемы 
! Тяжело реализовать алгоритм в map-reduce моделе 
! Очень простой алгоритм требует как минимум 3 класса 
! Частая запись на диск
11 
RDD 
Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing. Matei Zaharia, Mosharaf Chowdhury, Tathagata Das, 
Ankur Dave, Justin Ma, Murphy McCauley, Michael J. Franklin, 
Scott Shenker, Ion Stoica. NSDI 2012. April 2012.
12 
Word count 
val wordCounts = spark 
.textFile("/user/usr/in") 
.flatMap(line => line.split(" ")) 
.map(word => (word, 1)) 
.reduceByKey(_ + _)
13 
Whole program comparison 
public class HadoopAnalyzer 
{ 
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> 
{ 
private final static IntWritable one = new IntWritable(1); 
private Text word = new Text(); 
@Override 
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException 
{ 
String line = value.toString(); 
StringTokenizer tokenizer = new StringTokenizer(line); 
while (tokenizer.hasMoreTokens()) 
{ 
word.set(tokenizer.nextToken()); 
context.write(word, one); 
} 
} 
} 
public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> 
{ 
@Override 
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException 
{ 
int sum = 0; 
for (IntWritable val : values) 
{ 
sum += val.get(); 
} 
context.write(key, new IntWritable(sum)); 
} 
} 
public static void main(String[] args) throws Exception 
{ 
JobConf conf = new JobConf(HadoopAnalyzer.class); 
conf.setJobName("wordcount"); 
System.out.println("Executing job."); 
Job job = new Job(conf, "job"); 
job.setInputFormatClass(InputFormat.class); 
job.setOutputFormatClass(OutputFormat.class); 
job.setJarByClass(HadoopAnalyzer.class); 
job.setInputFormatClass(TextInputFormat.class); 
job.setOutputFormatClass(TextOutputFormat.class); 
TextInputFormat.addInputPath(job, new Path("/user/usr/in")); 
TextOutputFormat.setOutputPath(job, new Path("/user/usr/out")); 
job.setMapperClass(Mapper.class); 
job.setReducerClass(Reducer.class); 
job.waitForCompletion(true); 
System.out.println("Done."); 
} 
}
14 
Whole program comparison 
package ru.yandex.spark.examples 
import org.apache.spark.{SparkConf, SparkContext} 
object WordCount { 
def main(args: Array[String]) { 
val conf = new SparkConf() 
conf.setAppName("serp-api") 
conf.setMaster("yarn-client") 
val spark = new SparkContext(conf) 
spark.addJar(SparkContext.jarOfClass(this.getClass).get) 
val wordCounts = spark 
.textFile("/user/usr/in") 
.flatMap(line => line.split(" ")) 
.map(word => (word, 1)) 
.reduceByKey(_ + _) 
wordCounts.saveAsTextFile("/user/usr/out") 
spark.stop() 
} 
}
15 
Actions 
def collect(): Array[T] 
def saveAsTextFile(path: String) 
def toLocalIterator: Iterator[T] 
Transformations 
In one partition(narrow) 
def filter(f: T => Boolean): RDD[T] 
def map[U: ClassTag](f: T => U): RDD[U] 
def foreachPartition(f: Iterator[T] => Unit) 
def zipWithIndex(): RDD[(T, Long)] 
Cross-partition(wide) 
def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))] 
def reduceByKey(func: (V,V) => V,numPartitions: Int):RDD[(K, V)]
16 
Скорость 
4000 
3500 
3000 
2500 
2000 
1500 
1000 
500 
1 5 10 20 30 
Hadoop 
Spark 
Количество итераций Время (с)
17 
Языки 
Python 
file = spark.textFile("hdfs://...") 
counts = file.flatMap(lambda line: line.split(" "))  
.map(lambda word: (word, 1))  
.reduceByKey(lambda a, b: a + b) 
counts.saveAsTextFile("hdfs://...") 
Scala 
val file = spark.textFile("hdfs://...") 
val counts = file.flatMap(line => line.split(" ")) 
.map(word => (word, 1)) 
.reduceByKey(_ + _) 
counts.saveAsTextFile("hdfs://...")
18 
Языки 
Java-8 
JavaRDD<String> lines = sc.textFile("hdfs://log.txt"); 
JavaRDD<String> words = 
lines.flatMap(line -> Arrays.asList(line.split(" "))); 
JavaPairRDD<String, Integer> counts = 
words.mapToPair(w -> new Tuple2<String, Integer>(w, 1)) 
.reduceByKey((x, y) -> x + y); 
counts.saveAsTextFile("hdfs://counts.txt");
19 
Языки 
Java-7 
JavaRDD<String> file = spark.textFile("hdfs://..."); 
JavaRDD<String> words = file.flatMap(new FlatMapFunction<String, String>() { 
public Iterable<String> call(String s) { return Arrays.asList(s.split(" 
")); } 
}); 
JavaPairRDD<String, Integer> pairs = words.map(new PairFunction<String, 
String, Integer>() { 
public Tuple2<String, Integer> call(String s) { return new Tuple2<String, 
Integer>(s, 1); } 
}); 
JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new 
Function2<Integer, Integer>() { 
public Integer call(Integer a, Integer b) { return a + b; } 
}); 
counts.saveAsTextFile("hdfs://...");
20 
SQL 
Hadoop Spark 
Spark SQL
21
22 
Hive начинает использовать Spark в качестве 
execution engine
23 
Машинное обучение 
Hadoop Spark 
SparkML 
~ 24 algorithms ~ 13 algorithms
24 
Легко писать 
import org.apache.spark.mllib.clustering.KMeans 
import org.apache.spark.mllib.linalg.Vectors 
// Load and parse the data 
val data = sc.textFile("data/kmeans_data.txt") 
val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))) 
// Cluster the data into two classes using KMeans 
val numClusters = 2 
val numIterations = 20 
val clusters = KMeans.train(parsedData, numClusters, numIterations) 
// Evaluate clustering by computing Within Set Sum of Squared Errors 
val WSSSE = clusters.computeCost(parsedData) 
println("Within Set Sum of Squared Errors = " + WSSSE)
25 
Алгоритмы 
! Classification and regression 
– linear support vector machine (SVM) 
– logistic regression 
– linear least squares, Lasso, and ridge regression 
– decision tree 
– naive Bayes 
! Collaborative filtering 
– alternating least squares (ALS)
26 
Алгоритмы 
! Clustering 
– k-means 
! Dimensionality reduction 
– singular value decomposition (SVD) 
– principal component analysis (PCA) 
! Optimization 
– stochastic gradient descent 
– limited-memory BFGS (L-BFGS)
27 
И Mahout начинает использовать Spark
28 
Graph 
Hadoop Spark
29 
Streaming batch processing 
Hadoop Spark
30 
Streaming batch processing 
Spark 
streaming 
Spark 
engine 
Input 
data stream 
Batches 
of input data 
Batches 
of processed data
31
32
Единая платформа для приложений 
Big Data 
33 
Batch 
Interac+ve 
Streaming 
Hadoop 
Cassandra 
Mesos 
Cloud 
Providers 
… 
… 
Единый API для выполнения различных задач в различных типах 
хранилищ и средах выполнения
34 
Контрибьютеры 
Сравнение с другими проектами 
1400 
1200 
1000 
800 
600 
400 
200 
Spark 
Storm 
HDFS 
350000 
300000 
250000 
200000 
150000 
MapReduce YARN 
50000 
Spark 
Storm 
HDFS 
YARN 
MapReduce 
100000 
Коммиты 
Измененные 
строчки 
кода 
Активность за последние 6 месяцев
35 
Спасибо за внимание!
36 
Егор Пахомов 
Разработчик 
Группа технологий работы 
с большими данными 
epahomov@yandex-team.ru

More Related Content

What's hot

08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduceRoman Brovko
 
Куда уходит память?
Куда уходит память?Куда уходит память?
Куда уходит память?Dmitriy Dumanskiy
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
О.В.Сухорослов "MapReduce: инструменты и практические примеры"
О.В.Сухорослов "MapReduce: инструменты и практические примеры"О.В.Сухорослов "MapReduce: инструменты и практические примеры"
О.В.Сухорослов "MapReduce: инструменты и практические примеры"Yandex
 
алексей романенко
алексей романенкоалексей романенко
алексей романенкоkuchinskaya
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
 
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...Ontico
 
Spark: нетипичные примеры использования
Spark:  нетипичные примеры использованияSpark:  нетипичные примеры использования
Spark: нетипичные примеры использованияfaithlessfriend
 
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsPostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsIvan Muratov
 
Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...Mikhail Kurnosov
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Multimodel Database Caché
Multimodel Database CachéMultimodel Database Caché
Multimodel Database CachéTimur Safin
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Fwdays
 

What's hot (20)

08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce
 
Куда уходит память?
Куда уходит память?Куда уходит память?
Куда уходит память?
 
Big Data и Ruby
Big Data и RubyBig Data и Ruby
Big Data и Ruby
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
О.В.Сухорослов "MapReduce: инструменты и практические примеры"
О.В.Сухорослов "MapReduce: инструменты и практические примеры"О.В.Сухорослов "MapReduce: инструменты и практические примеры"
О.В.Сухорослов "MapReduce: инструменты и практические примеры"
 
алексей романенко
алексей романенкоалексей романенко
алексей романенко
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
 
Spark: нетипичные примеры использования
Spark:  нетипичные примеры использованияSpark:  нетипичные примеры использования
Spark: нетипичные примеры использования
 
OpenACC short review
OpenACC short reviewOpenACC short review
OpenACC short review
 
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsPostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
 
Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 4. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Multimodel Database Caché
Multimodel Database CachéMultimodel Database Caché
Multimodel Database Caché
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 

Similar to Apache Spark — Егор Пахомов

Expert Fridays Spark Job
Expert Fridays Spark JobExpert Fridays Spark Job
Expert Fridays Spark JobProvectus
 
Hadoop implementation in Wikimart
Hadoop implementation in WikimartHadoop implementation in Wikimart
Hadoop implementation in WikimartRoman Zykov
 
О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"Yandex
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)ScalaNsk
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentationVlad Orlov
 
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Mikhail Kurnosov
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Alex Ott
 
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 

Similar to Apache Spark — Егор Пахомов (20)

Expert Fridays Spark Job
Expert Fridays Spark JobExpert Fridays Spark Job
Expert Fridays Spark Job
 
Hadoop implementation in Wikimart
Hadoop implementation in WikimartHadoop implementation in Wikimart
Hadoop implementation in Wikimart
 
О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"
 
Scala for android
Scala for androidScala for android
Scala for android
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
Scala on android
Scala on androidScala on android
Scala on android
 
MongoDB@addconf
MongoDB@addconfMongoDB@addconf
MongoDB@addconf
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
 
Расширение библиотеки Slick
Расширение библиотеки SlickРасширение библиотеки Slick
Расширение библиотеки Slick
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentation
 
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
 
Cloud Haskell. Александр Вершилов
Cloud Haskell. Александр ВершиловCloud Haskell. Александр Вершилов
Cloud Haskell. Александр Вершилов
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
 
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Apache Spark — Егор Пахомов

  • 1. 1
  • 2. 2 Apache Spark Егор Пахомов Я.Субботник в Минске, 30.08.2014
  • 3. 3 О себе ! Участвовал в создании Apache Solr based search engine для крупного западного e-commerce ! Разрабатывал Яндекс.Острова последний год ! Spark Contributor
  • 4. 4 Сложности больших данных ! Файлы слишком большие, чтобы разместить на одной машине ! Суперкомпьютеры дорогие и трубуют специальной экспертизы ! В случае поломки одной машины → перепрогонять весь алгоритм
  • 5. 5 Hadoop придет на помощь!
  • 6. 6 HDFS как хранилище файлов HDSF Client NameNode Secondary NameNode DataNode DataNode DataNode DataNode DataNode
  • 8. 8 public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); @Override public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } } } public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { @Override public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } }
  • 9. 9 Что сделал Hadoop ! Fault tolerance ! Data locality ! Новая вычислительная модель
  • 10. 10 Проблемы ! Тяжело реализовать алгоритм в map-reduce моделе ! Очень простой алгоритм требует как минимум 3 класса ! Частая запись на диск
  • 11. 11 RDD Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing. Matei Zaharia, Mosharaf Chowdhury, Tathagata Das, Ankur Dave, Justin Ma, Murphy McCauley, Michael J. Franklin, Scott Shenker, Ion Stoica. NSDI 2012. April 2012.
  • 12. 12 Word count val wordCounts = spark .textFile("/user/usr/in") .flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _)
  • 13. 13 Whole program comparison public class HadoopAnalyzer { public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); @Override public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } } } public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { @Override public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { JobConf conf = new JobConf(HadoopAnalyzer.class); conf.setJobName("wordcount"); System.out.println("Executing job."); Job job = new Job(conf, "job"); job.setInputFormatClass(InputFormat.class); job.setOutputFormatClass(OutputFormat.class); job.setJarByClass(HadoopAnalyzer.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); TextInputFormat.addInputPath(job, new Path("/user/usr/in")); TextOutputFormat.setOutputPath(job, new Path("/user/usr/out")); job.setMapperClass(Mapper.class); job.setReducerClass(Reducer.class); job.waitForCompletion(true); System.out.println("Done."); } }
  • 14. 14 Whole program comparison package ru.yandex.spark.examples import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]) { val conf = new SparkConf() conf.setAppName("serp-api") conf.setMaster("yarn-client") val spark = new SparkContext(conf) spark.addJar(SparkContext.jarOfClass(this.getClass).get) val wordCounts = spark .textFile("/user/usr/in") .flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) wordCounts.saveAsTextFile("/user/usr/out") spark.stop() } }
  • 15. 15 Actions def collect(): Array[T] def saveAsTextFile(path: String) def toLocalIterator: Iterator[T] Transformations In one partition(narrow) def filter(f: T => Boolean): RDD[T] def map[U: ClassTag](f: T => U): RDD[U] def foreachPartition(f: Iterator[T] => Unit) def zipWithIndex(): RDD[(T, Long)] Cross-partition(wide) def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))] def reduceByKey(func: (V,V) => V,numPartitions: Int):RDD[(K, V)]
  • 16. 16 Скорость 4000 3500 3000 2500 2000 1500 1000 500 1 5 10 20 30 Hadoop Spark Количество итераций Время (с)
  • 17. 17 Языки Python file = spark.textFile("hdfs://...") counts = file.flatMap(lambda line: line.split(" ")) .map(lambda word: (word, 1)) .reduceByKey(lambda a, b: a + b) counts.saveAsTextFile("hdfs://...") Scala val file = spark.textFile("hdfs://...") val counts = file.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.saveAsTextFile("hdfs://...")
  • 18. 18 Языки Java-8 JavaRDD<String> lines = sc.textFile("hdfs://log.txt"); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" "))); JavaPairRDD<String, Integer> counts = words.mapToPair(w -> new Tuple2<String, Integer>(w, 1)) .reduceByKey((x, y) -> x + y); counts.saveAsTextFile("hdfs://counts.txt");
  • 19. 19 Языки Java-7 JavaRDD<String> file = spark.textFile("hdfs://..."); JavaRDD<String> words = file.flatMap(new FlatMapFunction<String, String>() { public Iterable<String> call(String s) { return Arrays.asList(s.split(" ")); } }); JavaPairRDD<String, Integer> pairs = words.map(new PairFunction<String, String, Integer>() { public Tuple2<String, Integer> call(String s) { return new Tuple2<String, Integer>(s, 1); } }); JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new Function2<Integer, Integer>() { public Integer call(Integer a, Integer b) { return a + b; } }); counts.saveAsTextFile("hdfs://...");
  • 20. 20 SQL Hadoop Spark Spark SQL
  • 21. 21
  • 22. 22 Hive начинает использовать Spark в качестве execution engine
  • 23. 23 Машинное обучение Hadoop Spark SparkML ~ 24 algorithms ~ 13 algorithms
  • 24. 24 Легко писать import org.apache.spark.mllib.clustering.KMeans import org.apache.spark.mllib.linalg.Vectors // Load and parse the data val data = sc.textFile("data/kmeans_data.txt") val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))) // Cluster the data into two classes using KMeans val numClusters = 2 val numIterations = 20 val clusters = KMeans.train(parsedData, numClusters, numIterations) // Evaluate clustering by computing Within Set Sum of Squared Errors val WSSSE = clusters.computeCost(parsedData) println("Within Set Sum of Squared Errors = " + WSSSE)
  • 25. 25 Алгоритмы ! Classification and regression – linear support vector machine (SVM) – logistic regression – linear least squares, Lasso, and ridge regression – decision tree – naive Bayes ! Collaborative filtering – alternating least squares (ALS)
  • 26. 26 Алгоритмы ! Clustering – k-means ! Dimensionality reduction – singular value decomposition (SVD) – principal component analysis (PCA) ! Optimization – stochastic gradient descent – limited-memory BFGS (L-BFGS)
  • 27. 27 И Mahout начинает использовать Spark
  • 29. 29 Streaming batch processing Hadoop Spark
  • 30. 30 Streaming batch processing Spark streaming Spark engine Input data stream Batches of input data Batches of processed data
  • 31. 31
  • 32. 32
  • 33. Единая платформа для приложений Big Data 33 Batch Interac+ve Streaming Hadoop Cassandra Mesos Cloud Providers … … Единый API для выполнения различных задач в различных типах хранилищ и средах выполнения
  • 34. 34 Контрибьютеры Сравнение с другими проектами 1400 1200 1000 800 600 400 200 Spark Storm HDFS 350000 300000 250000 200000 150000 MapReduce YARN 50000 Spark Storm HDFS YARN MapReduce 100000 Коммиты Измененные строчки кода Активность за последние 6 месяцев
  • 35. 35 Спасибо за внимание!
  • 36. 36 Егор Пахомов Разработчик Группа технологий работы с большими данными epahomov@yandex-team.ru