С чего все началось: Google нужно было индексировать данные для поиска по веб-страницам.
Что такое большие данные?
Таким образом, для обработки больших данных необходимо распараллелить обработку данных на множестве компьютеров объединенных в кластер.
Особенности больших данных:
Дополнительную сложность при работе большими данными представляет их хранение данных перед обработкой. Для этого можно использовать:
Hadoop — первая платформа для работы с большими данными.
Кластеры Hadoop строятся на недорогом аппаратном обеспечении (Commodity Hardware). Кластер Hadoop готов к выходу из строя небольшого количества вычислительных узлов.
Hadoop был создан в 2004 году в Google для решения задачи индексации HTML-страниц. Затем в 2007 году проект был передан фонду Apache для дальнейшего развития сообществом.
Для обработки данных в Hadoop применяется MapReduce — модель распределенных вычислений при которой:
При этом, разбиение исходных данных на порции для элементарных заданий, а также группировку сходных данных перед их сведения берет на себя платформа MapReduce.
Программисту остается написать на языке Java функции типа Map и Reduce и скомпилировать их d готовые к запуску модули в формате Jar.
Для запуска обработки данных пользователь должен создать задание в котором указывается исполняемый модуль в формате Jar и входные данные.
Управляет очередностью запуска заданий YARN (Yet Another Resource Negotiator).
Для хранения данных Hadoop использует файловую сиситему HDFS — Hadoop Distributed File System.
HDFS хорошо приспособлена для хранения больших файлов. Каждый файл разбивается на блоки одинакового размера (кроме последнего). Каждый блок может быть скопирован на несколько узлов кластера. Размер блока и коэффициент репликации (количество узлов, на которые должен быть скопирован каждый блок) определяются в настройках HDFS. По умолчанию используются блоки размером в 128 Мб и коэффициент избыточности равный 3.
Благодаря репликации обеспечивается устойчивость распределённой системы к отказам отдельных узлов. Файлы в HDFS могут быть записаны лишь однажды (модификация не поддерживается). Запись в файл в одно время может вести только один процесс.
Организация файлов в пространстве имён — традиционная иерархическая: есть корневой каталог, поддерживается вложение каталогов, в одном каталоге могут располагаться и файлы, и другие каталоги.
HDFS предусматривает наличие центрального узла имён (name node), хранящего метаданные файловой системы и метаинформацию о распределении блоков. Узлы кластера которые непосредственно хранят блоки файлов называются узлами данных (data node).
Узел имён отвечает за обработку операций уровня файлов и каталогов — открытие и закрытие файлов, манипуляция с каталогами. Узлы данных непосредственно отрабатывают операции по записи и чтению данных.
Узел имён и узлы данных снабжаются веб-серверами, отображающими текущий статус узлов и позволяющими просматривать содержимое файловой системы. Административные функции доступны из интерфейса командной строки.
Несмотря на то что HDFS изначально являлся неотъемлемой частью проекта, сегодня Hadoop поддерживает работу и с другими распределёнными файловыми системами. Например, в основном дистрибутиве реализована поддержка Amazon S3 и CloudStore.
С другой стороны, HDFS может использоваться не только для запуска MapReduce-заданий, но и как распределённая файловая система общего назначения. В частности, поверх неё реализована распределённая NoSQL-СУБД HBase.
В процессе развития платформы Hadoop было создано большое количество высокоуровневых средств образующих своего рода экосистему:
Принципиально новым этапом в развитии Hadoop стал Apache Spark — платформа вычислений, которая ускоряет вычисления MapReduce благодаря тому, что хранит данные промежуточных результатов вычислений в ОЗУ узлов, а не в HDFS.
Платформа Spark также может работать в контейнерах под управлением Kubernetes и на кластерах Apache Mesos. Кроме того, Spark может управлять кластером самостоятельно.
На базе Spark работают несколько высокоуровневых программных средств:
Программирование на Spark осуществляется на:
Современные тренды:
Облачные решения:
Компоненты:
Часть программных компонентов имеет открытый исходный код.
На базе ElasticStack создано большое количество производных продуктов.
В настоящий момент активно развиваются облачные сервисы на базе продуктов ElasticStack.