【问题标题】:Hadoop: One mapper for each tar/zip fileHadoop:每个 tar/zip 文件一个映射器
【发布时间】:2015-05-22 18:47:56
【问题描述】:

我有几个要计算统计信息的目录。即我的映射器函数将一个文件夹树作为输入,并根据目录及其所有子目录的内容吐出一些静态数据。每个目录的计算都需要很长时间。没有减速器。

我可以为每个要处理的目录创建一个 tar/zip 文件并将其复制到 HDFS。但是如何确保为每个 tar 文件创建一个映射器,并将 tar 文件的全部内容发送到该映射器(以便我可以遍历 tar 文件的内容并为该文件生成统计信息)?

如果可能,我更愿意在 Hadoop Streaming 中执行此操作。可以这样做吗?

【问题讨论】:

  • 您为什么认为使用归档会提高性能?

标签: hadoop hadoop-streaming


【解决方案1】:

我认为您在 HDFS 中有许多 tar/zip 文件作为 map/reduce 作业的输入?

在这种情况下,您必须实现自己的InputFormat 来处理这些问题。输入格式实现 (getSplits()) 确定 splits 的数量,每个分割器都有一个单独的映射器。因此,如果您只为每个输入文件返回一个拆分,则一切就绪。

据我在文档中看到的,Hadoop Streaming 中没有任何内容阻止您指定自己的 InputFormat;不过,这需要您编写一个 Java 类。 (问题是 inputformat 和基于脚本的映射器应该如何交互:据我了解,Hadoop 流式传输需要映射器通过标准输入接收其输入,即您不能轻易传递 tar 文件本身以供脚本操作开。)

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多