私はウィキペディアの URL を持っており、Wiki API を使用してそのページと他の参照ページから最大 30000 ドキュメントのコンテンツをロードしたいのですが、URL をループしてそれを行うことはできますが、それは効率的な方法ではありません。これを達成できる他の方法はありますか?Hadoop で HDFS を設定するには、これが必要です。
3 に答える
ウィキメディアソフトウェアとデータベースイメージをダウンロードし、ウィキペディアを設定してローカルにアクセスできます。これは十分に説明されており、ネットを介してそのページ数を要求するよりもはるかに効率的であるはずです。参照:http ://www.igeek.co.za/2009/10/16/how-to-mirror-wikipedia/
他にも多くのソースと前処理されたページがあります。次のステップでコンテンツをどのように処理するかという質問があります。
これを行うにはいくつかの方法があります。ツールサーバーのユーザーは、すべてのメタデータに直接データベースクエリアクセスできますが、テキストにはアクセスできません。それがあなたに合っている場合は、クエリサービスを介してクエリを実行するようにそれらの1つに依頼できる場合があります。これは、リンクされているページなどを見つけて、ページIDまたはリビジョンIDのマップを作成するための非常に簡単な方法です。
それ以外の場合は、大量の作業には最適ですが、ユーザー側で処理が必要なデータベースダンプを確認してください。
最後に、ウィキペディアは大量のボットとAPIスクレイプに使用されます。理想的ではありませんが、他に適切なものがない場合は、毎秒1回新しいクエリを開始するタイマーを実行すると、8時間で完了します。
Jeff と NilsB が言っているように、HDFS を満たすためにウィキペディアをクロールする意図は間違っています。正しいのは、wiki 全体を 1 つのファイルとしてダウンロードし、それを HDFS にロードすることです。
しかし、あなたの質問の一部の詳細を抽象化すると、より一般的なものになります: Hadoop を使用して URL で指定されたサイトをクロールする方法は?
したがって、答えは、url を含むファイルを hdfs にアップロードし、マッパーを記述し (url を受け入れ、ページをダウンロードしてkey=url
andとして生成する)、各マッパーの URL の数を制御するためにNLineInputFormatvalue=page's body
を使用するようにジョブを構成する必要があるということです。処理する。そのパラメーターを制御することで、それ自体とマップ スロットの数によって並列処理のレベルを制御できます。