Если речь заходит о Больших Данных, вы почти наверняка услышите упоминания о Hadoop или Apache Spark. Давайте посмотрим, что представляют собой две эти технологии и чем они отличаются друг от друга.
1. Они решают разные задачи. И Hadoop, и Apache Spark представляют собой фреймворк для обработки Больших Данных, но предназначены для разных целей. Hadoop, по сути, формирует инфраструктуру распределенных данных: большие коллекции данных распределены между множеством узлов, образующих кластер из стандартных серверов. Это означает, что вам не придется покупать и поддерживать дорогостоящее специализированное оборудование. Hadoop индексирует и отслеживает состояние данных, благодаря чему их обработка и анализ осуществляются гораздо эффективнее, чем ранее. Spark – инструмент, предназначенный для обработки данных. Он позволяет выполнять различные операции над распределенными коллекциями данных, но не обеспечивает их распределенного хранения.
2. Любую из двух этих технологий можно использовать отдельно, не обращаясь к другой. В состав Hadoop входит не только компонент хранения Hadoop Distributed File System, но и компонент обработки MapReduce, поэтому обработку можно осуществлять и без Spark. Аналогичным образом, и Spark можно использовать без Hadoop, но здесь имеются некоторые отличия. У Spark нет собственной системы управления файлами, поэтому необходима интеграция если не с HDFS, то с какой-то другой облачной платформой хранения данных. Вместе с тем, технология Spark проектировалась для Hadoop, поэтому многие считают, что лучше все же использовать их вместе.
3. Spark работает быстрее. В общем случае, Spark по производительности значительно опережает MapReduce, поскольку данные обрабатываются здесь по-другому. Если MapReduce осуществляет обработку в пошаговом режиме, то Spark оперирует всем набором данных как единым целым.
«MapReduce действует следующим образом: данные считываются из кластера, выполняется требуемая операция, результаты записываются в кластер, обновленные данные считываются из кластера, выполняется следующая операция, ее результаты записываются в кластер и т.д., – поясняет главный аналитик компании Booz Allen Hamilton Кирк Борн. – В отличие от этого Spark выполняет все аналитические операции в памяти практически в реальном времени: данные считываются из кластера, выполняются необходимые операции, затем полученные результаты записываются в кластер, после чего процесс завершен. При пакетной обработке Spark превосходит MapReduce по производительности в десять раз, а при анализе в оперативной памяти – в сто».
4. Скорость Spark может оказаться избыточной. Производительности MapReduce, как правило, вполне достаточно, если вы оперируете статическими данными и можете подождать завершения обработки всего пакета. Но если нужно анализировать потоковые данные, поступающие от датчиков в производственных помещениях, или приложения, требующие множества операций, вероятно, вам захочется обратиться к Spark. Большинство алгоритмов машинного обучения, например, требует выполнения множества операций. К типичным задачам, решаемым с помощью Spark, относятся маркетинговые кампании в реальном времени, оперативная выдача рекомендаций по выбору продукта, анализ кибербезопасности и мониторинг машинных журналов.
5. Восстановление после сбоев хорошо реализовано в обеих технологиях, хотя и используются они по-разному. Hadoop устойчива к системным сбоям, поскольку после выполнения каждой операции данные записываются на диск, а у Spark восстановление осуществляется благодаря тому, что объекты данных хранятся в распределенных в пределах кластера наборах. «Объекты данных могут храниться в памяти или на дисках, а концепция RDD (Resilient Distributed Dataset) обеспечивает полное восстановление в случае каких-либо сбоев или ошибок», – указал Борн.