2016-04-23 10 views
0

Ich bin building on some old code from a few years back using the commoncrawl dataset mit EMR mit MRJob. Der Code verwendet die folgende innerhalb MRJob Unterklasse Mapperfunktion, um zu bestimmen, ob lokal oder auf emr läuft:MRJob Feststellung, ob inline läuft, lokal, emr oder hadoop

self.options.runner == 'emr' 

Dies scheint entweder noch nie gearbeitet oder nicht mehr funktioniert, self.options.runner nicht durch die Aufgaben übergeben wird und ist daher immer auf den Standardwert 'inline' eingestellt. Die Frage ist, gibt es eine Möglichkeit festzustellen, ob der Code lokal oder auf emr mit der aktuellen Version von MRJob (v0.5.0) ausgeführt wird.

+0

Bekam den gleichen Fehler. Das Problem wird nun unter https://github.com/commoncrawl/cc-mrjob/issues/7 verfolgt –

Antwort

0

Ich habe eine Lösung gefunden, aber ich suche immer noch nach einer integrierten Lösung, wenn jemand davon weiß. You can add a custom passthrough option that gets passed to your tasks, die wie so aussehen:

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 

Und Sie müssen --platform remote passieren beim Laufen remote

0

Vielen Dank für die Buchung über diese @pykler und @ sebastian-nagel, wie der Versuch, das Common Crawl Python zu erhalten Das Arbeiten mit Amazon EMR hat Kopfschmerzen bereitet.

Als Reaktion auf die Lösung @pykler geschrieben, ich glaube, es gibt eine mehr idiomatische Weise, die shown in this PDF ist:

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

und dann der Rest des Codes, dh die if self.options.runner in ['emr', 'hadoop'] Prüfung kann, bleiben wie er ist und es sollte auf EMR arbeiten, indem Sie einfach die -r emr Option als normal übergeben.

Es scheint auch ein Problem zu geben, wenn ein Skript auf EMR das mrcc Modul importiert. Ich habe eine ImportError, die besagt, dass das Modul nicht gefunden werden konnte.

Um dies zu umgehen, sollten Sie eine neue Datei des Codes erstellen, den Sie mit dem from mrcc import CCJob Import mit dem tatsächlichen Code mrcc.py ersetzt ausführen möchten. Dies ist shown in this fork des cc-mrjob Repo.