問題の背景: Hadoop0.20.203 で Nutch1.4 を実行しています。最終出力を得るために Nutch セグメントで実行している一連の MapReduce ジョブがあります。ただし、mapreduce を実行する前にクロール全体が発生するのを待つと、ソリューションの実行時間が長くなります。セグメントがダンプされるとすぐに、セグメントで MapReduce ジョブをトリガーしています。depth=1 を指定して、ループ ('N=depth' 回) でクロールを実行しています。
以下の疑似コードを見つけてください。
ケース 1 : Hadoop で深さ = 3 を指定して Nutch をクロールします。
// NUTCH に渡す引数を格納するためのリスト オブジェクトを作成します
リストnutchArgsList = new ArrayList();
nutchArgsList.add("-depth");
nutchArgsList.add(Integer.toString(3));
<...その他のちょっとした議論...>
ToolRunner.run(nutchConf, new Crawl(), nutchArgsList.toArray(new String[nutchArgsList.size()]));
ケース 2 : depth='1' でループを 3 回クロールする
for(int depthRun=0;depthRun< 3;depthRun++) {
// NUTCH に渡す引数を格納するためのリスト オブジェクトを作成します
リストnutchArgsList = new ArrayList();
nutchArgsList.add("-depth");
nutchArgsList.add(Integer.toString(1)); //注: ここでは深さを 1 にしています
<...その他のちょっとした議論...>
ToolRunner.run(nutchConf, new Crawl(), nutchArgsList.toArray(new String[nutchArgsList.size()]));
}
深さの回数だけループ内をクロールすると、いくつかの URL が失われます (db unfetched)。
私はこれをスタンドアロンの Nutch で試しました。深さ 3 で実行した場合と、深さ 1 の同じ URL で 3 回実行した場合です。crawldb と URL の違いを比較しましたが、わずか 12 です。しかし、toolrunner を使用して Hadoop で同じことを行うと、1000 になります。 db_unfetched としての URL。
私が今まで理解している限り、Nutch トリガーは深さの値の数だけループでクロールします。提案してください。
また、ツールランナーを使用して Hadoop でこれを行う場合と、スタンドアロンの Nutch で同じことを行う場合の違いが大きい理由を教えてください。