1

3 つのステップで mapreduce ジョブを実装しようとしています。各ステップの後に、これまでのすべてのステップからのデータが必要です。マッパーまたはリデューサーの結果を mrjob でディスクに保存する方法について、例/アイデアを持っている人はいますか?

4

1 に答える 1

1

複数の入力をジョブに渡すことができます。前のジョブの出力を入力として受け取るだけです。

結果をディスクに保存したいという場合、出力がstdoutにストリーミングされることに依存しているように聞こえますか?この動作は便利なだけであり(オフにすることもできます)、MRJobではすべてがディスクから跳ね返ります。

2段階の仕事の場合、これを行うことができます。

job1 = firstMR(['-r', mode, inputDir, '-o', outputDir, '--no-output']) 
job1.set_up_logging()
with job1.make_runner() as runner1: 
    runner1.run() 
    firstOutput = runner1.get_output_dir()

job2 = secondMR(['-r', mode, firstOutput, anyOtherInput, '-o', finalOutputDir, '--no-output']) 
job2.set_up_logging()
with job2.make_runner() as runner2: 
    runner2.run() 

注意事項:

  • hadoopで実行している場合、すべてのディレクトリはおそらくhdfs:// some /path/である必要があります。
  • フラグではなく、オプションが前に付いていないMapReduceへの引数は、入力ファイルまたはディレクトリと見なされます
  • --no-outputを使用して、出力がstdoutに戻るのを停止します(上記の最初のステップで使用しました。おそらく中間結果は必要ありませんが、違いを示すために2番目のステップでは省略しました)。3つのステップが必要な場合は、最初の2つは省略し、3つ目はそのままにしておくことができます。または、3番目のステップの出力を、簡単に読み戻せるフォルダーに書き込みます。

何か障害が発生した場合は、比較的簡単なはずです。

于 2013-02-17T23:42:52.250 に答える