Как сохранить выход карты в отдельном узле ??? - PullRequest
1 голос
/ 31 октября 2011

Я хочу хранить данные в разных узлах в hadoop.

например:

Node - 1 >> Animal.txt
Node - 2 >> Sports.txt
Node - 3 >> Life.txt
.
.
.
Node - n >> nnnnn.txt

Есть ли способ сделать это.

** Извините, если мое описание слабое.

Ответы [ 3 ]

1 голос
/ 31 октября 2011

Может быть возможно разделить ваши данные так, чтобы каждое подмножество (животные, спорт, жизнь) было локальным для одного и того же узла, хотя вы не можете надежно выбрать идентификатор физического узла, на котором они хранятся.

Пока вы можете программно идентифицировать каждую запись как часть набора (животное, спорт, жизнь и т. Д. В вашем случае), вы можете реализовать свой собственный Partitioner . Это похоже на реализацию хеш-функции, когда все ключи с одинаковым хеш-кодом будут сокращены одним и тем же редуктором.

[Исходный ввод] -> [Identity Mapper] -> [Ваш пользовательский Partitioner] -> [Identity Reducer]

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

0 голосов
/ 31 октября 2011

Базовое хранилище данных (HDFS) полностью скрывает, где данные фактически хранятся. Таким образом, зная, что это для вашего приложения «вам не нужно это знать».

С другой стороны, мне довольно любопытно, почему вы хотите это контролировать?

0 голосов
/ 31 октября 2011

Храня файлы на определенных узлах, вы побеждаете точку HDFS - она ​​имеет избыточные копии. Я не думаю, что вы должны использовать HDFS, хотя. Вы можете создать редукторное задание для записи в локальную файловую систему, но я не рекомендую это.

...