1

Я хочу произвести вывод моей функции карты, фильтруя данные по датам.Как передать аргументы в потоковое задание на Amazon EMR

В местных тестах я просто вызовите приложение проходящее даты в качестве параметров, как:

cat access_log | ./mapper.py 20/12/2014 31/12/2014 | ./reducer.py 

Тогда параметры берутся в функции отображения

#!/usr/bin/python 
date1 = sys.argv[1]; 
date2 = sys.argv[2]; 

Вопрос заключается в том: Как Я передаю параметры даты на карту, набрав Amazon EMR?

Я новичок в Map reduce. Поблагодарите любую помощь.

ответ

1

Прежде всего, Когда вы запускаете локальный тест, и вы должны как можно чаще. правильный формат (для того, чтобы воспроизвести как карта-свертка работы) является:

cat access_log | ./mapper.py 20/12/2014 31/12/2014 | sort | ./reducer.py | sort 

Это путь рамки Hadoop работает.
Если вы ищете большой файл, вы должны сделать это, чтобы проверить результаты каждой строки.
смысл:

cat access_log | ./mapper.py 20/12/2014 31/12/2014 > map_result.txt 
cat map_result.txt | sort > map_result_sorted.txt 
cat map_result_sorted.txt | ./reducer.py > reduce_result.txt 
cat reduce_result.txt | sort > map_reduce_result.txt 

Что касается основного вопроса:
Its то же самое.

Если вы собираетесь использовать амазонки веб-консоль для создания кластера, в дополнении шага окне вы просто написать, как парование:

Имени: обучения амазонки ЭМИ
Mapper: (здесь они скажите: пожалуйста, дайте нам путь s3 к вашему картографу, мы проигнорируем это и просто напишем наше имя и параметры сценария, без обратной косой черты ...) mapper.py 20/12/2014 31/12/2014
Редуктор: (то же, что и в картографе), редуктор.py (вы можете добавить сюда тоже параметры)
ввода местоположение: ...
выход Расположение: ... (только не забудьте использовать новый выходной каждый раз, или ваша задача не будет выполнена)
Аргументы: -Files s3: // треска/mapper.py, s3: //cod/reducer.py (используйте путь к файлу здесь, даже если добавить только один файл использовать -Files аргумент)

вот оно

Если вы собираетесь в общеевропейское аргумент, я предлагаю вам посмотреть this guy blog о том, как использовать передачу аргументов, чтобы использовать только одну карту, уменьшить файл.

Надеюсь, что это помогло

+0

Благодарим за ответ. Я пробовал оба способа, о которых вы говорили, 1-прохождение параметров в Mapper и Reducer напрямую. 2-Specifiyng файлы в аргументах. В обоих случаях получается, что hadoop не смог найти исполняемый файл 'mappername.py 20/12/2014 31/12/2014'. Возможно, это работает с java, но я думаю, что это невозможно сделать с потоковыми заданиями (python). Спасибо за ваше время. –

+0

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