0

問題の背景: 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 で同じことを行う場合の違いが大きい理由を教えてください。

4

1 に答える 1

0

スタンドアロン (ハード ディスクに直接) を実行し、Hadoop クラスターと統合すると、Nutch フェッチの動作が変化することがわかりました。Generator スコアのフィルタリングは、Hadoop クラスターではるかに高いように見えるため、「-topN」設定を十分に高くする必要があります。

デフォルト値の 5 ではなく、高い (少なくとも 1000) "-topN" でクロールを実行することをお勧めします。

これは、ここでの私の回答に似ています。

これを行った後、Nutch がスタンドアロンでクロールし、HDFS がより適切に動作するようになったことがわかりました。

于 2012-07-28T00:38:51.620 に答える