Эффективное использование больших данных требует правильного подбора инструментов для их хранения, обслуживания, обработки и анализа. Hadoop и Spark рассматривались до сих пор как альтернативные системы. Однако в последнее время все чаще говорят о том, что наилучший результат дает их совместное использование.
В чем отличия этих систем и как достигается компромисс в блоге Syncsort рассказала Кристи Уилсон.
1. Модель распределенного хранения данных, предлагаемая Hadoop, дополняется средствами обработки данных в памяти, предлагаемыми через Spark
В Hadoop применяется собственная распределенная файловая система HDFS. Она позволяет выполнять обширные вычисления по коллекции данных, которые собираются с нескольких узлов, входящих в отдельный кластер серверов. Такая архитектура устраняет необходимость использования избыточного оборудования. Более того, Hadoop выполняет индексацию и слежение за перемещением данных, что позволяет вести обработку и анализ больших коллекций рационально и эффективно.
Модель работы Spark выстроена иначе. Вместо поиска решений для эффективного обслуживания распределенных хранилищ данных, этот проект достигает преимущества за счет рационализации процесса их обработки.
Разница в идеологии работы Hadoop и Spark позволяет добиваться роста эффективности именно благодаря их совместной работе. Общая модель может рассматриваться как некая большая система управления данными, сочетающая достоинства распределенной файловой системы Hadoop и многослойной архитектуры обработки данных в памяти Spark.
2. Если Hadoop и Spark работают совместно, то они также могут работать и раздельно
Для управления распределенным хранилищем данных Hadoop использует системный механизм, получивший название Hadoop Distributed File System (HDFS). Однако помимо файловой системы он может подключать систему MapReduce для выполнения параллельных вычислений над большими объемами данных. При такой конфигурации Hadoop может обходиться без Spark, причем это решение уже давно и активно используется в самых разных инфраструктурных системах.
Spark также может работать с другими файловыми системами, помимо тех, что предлагает Hadoop.
Как показал накопленный опыт, MapReduce оказался достаточно сложным для программного управления. На его фоне Spark выглядит значительно проще, а скорость выполнения операций в нем значительно выше.
3. Spark работает значительно быстрей, чем MapReduce
Главным аргументом при подключении Spark служит его сравнение с MapReduce. Поскольку речь идет о больших данных, то наиболее значительный выигрыш Spark в скорости выполнения операций демонстрирует при работе с потоковыми данными.
Однако достоинства Spark не ограничиваются только скоростью. Этот механизм способен выполнять анализ, принимая во внимание всю совокупность накопленных больших данных. На его фоне возможности MapReduce выглядят более ограниченными. Одномоментно он может делать выборку только из данных, принадлежащих одному кластеру. После этого MapReduce выполняет намеченную операцию обработки, записывает результат на диск, оставляя его для последующего использования уже в рамках итоговой системной обработки. Скорость выполнения операций при такой модели выборки в MapReduce получается значительно ниже, чем у Spark.
4. Hadoop и Spark умеют эффективно бороться с системными ошибками
Hadoop и Spark используют встроенные механизмы для сохранения устойчивой работы в случае появления сбоев. Однако подходы у них разные.
Модель Hadoop предусматривает перенос данных на диск сразу после завершения любой операции. Именно благодаря этому его работа остается устойчивой даже при возникновении аппаратных сбоев или программных ошибок.
В Spark используется иная модель защиты. Она выстроена вокруг работы с объектами данных, которые размещаются внутри Resilient Distributed Dataset (устойчивые распределенные наборы данных). Эти объекты представляют собой неизменяемые коллекции данных, которые размещаются в кластерах и допускают взаимное преобразование с помощью групповых операций, например, путем map-отображений. Сами данные могут размещаться как в памяти, так и на диске. При этом Spark поддерживает историю всех выполненных преобразований, что позволяет ему пересоздать объект данных, если обнаруживается сбой в работе.
При работе Hadoop и Spark по отдельности каждый из них может использовать только свои встроенные средства защиты. Совместная работа позволяет получить защищенное комплексное инфраструктурное решение.