2

基本的にwikipedia pagecount-statisticを入力として受け取り、次のようなリストを作成 するHadoop-Jobを構築したい

en-Articlename: en:count de:count fr:count

そのためには、各言語に関連するさまざまな記事名が必要です。つまり、Brugge(en, fr)、Brügge(de) で、MediaWikiApi が記事ごとに照会します (http://en.wikipedia.org/w/api.php?action=query&titles =Bruges&prop=langlinks&lllimit=500)。

私の質問は、この問題を解決するための正しいアプローチを見つけることです。

私のスケッチしたアプローチは次のようになります。

  • pagecount ファイルを 1 行ずつ処理します (line-example 'de Brugge 2 48824')。
  • MediaApi にクエリを実行し、sth を書き込みます。like'en-Articlename: process-language-key:count'
  • すべての en-Articlename-values を 1 行に集約します (おそらく 2 番目のジョブで?)

今では、すべての行に対して MediaAPI を照会するのはかなり不便に思えますが、現在、より良い解決策について頭を悩ませることはできません。

の現在のアプローチは実現可能だと思いますか、それとも別のアプローチを考えられますか?

補足: 作成されたジョブ チェーンは、私の (小さな) Hadoop-Cluster で時間を測定するために使用されるため、タスクを変更しても問題ありません。

編集: これは、が今見つけた非常によく似た議論です..

4

1 に答える 1

2

次の理由により、バッチ処理中に MediaApi をクエリすることはお勧めできません。

  • ネットワーク遅延 (処理が大幅に遅くなります)
  • 単一障害点 (API またはインターネット接続がダウンした場合、計算は中止されます)
  • 外部依存 (計算を繰り返すのが難しく、同じ結果が得られた)
  • 法的な問題と禁止の可能性

問題の可能な解決策は、ウィキペディアのダンプ全体をダウンロードすることです。各記事には、事前定義された形式で他の言語の記事へのリンクが含まれているため、その情報を収集して英語の記事名と残りの部分との対応を構築する map/reduce ジョブを簡単に作成できます。

Then you can use the correspondence in a map/reduce job processing pagecount-statistic. If you do that you'll become independent to mediawiki's api, speed up your data processing and improve debugging.

于 2012-10-15T11:47:55.243 に答える