2010-03-25 4 views
4

Я тестирую рабочие места в EMR, и каждый тест занимает много времени, чтобы начать работу. Есть ли способ сохранить сервер/мастер-узел в Amazon EMR? Я знаю, что это можно сделать с помощью API. Но я хотел знать, можно ли это сделать в консоли aws?Amazon Elastic Map Уменьшить - сохранить сервер в живых?

+0

Проверьте верхний ответ тот же вопрос здесь: http://stackoverflow.com/questions/6880283/re-use-amazon-elastic-mapreduce-instance –

ответ

0

Чтобы сохранить работоспособность машины, запустите интерактивную сессию свиньи. Тогда машина не выключится. Затем вы можете выполнить свою логику карты/сокращения из командной строки, используя:

cat infile.txt | yourMapper | sort | yourReducer > outfile.txt 
+0

Вам нужно будет SSHing в мастер, и эта цепочка команд не запускается в Hadoop, поэтому нет параллелизма. –

2

Вы не можете сделать это с консоли AWS. Процитировать руководство разработчика

Вкладка Amazon Elastic MapReduce в консоли управления AWS не поддерживает добавление шагов к потоку задания.

Вы можете сделать это через CLI и API, создав поток задания, а затем добавив к нему шаги.

$ ./elastic-mapreduce --create --active --stream 
+0

На самом деле вам даже не нужно передавать --stream, просто --create --alive сделает это. –

1

Вы не можете сделать это с помощью веб-консоли - но через 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 :)