2016-04-23 4 views
0

Я building on some old code from a few years back using the commoncrawl dataset с использованием EMR с использованием MRJob. Код использует следующий внутри MRJob подкласс функцию картографа, чтобы определить, является ли работает локально или на ОМ:MRJob определение, если он работает inline, local, emr или hadoop

self.options.runner == 'emr' 

Это, кажется, не ни разу не работал или больше не работает, self.options.runner не передается через задачу и поэтому всегда устанавливается значение по умолчанию 'inline'. Вопрос в том, есть ли способ определить, выполняется ли код локально или на emr с текущей версией MRJob (v0.5.0).

+0

Похожая ошибка. Проблема теперь отслеживается на странице https://github.com/commoncrawl/cc-mrjob/issues/7 –

ответ

0

Я нашел одно решение, но я все еще ищу встроенное решение, если кто знает об этом. You can add a custom passthrough option that gets passed to your tasks, который будет выглядеть так:

class CCJob(MRJob): 

def configure_options(self): 
    super(CCJob, self).configure_options() 
    self.add_passthrough_option(
    '--platform', default='local', choices=['local', 'remote'], 
    help="indicate running remotely") 

def mapper(self, _, line): 
    if self.options.platform == 'remote': 
    pass 

И вы должны пройти --platform remote при работе удаленно

0

Спасибо @pykler и @ Себастиан-Nagel для размещения об этом, как пытаются получить Common Crawl Python пример работы с Amazon EMR был головной болью.

В ответ на решение @pykler публикуемого, я считаю, что есть более идиоматический способ это shown in this PDF:

class CCJob(MRJob): 
    def configure_options(self): 
    super(CCJob, self).configure_options() 
    self.pass_through_option('--runner') 
    self.pass_through_option('-r') 

, а затем остальная часть коды, то есть if self.options.runner in ['emr', 'hadoop'] проверки, можно оставить как есть и должен работать с EMR, просто передавая -r emr как обычно.

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

Чтобы обойти это, вы должны создать новый файл кода, который вы хотите запустить, с заменой импорта from mrcc import CCJob на фактический код mrcc.py. Это shown in this fork репо cc-mrjob.

 Смежные вопросы

  • Нет связанных вопросов^_^