2

我想构建一个 Hadoop-Job,它基本上将 wikipedia pagecount-statistic作为输入并创建一个类似的列表

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

为此,我需要与每种语言相关的不同文章名称 - 即布鲁日(en,fr),Brügge(de),MediaWikiApi 查询 articlewise(http://en.wikipedia.org/w/api.php?action=query&titles =布鲁日&prop=langlinks&lllimit=500)。

我的问题是找到解决这个问题的正确方法。

我的草图方法是:

  • 逐行处理pagecount文件(行示例'de Brugge 2 48824')
  • 查询 MediaApi 并写入。like'en-Articlename: process-language-key:count'
  • 将所有 en-Articlename-values 聚合到一行(也许在第二份工作中?)

现在,为每一行查询 MediaAPI 似乎相当不方便,但目前我无法找到更好的解决方案。

您认为当前的方法是否可行,或者您能想出不同的方法吗?

旁注:创建的作业链将用于对我的(小型)Hadoop-Cluster 进行一些时间测量,因此更改任务仍然可以

编辑: 是我刚刚发现的一个非常相似的讨论..

4

1 回答 1

2

我认为在批处理期间查询 MediaApi 不是一个好主意,因为:

  • 网络延迟(您的处理速度将大大减慢)
  • 单点故障(如果 api 或您的互联网连接出现故障,您的计算将被中止)
  • 外部依赖(很难重复计算并得到相同的结果)
  • 法律问题和禁令的可能性

您的问题的可能解决方案是下载整个维基百科转储。每篇文章都以预定义的格式包含指向该文章的其他语言的链接,因此您可以轻松编写一个 map/reduce 作业来收集该信息并在英文文章名称和其余部分之间建立对应关系。

然后,您可以在 map/reduce 作业处理 pagecount-statistic 中使用对应关系。如果您这样做,您将独立于 mediawiki 的 api,加快数据处理并改进调试。

于 2012-10-15T11:47:55.243 回答