Spark, алтернатива за бърз анализ на данни
Spark е клъстерна изчислителна платформа с отворен код, подобна на Hadoop, но с някои полезни функции, които я правят отличен инструмент за решаване на някои видове проблеми. А именно, в допълнение към интерактивните заявки, Spark поддържа разпределени набори от данни в паметта, оптимизирайки решението на итеративни задачи.
Spark е внедрен в Scala и го използва като среда за разработка на приложения. За разлика от Hadoop, Spark и Scala формират тясна интеграция, при която Scala може лесно да манипулира разпределени набори от данни като локални споделени обекти.
Експериментирайте със Spark
Въпреки че Spark е проектиран за итеративни проблеми с разпределени данни, той всъщност допълва Hadoop и може да работи съвместно с файловата система Hadoop. По-специално, това може да се случи в клъстерната среда на Mesos. Spark е разработен в лабораторията за алгоритми, машини и хора в Калифорнийския университет в Бъркли за изграждане на мащабни, високоскоростни приложения за анализ на данни.
Spark клъстерна изчислителна архитектура
Въпреки приликите с Hadoop, Spark е нова клъстерна изчислителна среда с полезни функции. Първо, Spark е предназначен за решаване на определени видове проблеми в изчислителен клъстер. А именно тези, при които работният набор от данни се използва повторно при паралелни операции (например в алгоритми за машинно обучение). За да оптимизира проблеми от този тип, Spark въвежда концепцията за клъстериране в паметта, когато наборите от данни могат временно да се съхраняват в RAM, за да се намали времето за достъп.
Освен това Spark въвежда концепцията за еластични разпределени набори от данни (RDD). RDD е колекция от неизменяеми обекти, разпространени в много възли. Тези колекции са постоянни, защото могат да бъдат възстановени, ако част от набор от данни бъде загубена. Процесът на възстановяване на част от набор от данни разчита на механизъм за отказоустойчивост, който поддържа родословие (или информация, която позволява част от набор от данни да бъде възстановена от процеса, генерирал данните). RDD е обект Scala и може да бъде създаден от файл; под формата на успореден парче (разпръснато върху възлите); като трансформиране на друг RDD; и накрая чрез промяна на постоянството на съществуващ RDD, като например заявка за кеширане в паметта.
В Spark приложенията се наричат драйвери и тези драйвери извършват операции на един възел или паралелно на набор от възли. Подобно на Hadoop, Spark поддържа клъстери с един и няколко възела. Spark разчита на мениджъра на клъстери Mesos за работа с много възли. Mesos предоставя ефективна платформа за разпределение на ресурси и изолиране на разпределени приложения (вж. Фигура 1). Този подход позволява на Spark да съществува съвместно с Hadoop в споделен пул от възли.
Фигура 1. Spark разчита на мениджъра на клъстери Mesos, за да разпределя и изолира ресурси.
Модел за програмиране на Spark
Драйверът може да извършва два типа операции върху набор от данни: действия и трансформации. Действието е изчисление на набор от данни с върната стойност към драйвера; transform създава нов набор от съществуващ набор от данни. Примери за действия са операции за намаляване (с използване на функции) и итерация над набор от данни (прилагане на функция към всеки елемент, като операцията Map). Примери за трансформации са операцията Map и операцията Cache (което изисква нов набор от данни, които да се съхраняват в паметта).
По-долу ще разгледаме примери за тези две операции, но първо ще се запознаем с езика Scala.
Бързо въведение в Scala
Scala е може би една от най-ценните загадки в Интернет. Scala работи на някои от най-популярните уеб сайтове, включително Twitter, LinkedIn и Foursquare (с платформата си за уеб приложения Lift). Съществуват също доказателства за интерес към представянето на Scala от финансови институции (напр. EDF Trading използва Scala за изчисляване на цените на дериватите).
Scala е език с много парадигми в смисъл, че той гладко и удобно поддържа езикови функции, специфични за императивни, функционални и обектно-ориентирани езици. От обектно-ориентирана програмна перспектива всяка стойност в Scala е обект. По същия начин, от гледна точка на функционалното програмиране, всяка функция е стойност. В допълнение, Scala се набира статично, използвайки изразителна и безопасна система от тип.
В допълнение, Scala е език на виртуална машина (VM) и работи директно на Java Virtual Machine (JVM), използвайки Java Runtime Environment версия 2 чрез байт кодове, генерирани от компилатора Scala. Този подход позволява на Scala да прави почти всичко, което работи на JVM (с незадължителната библиотека за изпълнение на Scala). По този начин Scala използва огромен каталог от съществуващи Java библиотеки заедно със съществуващите Java програми.
И накрая, Scala е разтегателен език (името му всъщност означава Scalable Language), фокусиран върху добавянето на прости, плавно интегрируеми разширения.
Произходът на Скала
Езикът Scala произхожда от Федералния политехнически институт в Лозана. Той е разработен от Мартин Одерски, който преди това е работил върху езика за програмиране Funnel, който комбинира идеите за функционално програмиране и мрежи на Петри. През 2011 г. групата създатели на Scala получи 5-годишен грант от Европейския изследователски съвет, а Typesafe беше създадена за търговска подкрепа на Scala и бе финансирана по подходящ начин.