Вы можете использовать AWS SDK на любом языке, на котором пишете свое веб-приложение, чтобы звонить в EMR и отправлять работу. Я работаю в основном с Python, поэтому я больше всего знаком с библиотекой Python Boto, которая позволяет безболезненно загружать код и данные в s3, настраивать поток работ и запускать этот поток работ.
Вы не захотите запускать задание и возвращать результаты в том же HTTP-запросе, поскольку для запуска кластера потребуется несколько минут, прежде чем задание сможет быть запущено. Веб-приложение со страницами, которые не отвечают в течение нескольких минут, не очень удобно для пользователя. Тем не менее, просто отправка рабочего процесса занимает всего несколько секунд. Вам нужно будет создать поток работ и просто отслеживать идентификаторы потоков работ в своем веб-приложении. Учитывая идентификатор потока работ, у вас не должно быть особых проблем с получением данных журнала или выходных данных из потока работ, когда пользователь возвращается и работа завершена.
Вот пример того, как можно запустить Elastic MR с помощью Boto:
import boto
from boto.emr.step import StreamingStep
conn = boto.connect_emr()
step = StreamingStep(name='My wordcount example',
mapper='s3n://elasticmapreduce/samples/wordcount/wordSplitter.py',
reducer='aggregate',
input='s3n://elasticmapreduce/samples/wordcount/input',
output='s3n://<my output bucket>/output/wordcount_output')
jobid = conn.run_jobflow(name='My jobflow',
log_uri='s3://<my log uri>/jobflow_logs',
steps=[step])