Hadoop:每个tar / zip文件的一个映射器

时间:2015-05-22 18:47:57

标签: hadoop hadoop-streaming

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

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

如果可能的话,我宁愿在Hadoop Streaming中这样做。有可能这样做吗?

1 个答案:

答案 0 :(得分:0)

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

在这种情况下,您必须实施自己的InputFormat来处理这些问题。输入格式实现(getSplits())确定拆分的数量,每个都获得一个单独的映射器。因此,如果您只为每个输入文件返回一个分割,那么您将全部设置。

据我在文档中看到,Hadoop Streaming中没有任何内容阻止您指定自己的InputFormat;这需要你编写一个Java类。 (问题是inputformat和基于脚本的映射器应该如何交互:据我所知,Hadoop流需要映射器通过stdin接收它的输入,即你不能轻易地为脚本传递tar文件本身继续经营。)