Я тестирую рабочие места в EMR, и каждый тест занимает много времени, чтобы начать работу. Есть ли способ сохранить сервер/мастер-узел в Amazon EMR? Я знаю, что это можно сделать с помощью API. Но я хотел знать, можно ли это сделать в консоли aws?Amazon Elastic Map Уменьшить - сохранить сервер в живых?
ответ
Чтобы сохранить работоспособность машины, запустите интерактивную сессию свиньи. Тогда машина не выключится. Затем вы можете выполнить свою логику карты/сокращения из командной строки, используя:
cat infile.txt | yourMapper | sort | yourReducer > outfile.txt
Вам нужно будет SSHing в мастер, и эта цепочка команд не запускается в Hadoop, поэтому нет параллелизма. –
Вы не можете сделать это с консоли AWS. Процитировать руководство разработчика
Вкладка Amazon Elastic MapReduce в консоли управления AWS не поддерживает добавление шагов к потоку задания.
Вы можете сделать это через CLI и API, создав поток задания, а затем добавив к нему шаги.
$ ./elastic-mapreduce --create --active --stream
На самом деле вам даже не нужно передавать --stream, просто --create --alive сделает это. –
Вы не можете сделать это с помощью веб-консоли - но через API и программирования инструментов, вы сможете добавить несколько шагов к длительной работе, которая является то, что я делаю. Таким образом, вы можете запускать задания один за другим в одном и том же многолетнем кластере без необходимости повторного создания нового.
Если вы знакомы с Python, я настоятельно рекомендую библиотеку Boto. Другие инструменты AWS API также позволяют вам это делать.
Если следовать Boto EMR tutorial, вы найдете некоторые примеры:
Просто чтобы дать вам представление о том, что это то, что я делаю (с потоковыми рабочих мест):
# Connect to EMR
conn = boto.connect_emr()
# Start long-running job, don't forget keep_alive setting
jobid = conn.run_jobflow(name='My jobflow',
log_uri='s3://<my log uri>/jobflow_logs',
keep_alive=True)
# Create your streaming job
step = StreamingStep(...)
# Add the step to the job
conn.add_jobflow_steps(jobid, [step])
# Wait till its complete
while True:
state = conn.describe_jobflow(jobid).steps[-1].state
if (state == "COMPLETED"):
break
if (state == "FAILED") or (state == "TERMINATED") or (state == "CANCELLED"):
print >> sys.stderr, ("EMR job failed! Message = %s!") % (state)
sys.exit(1)
time.sleep (60)
# Create your next job here and add it to the EMR cluster
step = StreamingStep(...)
conn.add_jobflow_steps(jobid, [step])
# Repeat :)
Проверьте верхний ответ тот же вопрос здесь: http://stackoverflow.com/questions/6880283/re-use-amazon-elastic-mapreduce-instance –