【问题标题】:Hadoop streaming reducer to mapperHadoop流式reducer到mapper
【发布时间】:2015-04-04 08:39:57
【问题描述】:

我正在用 R 编写 Hadoop 流式作业,我遇到了一个相当奇怪的情况,我找不到任何文档。我想运行一个直接传递给另一个映射器的减少作业(不需要映射器)。是否可以在没有初始映射器的减少作业之后直接堆叠映射作业?如果我编写一个身份映射器将输出传递给我的reduce作业,那么我可以将reduce输出传递给另一个映射器,如果是这样,怎么做?我当前的代码是:

$HADOOP_HOME/bin/hadoop jar /opt/cloudera/parcels/CDH-5.3.2-1.cdh5.3.2.p0.10/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming.jar \
  -reduce myreducer.r \
  -input myinput/ \
  -output myoutputdir \
  -file file1.r \
  -file file2.Rdata

这是行不通的。

【问题讨论】:

    标签: r hadoop streaming


    【解决方案1】:

    我会回答你的问题,然后给出我的建议。

    您不能将 reduce 输出直接发送到映射器。它总是映射,然后减少。只是它的工作方式。但是,您可以有两个 MapReduce 作业。让 reducer 写入 HDFS,然后启动第二个仅映射作业,读取第一个作业的输出数据。

    一般来说,如果你想在 reduce 之后做一个 map,你几乎总是可以把它们折叠成同一个东西。想一想:如果您要映射来自 reducer 的每条输出记录,为什么不在 reducer 末尾运行那个“映射”代码呢?这比运行两个 MapReduce 作业要高效得多。如果您真的不想编写新的 R 脚本来执行此操作,可以将其包装在 bash 脚本中,这样它们看起来就像是一个脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      相关资源
      最近更新 更多