Когда файл из локальной системы перемещается в HDFS? - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в Hadoop, поэтому извините, если мои вопросы тривиальны.

  • Является ли локальная файловая система отличной от HDFS.
  • При создании программы mapreduce мыПуть к файлу входного файла с помощью функции fileinputformat.addInputPath ().Делит ли он эти данные на несколько узлов данных, а также выполняет входные расчеты?Если да, то как долго эти данные будут находиться в датанодах?И можем ли мы написать программу mapreduce для существующих данных в HDFS?

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

HDFS - это , а не ваша локальная файловая система - это распределенная файловая система .Это означает, что ваш набор данных может быть больше максимальной емкости хранилища одной машины в вашем кластере.HDFS по умолчанию использует размер блока 64 МБ.Каждый блок реплицируется как минимум на 3 других узла в кластере для учета избыточности (например, сбой узла).Таким образом, с HDFS вы можете рассматривать весь ваш кластер как одну большую файловую систему.

Когда вы пишете программу MapReduce и задаете свой путь ввода, он попытается найти этот путь в HDFS.Затем входные данные автоматически делятся на так называемые входные разбиения - разделы фиксированного размера, содержащие несколько записей из вашего входного файла.Mapper создается для каждого из этих разделений.Затем функция map (которую вы определяете) применяется к каждой записи в каждом разбиении, а сгенерированный вывод сохраняется в локальной файловой системе узла, из которого была запущена функция map.Reducer затем копирует этот выходной файл в свой узел и применяет функцию reduce.В случае ошибки времени выполнения при выполнении map и сбоя задачи Hadoop будет запускать ту же задачу сопоставления на другом узле и получать копию редуктора, которая выводит.

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

0 голосов
/ 11 мая 2018

Группировка ответов по вопросам:

HDFS против локальной файловой системы

Да, HDFS и локальная файловая система отличаются. HDFS - это файловая система на основе Java, которая является слоем над собственной файловой системой (например, ext3). Он предназначен для распределенного, масштабируемого и отказоустойчивого.

Как долго узлы данных хранят данные?

Когда данные попадают в HDFS, они разбиваются на блоки, реплицируются 3 раза (по умолчанию) и распределяются по узлам данных кластера. Этот процесс все делается автоматически. Эти данные будут оставаться в узлах данных до тех пор, пока они не будут удалены и окончательно удалены из корзины.

Расчет InputSplit

FileInputFormat.addInputPath () указывает файл или каталог HDFS, из которых файлы должны быть прочитаны и отправлены картографам для обработки. До того, как эта точка будет достигнута, данные должны быть уже доступны в HDFS, поскольку теперь они пытаются обрабатываться. Таким образом, сами файлы данных были разбиты на блоки и реплицированы по всем узлам данных. Отображение файлов, их блоков и узлов, на которых они находятся - это поддерживается главным узлом, называемым NameNode.

Теперь, основываясь на входном пути, указанном этим API, Hadoop будет вычислять количество InputSplits, необходимое для обработки файла (ов). Расчет InputSplits выполняется в начале работы с помощью MapReduce. Каждый InputSplit затем обрабатывается картографом. Все это происходит автоматически при выполнении задания.

MapReduce на существующих данных

Да, программа MapReduce может работать с существующими данными в HDFS.

0 голосов
/ 11 мая 2018

1 : HDFS на самом деле является решением распределенного хранилища, и в локализованном хранилище будет больше потолков и проблем с резервным копированием. HDFS - это ресурс хранилища кластера серверов в целом, через каталог хранения nameNode и управление информацией о блоках, dataNode отвечает за контейнер хранилища блоков. HDFS можно рассматривать как абстрактное локализованное хранилище более высокого уровня, и его можно понять, решив основную проблему распределенного хранилища.

2: если мы используем hadoop fileinputformat, сначала он создает метод open () для filesystem и получает соединение с namenode для получения сообщений о местоположении, которые возвращают эти сообщения клиенту. затем создайте fsdatainputstream для чтения из разных узлов по одному .. в конце закройте fsdatainputstream

если мы поместим данные в hdfs клиент, данные будут разделены на несколько данных и помещены на другую машину (больше 128M [64M])
Постоянство данных хранится на жестком диске

ТАК, если ваш файл намного больше, чем требует общий сервер, и вам нужны распределенные вычисления, вы можете использовать HDFS

...