我有存储在文件系统HDFS 2个文件:你在一个Hadoop MapReduce工作的意见
tbl_userlog:
<website url (non canonical)> <tab> <username> <tab> <timestamp>
- 例如:www.website.com,foobar87,201101251456
tbl_websites:
<website url (canonical)> <tab> <total hits>
- 例如:website.com,25889
我已经写的连接本网站上的2档的作业序列的Hadoop,执行对总点击量的过滤器>每网站n和然后为每个用户计算他访问过的网站总数> n总点击数。该序列的细节如下:这canonicizes在tbl_userlog网址
- 脉谱图唯一的工作(即去除WWW,HTTP://从URL字段://和https)
- 一个地图这对URL进行排序tbl_websites -only工作
- 的身份映射简化工作,这需要2个以前的工作作为KeyValueTextInput的输出,为了将它们送至一个CompositeInput利用与
jobConf.set("mapred.join.expr", CompositeInputFormat.compose("inner" (...))
定义Hadoop本地连接特征的
- 一个Map和Reduce作业,它在前一个作业的结果中对总点击次数> n进行过滤,将结果分组n在混洗阶段,并在Reduce阶段对每个用户的网站数量进行计数。
为了链这些步骤,只需要调用作业顺序中所描述的顺序的。每个单独的作业都会将其结果输出到HDFS,然后链中的以下作业将依次进行检索和处理。
由于我是新来的Hadoop,我想问一下您的咨询:
- 是否有链这些工作更好的办法?在此配置中,所有中间结果都写入HDFS,然后回读。
- 你是否看到这份工作有任何设计缺陷,或者可以通过使用我已经错过的一些Hadoop功能来更优雅地编写它?
我使用Apache Hadoop的0.20.2,并使用更高级别的框架,如猪或蜂房是不可能在项目的范围。
在此先感谢您的答复!
该算法的意图是什么?是否要查找每个用户访问的网站数量,因为该网站的总点击次数> n?另外,你能澄清这个问题应该是什么吗?您是否正在寻找一个工作流程管理工具(如oozie,由另一张海报推荐)还是您正在寻找特定工作流程的验证? – 2012-02-27 23:41:52
@Pradeep Gollakota:是的,这项工作的目标是为每个用户找到他访问过的总点击量> n的网站数量。我不在寻找任何管理工具(尽管我会看看Oozie,看起来很有前途),但我只是在寻找对我的特定工作流程和设计的验证。我的问题尤其是:您如何使用_only plain Hadoop_设计此工作流程? – Namux 2012-02-28 09:01:04