2012-02-27 23 views
0

我有存储在文件系统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网址

  1. 脉谱图唯一的工作(即去除WWW,HTTP://从URL字段://和https)
  2. 一个地图这对URL进行排序tbl_websites -only工作
  3. 的身份映射简化工作,这需要2个以前的工作作为KeyValueTextInput的输出,为了将它们送至一个CompositeInput利用与jobConf.set("mapred.join.expr", CompositeInputFormat.compose("inner" (...))
  4. 定义Hadoop本地连接特征的
  5. 一个Map和Reduce作业,它在前一个作业的结果中对总点击次数> n进行过滤,将结果分组n在混洗阶段,并在Reduce阶段对每个用户的网站数量进行计数。

为了链这些步骤,只需要调用作业顺序中所描述的顺序的。每个单独的作业都会将其结果输出到HDFS,然后链中的以下作业将依次进行检索和处理。

由于我是新来的Hadoop,我想问一下您的咨询:

  1. 是否有链这些工作更好的办法?在此配置中,所有中间结果都写入HDFS,然后回读。
  2. 你是否看到这份工作有任何设计缺陷,或者可以通过使用我已经错过的一些Hadoop功能来更优雅地编写它?

我使用Apache Hadoop的0.20.2,并使用更高级别的框架,如猪或蜂房是不可能在项目的范围。

在此先感谢您的答复!

+0

该算法的意图是什么?是否要查找每个用户访问的网站数量,因为该网站的总点击次数> n?另外,你能澄清这个问题应该是什么吗?您是否正在寻找一个工作流程管理工具(如oozie,由另一张海报推荐)还是您正在寻找特定工作流程的验证? – 2012-02-27 23:41:52

+0

@Pradeep Gollakota:是的,这项工作的目标是为每个用户找到他访问过的总点击量> n的网站数量。我不在寻找任何管理工具(尽管我会看看Oozie,看起来很有前途),但我只是在寻找对我的特定工作流程和设计的验证。我的问题尤其是:您如何使用_only plain Hadoop_设计此工作流程? – Namux 2012-02-28 09:01:04

回答

0

我觉得你有什么将与一些警告工作。在我开始列出它们之前,我想明确两个定义。只有地图的作业是一个具有定义的Mapper的作业,并且具有0个缩减器的run。如果作业使用> 0 IdentityReducers运行,那么作业不是纯地图作业。Reduce only作业是一个定义了Reducer的作业,并且使用IdentityMapper运行。

  1. 您的第一份工作可以是纯地图工作,因为您所做的只是对网址进行规范化。但是如果你想使用CompositeInputFormat,你应该使用一个IdentityReducer来运行多于0的reducer。
  2. 对于你的第二份工作,我不知道你是什么意思的地图专业工作。按照它的性质排序是一个减少的任务。你可能意味着它有一个定义的映射器,但没有Reducer。但为了对URL进行排序,您应该使用超过0个Reducer的IdentityReducer运行。
  3. 你的第三份工作是一个有趣的想法,但你必须小心CompositeInputFormat。为了能够使用这种输入格式,必须满足两个条件。第一个是在两个输入目录中必须有相同数量的文件。这可以通过为Job1和Job2设置相同数量的减速器来实现。第二个条件是输入文件不能被分割。这可以通过使用不可拆分的压缩(如bzip)来实现。
  4. 这份工作发布听起来不错。尽管您可以过滤前一个作业的缩减器中的网址,并为自己节省一些I/O。

显然有不止一个解决方案的软件问题,所以虽然你的解决方案将工作,我不会推荐它。对于这项任务有4个MapReduce工作是有点贵的恕我直言。我想到的实现是使用Secondary Sort的M-R-R工作流程。

+0

您好@Pradeep,感谢您的详细解释。我花了一些时间重新思考这项工作,并提出了一个解决方案,包含2个Map + _r_ IdentityReducers作业(一个用于canonicizig url和排序用户,另一个用于过滤总点击和排序网站)以及1个Map + Reduce作业,使用CompositeInputFormat 。 我对你的M-R-R +二级排序实现感兴趣,你能详细一点吗? – Namux 2012-03-05 09:47:05

0

就链式作业而言,你应该看看Oozie,这是一个工作流程管理器。我还没有使用它,但那是我开始的地方。

+0

感谢您的回答,我会看看Oozie。但我的要求是使用普通的Hadoop实现此工作流程。你看到任何可以优化的东西吗? – Namux 2012-02-28 09:17:27