簡體   English   中英

MRJob確定是運行內聯,本地,emr還是Hadoop

[英]MRJob determining if running inline, local, emr or hadoop

使用幾年前的一些舊代碼進行構建,將commoncrawl數據集與使用MRJob的EMR一起使用。 該代碼使用以下內部MRJob子類映射器函數來確定是在本地運行還是在emr上運行:

self.options.runner == 'emr'

這似乎從未起作用或不再起作用,self.options.runner不會傳遞給任務,因此始終設置為默認值'inline' 問題是,是否有辦法確定代碼是在本地運行還是在當前版本的MRJob(v0.5.0)上的emr上運行。

我找到了一個解決方案,但是如果有人知道,我仍在尋找內置解決方案。 您可以添加一個自定義傳遞選項,該選項將傳遞給您的任務 ,如下所示:

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運行時必須傳遞--platform remote

感謝@pykler和@ sebastian-nagel發布有關此內容的信息,因為試圖讓Common Crawl Python示例在Amazon EMR上運行一直是一件令人頭疼的事情。

作為對@pykler發布的解決方案的回應,我相信此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']檢查中的if self.options.runner in ['emr', 'hadoop'] ,可以保留原樣,並且只需正常傳遞-r emr選項即可在EMR上運行。

另外,在EMR上運行導入mrcc模塊的腳本時似乎存在問題。 我收到一個ImportError說找不到模塊。

要解決此問題,您應該創建一個要運行的代碼的新文件,並將from mrcc import CCJob import替換為實際的mrcc.py代碼。 這在cc-mrjob存儲庫的此fork顯示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM