如何传递一个google mapreduce参数给done_callback



我在通过start_map启动mapreduce时设置参数有问题,所以我可以在done_callback中访问它。我读过的很多东西都暗示这是可能的,但不知怎么的,我没有把地球-月亮-星星正确地排列好。最后,我想要完成的是删除我为mapreduce作业创建的临时blob。

我是这样启动它的:

mrID = control.start_map(
    "Find friends",
    "findfriendshandler.findFriendHandler",
    "mapreduce.input_readers.BlobstoreLineInputReader",
    {"blob_keys": blobKey},
    shard_count=7,
    mapreduce_parameters={'done_callback': '/fnfrdone','blobKey': blobKey})

done_callback中context对象不可用:

class FindFriendsDoneHandler(webapp.RequestHandler):
  def post(self):
     ctx = context.get()
     if ctx is not None:
        params = ctx.mapreduce_spec.mapper.params
        try:
           blobKey = params['blobKey']
           logging.info(['BLOBKEY ' + blobKey])
        except KeyError:
           logging.info('blobKey key not found in params')
     else:
        logging.info('context.get did not work')         #THIS IS WHAT GETS OUTPUT

谢谢!

编辑:似乎可能有多个MR库,所以我想包括我的各种导入:

from mapreduce import control
from mapreduce import operation as op
from mapreduce import context
from mapreduce import model

下面是我在done_callback处理程序中用于检索blobKey用户参数的代码:

class FindFriendsDoneHandler(webapp.RequestHandler):
  mrID = self.request.headers['Mapreduce-Id']           
  try:
     mapreduceState = MapreduceState.get_by_key_name(mrID)   
     mrSpec = mapreduceState.mapreduce_spec
     jsonSpec = mrSpec.to_json()
     jsonParams = jsonSpec['params']
     blobKey = jsonParams['blobKey']
     blobInfo = BlobInfo.get(blobKey)
     blobInfo.delete()
     logging.info('Temp blob deleted successfully for mapreduce:' + mrID)
  except:
     logging.warning('Unable to delete temp blob for mapreduce:' + mrID)

使用通过报头传递给done回调的mapreduce ID从mapreduce状态表中检索mapreduce状态模型对象。该模型将通过start_map发送的任何用户参数存储在mapreduce_spec属性中,该属性是json格式的。

注意MR本身实际上将blob_key存储在mapreduce_spec的其他地方。

再次感谢@Nick为我指出model.py源文件。

我很想知道是否有更简单的方法来获取MR用户参数…

Context只对mapping/reducers可用——它主要关注那些在上下文之外没有意义的东西。但是,从源代码中可以看到,设置了"mapreduce - ID"头,从中可以获得mapreduce作业的ID。

你不需要自己清理,mapreduce有一个处理程序可以帮你清理。

相关内容

  • 没有找到相关文章

最新更新