没有输入文件的 Hadoop 流作业

问题描述 投票:0回答:2

是否可以执行没有输入文件的 Hadoop Streaming 作业?

在我的用例中,我能够使用单个映射器和执行参数为减速器生成必要的记录。目前,我正在使用带有单行的存根输入文件,我想删除此要求。

我们考虑了 2 个用例。
1)

  1. 我想将文件的加载从所有节点可用的网络位置分发到 hdfs 中。基本上,我将在映射器中运行 ls 并将输出发送到一小组减速器。
  2. 我们将利用多个不同的参数范围针对多个模型进行拟合。模型名称不会更改,并且将作为键转到减速器,同时要运行的测试列表在映射器中生成。
hadoop hadoop-streaming
2个回答
1
投票

根据docs这是不可能的。以下是执行所需的参数:

  • 输入目录名或文件名
  • 输出目录名
  • 映射器可执行文件或 JavaClassName
  • reducer 可执行文件或 JavaClassName

看起来提供虚拟输入文件是目前的解决办法。


0
投票

不,无法执行没有输入文件的 Hadoop Streaming 作业。

mapred streaming

必需
的唯一两个选项是
-input
-output

来自 Hadoop Streaming 文档

mapred streaming [genericOptions] [streamingOptions]

其中流选项是以下一项或多项

  • -input <directoryname> or <filename>
    必填(映射器输入位置)
  • -output <directoryname>
    必填(减速机输出位置)
  • -mapper <executable> or <JavaClassName>
    可选(Mapper 可执行文件。如果未指定,则默认使用 IdentityMapper)
  • -reducer <executable> or <JavaClassName>
    可选(Reducer 可执行文件。如果未指定,则默认使用 IdentityReducer)
  • [ . . . ]
    所有其他选项都是可选的

这就是一个非常简单的 MapReduce 流作业的方式:

mapred streaming \
    -input my_input \
    -output my_output 

此作业只会将

my_input
的内容回显为
my_output
,而每一行都会转换为由制表符分隔的
<key>, <value>
对。

© www.soinside.com 2019 - 2024. All rights reserved.