2011-11-13 8 views
2

map_duceをstart_map経由で起動するときにパラメータを設定する際に問題が発生しましたので、done_callbackでアクセスできます。私が読んだたくさんのことは、それが可能であることを示唆していますが、どういうわけか、地球月星が正しく整列していないのです。最終的に、私が達成しようとしているのは、mapreduceジョブ用に作成した一時的なBLOBを削除することです。google mapreduceパラメータをdone_callbackに渡すには

は、ここで私はそれをキックオフ方法は次のとおりです。done_callbackで

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}) 

は、コンテキストオブジェクトは使用できません。

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 

ありがとう!

EDIT:複数のMRライブラリがあるかもしれないように思えたので、私は私の様々な輸入品を含めたかった:

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

答えて

3

私はblobKeyにユーザパラメータを取得するために私のdone_callbackハンドラで使用されるコードです:

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) 

これは、MapReduceのからのMapReduce状態モデルのオブジェクトを取得するには、ヘッダーを介して行うコールバックに渡されたMapReduce IDを使用しています状態テーブル。このモデルは、json形式のmapreduce_specプロパティにstart_map経由で送信されたすべてのユーザーパラメータを格納します。

MRは、実際にはmapoverduce_specのどこかにblob_keyを格納しています。

私にmodel.pyソースファイルを指し示す@Nickにもう一度感謝します。

MRユーザーのパラメータを取得する簡単な方法があると聞きたいです。

1

コンテキストマッパー/減速にのみ利用可能です - それはドンのものとほぼ心配です1つの文脈の外で意味をなさない。ただし、the sourceからわかるように、「Mapreduce-Id」ヘッダーが設定されています。そこからmapreduceジョブのIDを取得できます。

あなた自身でクリーンアップを行う必要はありませんが、mapreduceにはa handlerがあります。以下は

+0

ありがとう@Nick。この作業では、処理したいテキストストリームをBLOBに入れ、それをMRとして入力します。 MRの完了後、入力BLOBはまだそこにあり、私はそれを削除する必要があります。 MRに入力BLOBファイルを削除するよう指示する方法があれば教えてください!そして、はい、MR-IDにアクセスすることはできますが、避けようとしていたテーブルに永続化しない限り、blobKeyを使用する方法は考えていません。私が何かを逃しているかどうか教えてください。 – leontx

+0

@leontx mapreduceレコードから関連情報を見つけることができるはずです。それらを取得する方法については、2番目のリンクを参照してください。 –

+0

もう一度@Nickに感謝します。私はそれを完了することができ、コードを掲示した。 – leontx

関連する問題