2016-04-23 9 views
0

私はMRJobを使用してEMRでbuilding on some old code from a few years back using the commoncrawl datasetです。MRJobは、インライン、ローカル、emr、またはハーフープを実行しているかどうかを確認します

self.options.runner == 'emr' 

これはどちらか働いたことはないように思われなかったり、もはやself.options.runnerがタスクに渡されていない、動作します:コードは、ローカルまたはEMR上で実行されているかどうかを判断するために、次の内部MRJobサブクラスマッパー機能を使用しています常にデフォルトの'inline'に設定されています。問題は、現在のバージョンのMRJob(v0.5.0)でコードがローカルで実行されているのか、emrで実行されているのかを判断する方法があるかどうかです。

+0

同じエラーが発生しました。この問題は現在、https://github.com/commoncrawl/cc-mrjob/issues/7で追跡されています。 –

答えて

0

私は1つの解決策を見つけましたが、誰かがそれを知っていれば私はまだ組み込みのソリューションを探しています。

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 

リモート

0

を実行するときに--platform remoteに合格しなければならない一般的なクロールのPythonを取得しようとして、これについて投稿するため@pyklerと@のセバスチャン・ナーゲルするありがとう:そうは次のようになりYou can add a custom passthrough option that gets passed to your tasks、 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']チェックすなわち、あるとして残し、それすることができます-r emrオプションを通常どおりに渡すだけでEMRで動作するはずです。

また、mrccモジュールをインポートするスクリプトをEMRで実行しているときに問題が発生しているようです。モジュールが見つかりませんでした。ImportErrorがあります。

これを回避するには、のインポートを実際のmrcc.pyコードに置き換えて実行するコードの新しいファイルを作成する必要があります。これはcc-mrjobレポのshown in this forkです。

関連する問題