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