Сопоставлять и уменьшать с большими наборами данных = как это работает на практике?

#java #algorithm #mapreduce

#java #алгоритм #mapreduce

Вопрос:

я был бы благодарен за совет:

http://en.wikipedia.org/wiki/MapReduce гласит: «… большая ферма серверов может использовать MapReduce для сортировки петабайта данных всего за несколько часов …» и «…Главный узел принимает входные данные, разбивает их на более мелкие подзадачи и распределяет их по рабочим узлам … «

Я совершенно не понимаю, как это будет работать на практике. Учитывая, что у меня есть SAN (хранилище) с 1 петабайтом данных. Как я могу эффективно распределять этот объем данных через «Master» на подчиненные устройства? Это то, чего я не могу понять. Учитывая, что у меня есть соединение 10 Гбит / с от SAN к ведущему, а от ведущих устройств к ведомому — 1 Гбит / с, я могу максимально «распространять» 10 Гбит за раз. Как я могу обработать петабайты в течение нескольких часов, поскольку сначала мне нужно перенести данные на «узлы-редукторы / рабочие узлы»?

Большое спасибо! Йенс

Ответ №1:

Фактически, в полномасштабном фреймворке Map / Reduce, таком как Hadoop, само хранилище данных распределено. Hadoop, например, имеет распределенную систему хранения файлов HDFS, которая обеспечивает как гибкость, так и высокую производительность. Узлы файловой системы могут использоваться как вычислительные узлы или они могут быть выделенными узлами хранения, в зависимости от того, как была развернута платформа to.

Обычно при упоминании времени вычислений в этом случае предполагается, что входные данные уже существуют в распределенном хранилище кластера. Главный узел просто передает вычислительным узлам диапазоны данных для обработки, а не сами данные.

Комментарии:

1. привет, тхкала, спасибо за ваш ответ. На всякий случай, если вы более глубоко осведомлены о работе hadoops? есть ли у вас какие-либо конкретные примеры того, как «рабочие» затем «извлекают» данные? Насколько я понимаю, Map / Reduce стандартная функция принимает более или менее «Карту» в качестве входных данных. Но где тогда реализована логика для фактического считывания данных из базовой файловой системы (и передачи их на карту). Или я должен предоставить ведущему «уникальные идентификаторы файлов», и ведущие распространяют их по кластеру, а рабочие затем используют этот идентификатор для автоматического поиска данных (поскольку у них есть идентификаторы)? Спасибо

2. @jens Детали фактического извлечения данных из базового хранилища являются частью платформы Hadoop — она делает это за вас. Все это описано в документах Hadoop и руководствах по началу работы.

Ответ №2:

Я полагаю, это потому, что главный узел выполняет управление, а не передачу данных.

Данные хранятся в распределенной файловой системе и поступают с нескольких узлов одновременно. (Нет причин для передачи данных через главный узел.)

Комментарии:

1. «Разделение и распределение» следует читать как «решает, какой узел какую часть данных принимает, и отправляет этому узлу рабочее задание». Данные доступны из общего хранилища FS, такого как хранилище данных Google.