Твоя Data така велика: Введення в Spark на Java

Spark – універсальний інструмент для процесингу великих даних, з яким можна писати в Hadoop з різних СУБД, стримить всякі джерела в реальному часі, паралельно робити з даними яку-небудь складну обробку, і все це не за допомогою якихось батчей, скриптів і SQL-запитів, а за допомогою функціонального підходу.


Про Spark ходить кілька міфів:

  • Spark'y потрібен Hadoop: не потрібен!
  • Spark'у потрібна Scala: не обов'язково!
Чому? Дивіться під катом.

Напевно ви чули про Spark, і швидше за все навіть знаєте, що це таке і з чим його їдять. Інша справа, що, якщо ви професійно працюєте з цим фреймворком, у вас в голові є кілька типових стереотипів, із-за яких ви ризикуєте ніколи з ним не познайомитися ближче.

Міф 1. Spark не працює без Hadoop
Що таке Hadoop? Грубо кажучи, це розподілена файлова система, сховище даних з набором API для процесингу цих самих даних. І, як не дивно, буде правильніше сказати що Hadoop потребує Spark, а не навпаки!

Справа в тому, що стандартний інструментарій Hadoop'а не дозволяє процессить наявні дані з високою швидкістю, а Spark – дозволяє. І ось питання, чи потрібен Spark'у Hadoop? Давайте подивимося на те, що таке Spark:



Як бачите, тут немає Hadoop'a: є API, є SQL, є стрімінг і багато іншого. А Hadoop не обов'язковий. А Cluster manager, запитаєте ви? Хто буде запускати ваш Spark на кластер? Олександр Сергійович? Ось саме з цього питання і ростуть ноги у нашого міфу: найчастіше для розподілу job'ів Спарка за кластера використовується YARN під Hadoop, однак є й альтернативи: Apache Mesos, наприклад, який ви можете використовувати, якщо з якоїсь причини не любите Hadoop.

Міф 2. Spark написаний на Scala, значить під нього теж треба писати на Scala
З Spark можна працювати і під Java, і під Scala, при цьому другий варіант багатьма вважається кращим з кількох причин:

  • Scala це круто!
  • Більш лакончиный і зручний синтаксис.
  • Spark API заточений під Scala, і виходить він раніше, ніж Java API;
Давайте по порядку, почнемо з першої тези про крутизну і модності Scala. Контрагрумент простий і вміщується в один рядок: Ви може бути і здивуєтеся, але більшість Java-розробників… знають Java! І це багато коштує – команда сеньйорів, переходячи на скала перетворюються на StackOverflow-Driven джуніорів!



Синтаксис окрема історія – якщо почитати будь холівар Java vs. Scala, ви зустрінете приблизно ось такі приклади (як ви бачите, код просто підсумовує довжини рядків):

Scala
val lines = sc.textFile("data.txt") 
val lineLengths = lines.map(_.length) 
val totalLength = lineLengths.reduce(_+_) 

Java
JavaRDD<String> lines = sc.textFile ("data.txt"); 
JavaRDD<Integer> lineLengths = lines.map (new Function() { 
@Override 
public Integer call (String lines) throws Exception { 
return lines.length (); 
} 
}); 

Integer totalLength = lineLengths.reduce (new Function2() { 
@Override 
public Integer call(Integer a, Integer b) throws Exception {
return a + b; 
} 
}); 

Рік тому навіть у документації Spark приклади виглядали саме так. Однак давайте подивимося на код на Java 8:

Java 8
JavaRDD<String> lines = sc.textFile ("data.txt"); 
JavaRDD<Integer> lineLengths = lines.map (String::length); 
int totalLength = lineLengths.reduce ((a, b) -> a + b);

Виглядає цілком непогано, чи не так? У будь-якому випадку, потрібно розуміти ще й те, що Java це знайомий нам світ: Spring, дизайн патерни, концепції і багато іншого. На Scala джависту доведеться зіткнутися з абсолютно іншим світом і тут варто задуматися, чи готові ви або ваш замовник на такий ризик.

Всі приклади взяті з доповіді Євгена EvgenyBorisov Борисова про Spark, який прозвучав на JPoint 2016, ставши, до речі кращим доповіддю конференції. Хочете продовження: RDD, тестування, прикладів live-кодинга? Дивіться відео:



Spark богам BigData

А якщо після перегляду доповіді Євгена ви пережили екзистенційний катарсис, усвідомивши, що з Spark'му треба познайомитися щільніше, можна зробити це наживо разом з Євгеном вже через місяць:

12-13 жовтня в Санкт-Петербурзі відбудеться великий дводенний тренінг «Welcome to Spark».

Обговоримо проблеми і рішення, з якими спочатку стикаються недосвідчені Spark-розробники. Розберемося з синтаксисом і всякими хитрощами, а головне подивимося, як можна писати Spark на Java за допомогою відомих вам фрэймворков, інструментів і концепцій, таких як Inversion of Control, design patterns, Spring framework, Maven/Gradle, Junit. Всі вони можуть допомогти зробити ваше Spark-додаток більш елегантним, читабельним і звичним.

Буде багато завдань, live coding-а і в кінцевому підсумку ви вийдете з цього тренінгу з достатніми знаннями, щоб почати самостійно працювати на Spark-e у звичному світі Java.
Детальну програму викладати сюди великого сенсу немає, хто захоче, знайде на сторінці тренінгу.

ЄВГЕН БОРИСОВ
Naya Technologies


Євген Борисов розробляє на Java з 2001 року і взяв участь у великій кількості Enterprise-проектів. Пройшовши шлях від простого програміста до архітектора і втомившись від рутини, він вийшов у вільні художники. Сьогодні пише і проводить курси, семінари та майстер класи для різної аудиторії: live-курси з J2EE для офіцерів ізраїльської армії. Spring — за WebEx'у для румунів, Hibernate через GoToMeeting для канадців, Troubleshooting і Design Patterns для українців.

P. S. Користуючись нагодою, вітаю всіх з днем програміста!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.