В этой статье будут объяснены некоторые основные концепции Hadoop и ограничения MapReduce, что приведет к основной идее Spark.
Эта статья была впервые опубликована в публичном аккаунте WeChat [Программирование, ориентированное на данные].
Изначально Hadoop создавался как технология больших данных. После многих лет разработки Hadoop больше не относится только к определенной технологии, а представляет собой целую экосистему больших данных.
Суть Hadoop — распределенная система.Поскольку одна машина не может выполнять хранение и обработку больших данных, необходимо хранить данные на разных машинах и позволять пользователям получать доступ к данным и управлять ими, как если бы они обращались к данным. одной машины. . Для решения этой задачи Hadoop предложил две концепции: HDFS и MapReduce.
HDFS
То есть решение для распределенного хранения данных, его функция заключается в хранении большого количества данных в кластере, состоящем из нескольких машин, и каждая машина хранит часть данных.
Предполагая, что левая сторона — это набор данных, который мы хотим сохранить, кластер HDFS содержит узлы хранения, а именно узел данных 1, 2, 3 справа и узел имени, который используется для хранения местоположения каждого блока данных. Например, теперь нам нужно получить доступ к синим блокам данных и зеленым блокам данных, которые разделены на следующие шаги:
-
Клиент отправляет запрос узлу имен, чтобы получить расположение синего блока данных и зеленого блока данных.
-
Name Node возвращает адреса Data Node1 и Data Node2.
-
Клиентский доступ к Data Node1 и Data Node2
Если мы хотим добавить данные в кластер, выполните следующие действия:
-
Клиент отправляет запрос на запись в Name Node.
-
Узел имени подтверждает запрос и возвращает адрес узла данных.
-
Начните запись данных по адресу назначения, и соответствующая машина вернет сообщение с подтверждением успешной записи после успешной записи.
-
Клиент отправляет информацию подтверждения на узел имен.
Видно, что наиболее важным узлом всего кластера является узел имен, который управляет информацией всей файловой системы и планированием соответствующих файловых операций. Конечно, в кластере не обязательно должен быть только один Name Node.Если есть только один Name Node, весь кластер перестанет работать, когда он перестанет обслуживать.
Вышеупомянутые концепции и операции, такие как хранение данных и доступ к ним, являются лишь простейшими случаями. Реальная ситуация намного сложнее. Например, кластеру также необходимо выполнять резервное копирование данных. Когда новые данные записываются, также происходит сложный процесс для запись резервных данных.
MapReduce
MapReduce — это абстрактная модель программирования, которая упрощает распределенную обработку данных с помощью двух операций: Map и Reduce. До появления MapReduce обработка данных распределенными кластерами была очень сложной, потому что если мы хотели, чтобы распределенные кластеры выполняли какую-то задачу, нам сначала нужно было разложить эти задачи на множество подзадач, а затем назначить эти подзадачи на разные После машины наконец завершает подзадачи, ему необходимо объединить и обобщить результаты подзадач.
Хотя MapReduce абстрагирует этот процесс, он делит машины на две категории: главные и рабочие. Мастер отвечает за планирование работы, а Рабочий — это машина, которая фактически выполняет задачу. Worker также можно разделить на два типа: Mapper и Reducer. Mapper в основном отвечает за выполнение подзадач, а Reducer отвечает за обобщение результатов выполнения каждого Mapper.
Объяснить этот процесс можно на простом примере, например, сейчас нам нужно посчитать количество тузов из стопки игральных карт, затем мы разделим игральные карты на несколько частей, и каждый человек (маппер) считает среди карты, которые раздаются.По количеству тузов есть стопка 1, а есть стопка 2. Наконец, когда каждый человек закончил, результаты суммируются (Reduce), то есть количество тузов во всей стопке карт.
Конечно, реальная задача состоит не только из этих двух операций, но и включает в себя Split, то есть вырезание данных, Shuffle, то есть классификацию данных и другие операции. Дизайн этих операций также особенно деликатный, если он не спроектирован должным образом, это может повлиять на производительность всей системы.
- Сокращение должно быть завершено после карты. Если данные не разделены разумно, весь процесс будет сильно задержан.
- Map и Reduce несколько бессильны в обработке сложной логики.
- Узкое место в производительности, потому что промежуточные результаты, обработанные MapReduce, необходимо хранить в HDFS, поэтому время записи сильно влияет на производительность.
- Задержка каждой задачи огромна, она подходит только для пакетной обработки данных и не подходит для обработки данных в реальном времени.
Spark
Появление Spark в определенной степени решает вышеперечисленные проблемы и может использоваться как замена MapReduce. Его скорость намного превышает MapReduce от Hadoop.
Чтобы выполнить эту одноэтапную задачу, не требующую многократного чтения и записи с жесткого диска, Spark предлагает новую идею, а именно RDD, абстракцию данных на основе распределенной памяти.
Полное название RDD — Resilient Distributed Datasets, который представляет собой устойчивый распределенный набор данных.На основе RDD Spark определяет множество операций с данными, что значительно улучшает представление логики по сравнению с MapReduce.
Конечно, концепцию RDD очень сложно понять, это не реальная вещь, а логическая концепция, в реальном физическом хранилище реальные данные по-прежнему хранятся в разных узлах. Он имеет следующие характеристики:
- раздел
- неизменный
- может работать параллельно
раздел
Разделение означает, что данные в одном и том же RDD хранятся в разных узлах кластера, что обеспечивает возможность их параллельной обработки. Как упоминалось ранее, RDD — это логическая концепция, это просто форма организации данных, мы можем использовать следующую схему, чтобы проиллюстрировать эту организационную структуру:
неизменный
Каждый RDD доступен только для чтения, и содержащаяся в нем информация о разделе не может быть изменена. Поскольку существующий RDD нельзя изменить, каждая операция с данными в результате будет генерировать новый RDD. Каждый раз, когда создается новый RDD, нам нужно записывать, через какой RDD он преобразуется, поэтому существует зависимость между новым и старым RDD. Одно из преимуществ этого заключается в том, что нет необходимости хранить данные, полученные на каждом этапе. , Если это не удается, просто откатитесь к своему предыдущему RDD и повторите операцию, не повторяя все операции. Детали конкретных зависимостей здесь объясняться не будут, логика реализации более сложная, и позже будут статьи, объясняющие ее.
Параллельная работа
Как упоминалось ранее, данные в одном и том же RDD хранятся в разных узлах кластера, именно эта особенность обеспечивает возможность их параллельной обработки. Поскольку данные разных узлов могут обрабатываться отдельно,
Например, сейчас группа людей держит в руках несколько видов фруктов.Если вы хотите очистить эти фрукты в порядке их видов, например, сначала очистить яблоки, потом груши, а в последнюю очередь персики, это должен быть вид фруктов в разных руках.Выполняйте параллельные задачи. Если один человек полон яблок, а другой полон груш, можно продолжить только после того, как один человек закончит нарезать другого.
Суммировать
По сравнению с MapReduce в Spark было внесено несколько улучшений, что привело к значительному увеличению производительности.
- Spark помещает рабочие данные в память, а не на жесткий диск, что значительно повышает скорость чтения и записи.
- Результат каждой операции в задаче Spark не нужно записывать на жесткий диск, а только фиксируются зависимости между операциями, что повышает отказоустойчивость и значительно снижает стоимость задач восстановления
- Используйте секционирование для параллельной обработки данных.