В моем одном из предыдущих блогов о Hadoop мы рассмотрели один из его компонентов, то есть MapReduce. Это была популярная модель кластерных вычислений, которая стала широко популярной, в которой параллельные вычисления данных выполняются на кластерах ненадежных машин системами, которые автоматически обеспечивают планирование с учетом местоположения, отказоустойчивость и балансировку нагрузки. Хотя MapReduce был очень успешным в реализации крупномасштабных приложений, интенсивно использующих данные, на стандартных кластерах, у него были недостатки.

  • Многие распространенные алгоритмы машинного обучения повторно применяют функцию к одному и тому же набору данных для оптимизации параметра. Хотя каждую итерацию можно выразить как MapReduce, каждое задание должно перезагружать данные с диска, что приводит к значительному снижению производительности.
  • Hadoop часто используется для выполнения специальных исследовательских запросов к большим наборам данных через интерфейсы SQL, такие как Pig и Hive. В идеале пользователь мог бы загрузить интересующий его набор данных в память на нескольких машинах и многократно запрашивать его. Однако в Hadoop каждый запрос имеет значительную задержку (десятки секунд), поскольку выполняется как отдельное задание MapReduce и считывает данные с диска.

По мере того, как мы переходим в новую эпоху, когда машинное обучение/ИИ/аналитика данных стали важной частью любой организации, время и производительность играют важную роль. Возникла потребность в разработке механизма, который был бы одновременно производительным и обладал бы малой задержкой для обработки больших данных в кластере машин.

Рождение Apache Spark

Apache Spark начался в 2009 году как исследовательский проект Spark в Калифорнийском университете в Беркли, который впервые был опубликован в исследовательской статье в 2010 году Матеем Захарией, Мошарафом Чоудхури, Майклом Франклином, Скоттом Шенкером и Ионом Стойкой из AMPlab Калифорнийского университета в Беркли.

В то время Hadoop MapReduce был доминирующим механизмом параллельного программирования для кластеров, будучи первой системой с открытым исходным кодом, обеспечивающей параллельную обработку данных в кластерах из тысяч узлов. AMPlab работала с несколькими ранними пользователями MapReduce, чтобы понять преимущества и недостатки этой новой модели программирования, и поэтому смогла синтезировать список проблем для нескольких вариантов использования и приступить к разработке более общих вычислительных платформ.

Чтобы решить эту проблему, Team сначала разработала API на основе функционального программирования, который мог бы лаконично выражать многоэтапные приложения, а затем реализовал его на новом механизме, который мог выполнять эффективный обмен данными в памяти между этапами вычислений. Они также начали тестировать эту систему с разными внешними пользователями. Искра родилась.

Что отличает Spark от MapReduce?

  1. Spark довольно быстр по сравнению со своим аналогом Hadoop MapReduce. В общем, для любой очистки или анализа данных вы не просто работаете с одним заданием MapReduce. Несколько заданий MapReduce выполняются одно за другим. Выходные данные одного задания MapReduce являются входными данными для другого задания MapReduce, и в этом случае мы используем инструмент под названием Ozie для координации выполнения заданий одного за другим. Что делает Spark, так это то, что вы все равно будете читать данные из HDFS или другого хранилища. Загрузите его в память и запустите на нем все вычисления искры, которые могут быть как если бы 20 карт, 15 редукторов и т. д. что делает искра, так это сохраняет данные в памяти между различными передачами к различным преобразованиям в Spark. Причина использования памяти заключается в том, что скорость, которую мы получаем при чтении памяти, составляет 10 ГБ/сек по сравнению с жестким диском и твердотельным накопителем, которые потребляют около 100 МБ/сек и 600 МБ/сек.
  2. В традиционном MapReduce слоты жестко закодированы. Либо есть слоты карты и слоты уменьшения. Нет общих слотов; эти слоты используются с использованием слотов Map или Reduce. Проблема возникает, когда вы запускаете MapReduce, на котором изначально начинается фаза карты, и в течение этого времени ни один из слотов сокращения не используется. Вы не увидите ожидаемых 90% использования вашего кластера, так как задачи сокращения еще не запущены. В искре такого нет. Слоты внутри исполнителя являются общими слотами, которые могут запускать Map, Reduce или целую кучу различных операций.

Что такое Apache Spark?

Apache Spark — это унифицированный вычислительный движок и набор библиотек для параллельной обработки данных на компьютерных кластерах.

  • Унифицированный. Основная цель Spark — предложить единую платформу для написания приложений для работы с большими данными. Что мы подразумеваем под единым? Spark предназначен для поддержки широкого спектра задач анализа данных, от простой загрузки данных и SQL-запросов до машинного обучения и потоковых вычислений с использованием одного и того же вычислительного механизма.
  • Вычислительный движок. В то время как Spark стремится к унификации, Spark тщательно ограничивает область применения вычислительным движком. Под этим мы подразумеваем, что Spark обрабатывает только загрузку данных из систем хранения и выполнение над ними вычислений, а не постоянное хранилище в качестве конечной цели.
  • Библиотеки. Последний компонент Spark — это его библиотеки, которые основаны на его дизайне как унифицированного механизма для предоставления унифицированного API для общих задач анализа данных.

Ключевые особенности Apache Spark

Spark — это просто, быстро, масштабируемо и унифицировано.

  1. Простота в некотором смысле проста в разработке, Spark берет на себя все сложности в фоновом режиме, используя оптимизатор катализатора, координируя различные задачи, позволяя нам сосредоточиться только на том, «что нужно сделать». часть. Выполняйте быстрые распределенные запросы ANSI SQL для сводных панелей и специальных отчетов. Работает быстрее, чем большинство хранилищ данных.
  2. Как обсуждалось выше, он очень быстрый по сравнению со своим предшественником. Выполняйте исследовательский анализ данных (EDA) на данных петабайтного масштаба, не прибегая к субдискретизации.
  3. Spark может масштабироваться от одной машины до кластера, состоящего из 1000 машин, без нашего ручного вмешательства. Обучайте алгоритмы машинного обучения на ноутбуке и используйте тот же код для масштабирования до отказоустойчивых кластеров из тысяч машин.
  4. Унифицированный в смысле пакетной обработки ваших данных и потоковой передачи в реальном времени с использованием предпочитаемого вами языка: Python, SQL, Scala, Java или R.

После успеха Spark AMPlab передала Spark в Apache Software Foundation в качестве долгосрочного, независимого от поставщиков дома для проекта. Apache Spark — это новый стандарт эффективной и быстрой обработки больших данных. Он доступен для разных языков, таких как Scala, Python, Java и R. Текущая версия выпуска на момент написания этого блога — 3.3.0, в ней много новых функций, таких как AQE и DPP, которые я буду обсуждать в своих следующих блогах.