Можно ли запустить несколько задач карты в одной JVM?

Я хочу поделиться большими статическими данными в памяти (индекс RAM Lucene) для моих картографических задач в Hadoop? Есть ли способ для нескольких задач map/reduce использовать одну и ту же JVM?


person yura    schedule 02.02.2011    source источник


Ответы (4)


Задания могут разрешить повторное использование JVM задач, указав конфигурацию задания mapred.job.reuse.jvm.num.tasks. Если значение равно 1 (по умолчанию), то JVM не используются повторно (т. е. 1 задача на JVM). Если он равен -1, количество задач, которые может выполнять JVM (одного и того же задания), не ограничено. Можно также указать некоторое значение больше 1, используя API.

person Joe Stein    schedule 02.02.2011
comment
Спасибо, еще один вопрос. Эти задачи также используют какой-то загрузчик классов, поэтому все ресурсы статики будут загружаться только один раз? (Или это может работать как tomcat, таким образом, почти нет причин делиться JVM...) - person yura; 04.02.2011
comment
JVM будет очищен после завершения задачи. Этот параметр обеспечивает лучшее время выполнения только для заданий, которые не являются длительными, поскольку создание экземпляра jvm очень дорого. Вы не могли совместно использовать какие-либо ресурсы для экземпляров задач. - person Thomas Jungblut; 05.02.2011

В $HADOOP_HOME/conf/mapred-site.xml добавьте следующее свойство

<property>
    <name>mapred.job.reuse.jvm.num.tasks</name>
    <value>#</value>
</property>

# можно установить в число, чтобы указать, сколько раз JVM будет повторно использоваться (по умолчанию 1), или установить в -1 для неограниченного количества повторного использования.

person QuinnG    schedule 02.02.2011

Бессовестная вилка

Я расскажу об использовании статических объектов с повторным использованием JVM, чтобы выполнить то, что вы здесь описываете: http://chasebradford.wordpress.com/2011/02/05/distributed-cache-static-objects-and-fast-setup/

Другой вариант, хотя и более сложный, заключается в использовании распределенного кеша с отображаемым в память файлом, доступным только для чтения. Таким образом, вы также можете совместно использовать ресурс в процессах JVM.

person Chase    schedule 21.07.2011

Насколько мне известно, нет простого способа для нескольких задач карты (Hadoop) совместно использовать статические структуры данных.

На самом деле это известная проблема для текущей модели Map Reduce. Причина того, что текущая реализация не использует совместно статические данные в задачах карты, заключается в том, что Hadoop спроектирован так, чтобы быть очень надежным. В результате, если задача завершится ошибкой, произойдет сбой только ее собственной JVM. Это не повлияет на выполнение других JVM.

В настоящее время я работаю над прототипом, который может распределять работу одной JVM по нескольким ядрам (по сути, вам просто нужна одна JVM для использования нескольких ядер). Таким образом, вы можете уменьшить дублирование структур данных в памяти без затрат на использование ЦП. Следующим шагом для меня является разработка версии Hadoop, которая может выполнять несколько задач Map в рамках одной JVM, а это именно то, о чем вы просите.

Здесь есть интересный пост https://issues.apache.org/jira/browse/MAPREDUCE-2123

person Yunming Zhang    schedule 27.09.2013