Запустив Hadoop MapReduce, можно ли вызывать внешние исполняемые файлы вне HDFS - PullRequest
7 голосов
/ 03 сентября 2011

В моем картостроителе я бы хотел вызвать внешнее программное обеспечение, установленное на рабочем узле вне HDFS. Это возможно? Каков наилучший способ сделать это?

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

Ответы [ 2 ]

5 голосов
/ 04 сентября 2011

Мапперы (и редукторы) похожи на любой другой процесс на коробке - если у пользователя TaskTracker есть разрешение на запуск исполняемого файла, проблем с этим нет. Есть несколько способов вызова внешних процессов, но, поскольку мы уже находимся в Java, ProcessBuilder кажется логичным началом.

РЕДАКТИРОВАТЬ: только что обнаружил, что Hadoop имеет класс явно для этой цели: http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/util/Shell.html

0 голосов
/ 05 сентября 2011

Это, безусловно, выполнимо.Возможно, вам будет удобнее работать с Hadoop Streaming .Как сказано на этом сайте:

Потоковая передача Hadoop - это утилита, поставляемая с дистрибутивом Hadoop.Утилита позволяет создавать и запускать сопоставления / сокращения заданий с любым исполняемым файлом или сценарием в качестве сопоставителя и / или редуктора.

Я склонен начинать с внешнего кода внутри потоковой передачи Hadoop.В зависимости от вашего языка, есть много хороших примеров того, как использовать его в потоковом режиме;Как только вы попадаете на свой язык, вы можете при желании передать данные в другую программу.У меня было несколько слоев программ на разных языках, играющих без особых усилий, чем если бы я запускал его на обычном Linux-компьютере, за исключением того, что внешний слой работал с Hadoop Streaming.

...