私は、それがフェッチ、分類、...(通常はクロール)に使用するナッチとそのアルゴリズム(私のプロジェクトに関連しているため)について知りたいと思っています(そして知る必要があります)。私はこの
資料
を読みましたが、少し理解しにくいです。
完全でわかりやすい方法でこれを私に説明できる人はいますか?
前もって感謝します。
1 に答える
短い答え
つまり、多くのコンピューター環境からWebを非常に効率的にクロールするように設計されたWebクローラーを開発しました(ただし、単一のコンピューターで実行することもできます)。
Webの実装方法を実際に知る必要なしに、Webのクロールを開始できます。
参照するページでは、その実装方法について説明しています。
その背後にある技術
それらは、MapReduceの同じラインに沿って設計されたオープンソースのJavaプロジェクトであるHadoopを利用します。MapReduceは、Googleがウェブをクロールして整理するために使用するテクノロジーです。
私はMapReduce/Hadoopに関するいくつかの講義に参加しましたが、残念ながら、現時点で誰かがそれを完全で理解しやすい方法で説明できるかどうかはわかりません(彼らは一種の反対です)。
MapReduceのウィキペディアページをご覧ください。
基本的な考え方は、ジョブをマスターノードに送信することです。マスターは作業を細かく分割し、割り当てられたサブタスクを実行するさまざまなワーカーノード(他のコンピューターまたはスレッド)に送信(マップ)してから、送信します。サブ結果はマスターに戻ります。
マスターノードがすべてのサブ結果(または一部のサブ結果)を取得すると、それらを結合(削減)して最終的な回答にし始めます。
これらのタスクはすべて同時に実行され、各コンピューターには、常に占有された状態を維持するための適切な量の作業が与えられます。
クロールする方法
4つの仕事で構成されています:
- 生む
- フェッチ
- 解析
- データベースを更新する
*生む
クロールを開始するページを含むWebページのリストから始めます:「Webテーブル」。
マスターノードは、そのリスト内のすべてのページをそのスレーブに送信します(ただし、2つのページが同じドメインを持っている場合、それらは同じスレーブに送信されます)。
スレーブは割り当てられたWebページを取得します。
- これはすでに生成されていますか?もしそうなら、それをスキップします。
- 「http://www.google.com/」と「http://www.google.com/../」は実際には同じウェブページであるため、URLを正規化します。
- ウェブページと一緒に初期スコアをマスターに返します。
(マスターは、スレーブに送信するときにWebページを分割して、すべてが同時に終了するようにします)
マスターはtopNを選択し(おそらくユーザーは最初の10ページから始めたいと思っただけです)、それらをWebテーブルで選択済みとしてマークします。
*フェッチ
マスターはWebテーブル内の各URLを確認し、それらを処理するためにスレーブにマークされたURLをマップします。
スレーブは、インターネット接続が許可するのと同じ速さでインターネットから各URLをフェッチし、各ドメインのキューを持っています。
URLとWebページのHTMLテキストをマスターに返します。
*解析
マスターは、Webテーブル内の各Webページを確認し、フェッチ済みとしてマークされている場合は、スレーブに送信して解析します。
スレーブは最初に、別のスレーブによってすでに解析されているかどうかを確認し、解析されている場合はスキップします。
それ以外の場合は、Webページを解析し、結果をWebtableに保存します。
*データベースを更新する
マスターはWebテーブル内の各Webページを調べ、解析された行をそのスレーブに送信します。
スレーブはこれらの解析されたURLを受け取り、それらのページから離れたリンクの数(およびそれらのリンクの近くのテキスト)に基づいてスコアを計算し、Urlとスコアをマスターに送り返します(マスターが取得したときにスコアでソートされます)パーティショニングのためにマスターに戻ります)。
マスターは、他のページからそれらのページへのリンクの数に基づいて、Webページのスコアを計算して更新します。
マスターはこれをすべてデータベースに保存します。
繰り返す
ページが解析されると、それらのWebページからのリンクがWebテーブルに追加されました。これで、まだ見ていないページだけでこのプロセスを繰り返して、訪問したページを拡大し続けることができます。最終的には、上記の4つの手順を十分に繰り返した後、ほとんどのインターネットにアクセスできるようになります。
結論
MapReduceはクールなシステムです。
可能な限り効率的にするために多くの努力が払われてきました。
彼らは、仕事の途中で故障し、他のスレーブに仕事を再割り当てするコンピューターを処理することができます。一部のスレーブは他のスレーブよりも高速に処理できます。
マスターは、スレーブに送信するのではなく、自分のマシンでスレーブのタスクを実行することを決定する場合があります。通信ネットワークは信じられないほど高度です。
MapReduceを使用すると、簡単なコードを記述できます。
マッパー、オプションのパーティショナー、およびレデューサーを定義します。
次に、MapReduceに、インターネット接続が遅い単一のコンピューターやキラクラスターであっても、アクセスできるすべてのコンピューターリソースを使用してこれを行うための最善の方法を見つけさせます。(多分メガクラスターでさえ)。