Есть ли способ для полностью распределенной программы Hadoop / MapReduce, чтобы ее отдельные узлы считывали локальные входные файлы? - PullRequest
1 голос
/ 21 ноября 2011

Я пытаюсь настроить полностью распределенный экземпляр Hadoop / MapReduce, где каждый узел будет выполнять серию задач C ++ Hadoop Streaming на некотором входе. Однако я не хочу переносить все задачи ввода в HDFS - вместо этого я хочу посмотреть, есть ли способ чтения входных данных из локальных папок каждого узла.

Есть ли в любом случае, чтобы сделать это?

EDIT: Пример команды hadoop, которую я хотел бы запустить, выглядит примерно так:

hadoop jar $HADOOP_STREAM/hadoop-streaming-0.20.203.0.jar \
            -mapper map_example \
            -input file:///data/ \
            -output /output/ \
            -reducer reducer_example \
            -file map_example \
            -file reducer_example 

В этом случае данные, хранящиеся в каждом из моих узлов, находятся в каталоге / data /, и я хочу, чтобы вывод шел в каталог / output / каждого отдельного узла. Файлы map_example и reducer_example доступны локально во всех узлах.

Как я смогу реализовать команду Hadoop, которая, если она запускается на главном узле, тогда все подчиненные узлы, по сути, будут выполнять одну и ту же задачу на x числе узлов, что приведет к локальному выходному файлу на каждом узле (на основе локальных входных файлов)?

Спасибо

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Как отмечено по этому вопросу , это представляется возможным. Хотя я не проверял это, похоже, вы можете установить fs.default.name в conf/core-site.xml для ссылки на file URL вместо HDFS URL.

Некоторые ссылки:

0 голосов
/ 08 мая 2014

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

hadoop dfsadmin -report позволяет вам перечислить ips в кластере. Вы можете сделать каждый процесс ssh в каждом из ips и запустить маппер и редуктор.

Уменьшение карты в * nix может быть реализовано с использованием каналов.

cat <input> | c++ mapper | sort | c++ reducer > <output_location>

...