4

Nutch
が Hadoop クラスターでどのように機能するのか疑問に思っています。ジョブを他のノードにどのように分割しますか? クラスター内の異なるノードが同じ URL を要求しないことをどのように保証しますか?
前もって感謝します。

4

1 に答える 1

6

Nutch のフェーズは次のとおりです: 注入 -> 生成 -> フェッチ -> 解析 -> 更新 -> インデックス

これらの Fetch フェーズのうち、nutch が URL のリクエストを送信する場所です (したがって、このフェーズと生成フェーズについてのみ説明します)。

生成フェーズでは、crawldb に URL のフェッチ リストを作成します。fetchlist の作成中、パーティショニング機能はホスト名に基づいているため、通常、同じホストに属する URL は同じパーティションに分類されます。したがって、最終的なフェッチ リストは次のようになります。

fetch list 1 : all urls of host a1, b1, c1
fetch list 2 : all urls of host a2, b2, c2
.............
.............

これで、Fetch フェーズがこれらの fetchlist を読み取るときに、各 fetchlist は fetch フェーズの単一のマッパーに /assigned によって処理されます。そう、

number of reducers in generate partition phase 
                        = the number of fetchlists created
                        = number of maps in fetch phase

フェッチ フェーズのマッパーがホスト A の URL の束を取得した場合、他のマップには同じホストの URL はありません。もちろん、各マップは複数のホストの URL を持つことができますが、他のマッパーはそれらのホストからの URL を持つことはありません。

今、フェッチのマッパーを深く掘り下げます:

たとえば、n 個のホスト h1、h2、... hn の URL があります。次に、ホストごとにフェッチキューが形成されます。すべての URL (フェッチ項目) は、それぞれのホストの fetchqueue に取り込まれます。フェッチャー スレッドは fetchqueues をポーリングし、そこから URL を取得して要求を送信し、結果を hdfs に書き戻します。これが完了すると、処理可能な他の fetchitem(url) を探します。

なんとか分かりやすく混乱させることができたと思います。詳細については、作業用のFetcher.javaコードを参照してください。

注: URL は IP に基づいてグループ化することもできます。ホスト名/IP に基づいて URL をグループ化しないように微調整することもできます。これらはどちらも yr 構成に依存します。デフォルトでは、URL のグループ化にホスト名が使用されます。

于 2012-04-29T16:24:14.497 に答える