查看我之前的例子或许对你有帮助:MapReduce介绍及例子。 实现从实现的角度来看:
让我们运行起来!! Step 1 - 配置集群记住,Stack Exchange的数据量是很大的,因此我们需要有一个对等的分布式环境来处理。我们用Windows Azure,如果没有帐户的话可以注册免费试用。进入起始页面,打开HDInsight(Azure Hadoop)预设。 如果HDInsight可用便可以很容易地创建一个Hadoop集群,我创建了一个命名为stackanalyzer的集群。 集群就绪的话,你会在仪表盘界面上看到连接和管理按钮(此处没有图片)。单击“连接”按钮就将连接到集群节点,这样会打开一个远程节点的桌面连接。你也可以点击“管理”按钮打开基于Web的仪表盘界面。(如果需要,请阅读关于HDInsight的更多内容) Step 2 - 分析你的数据通过远程桌面连接到集群的头节点后就可以下载Stack Exchange数据了。你可以根据需要从Clear Bits下载Stack Exchange网站的数据。我在头结点上安装了Mu-Torrent客户端,然后下载并解压了http://cooking.stackexchange.com/的数据 – 解压出的文件是一堆XML文件。 我们感兴趣的东西在XML文件中。文件中的每一行包含一个问题或回答,如果是问题则posttypeid = 1,如果是回答则posttypeid = 2。ParentID代表回答对应的问题的ID,OwnerUserId代表做出该回答的人。 <row Id="16" PostTypeId="2" ParentId="2" CreationDate="2010-07-09T19:13:37.540" Score="3" 所以对于我们来说,我们需要提取PostTypeId=2(类型是回答)的所有发表内容的{OwnerUserId,ParentId},这是{User,Question,Votes}的一个表示。后面我们将使用这些数据生成推荐结果。 原文件的数据量很大,从中提取数据也是一个不小的工作。对于这个Cooking网站,它没有那么多的数据–但如果分析整个Stack Overflow的话,文件大小也有数GB。针对提取的这个操作我们可以使用Hadoop并编写一个自定义的MapReduce操作。 |