我有几个目录,我想计算统计数字。i、 e my mapper函数将一个文件夹树作为输入,并根据目录及其所有子目录的内容输出一些静态信息。每个目录上的计算都需要很长时间。没有减速器。
我可以为要处理的每个目录创建一个tar/zip文件,并将其复制到hdfs中。但如何确保为每个tar文件创建Map器,并将tar文件的全部内容发送到该Map器(以便遍历tar文件的内容并生成该文件的统计信息)?
如果可能的话,我更愿意在hadoop流媒体中这样做。有可能这样做吗?
我有几个目录,我想计算统计数字。i、 e my mapper函数将一个文件夹树作为输入,并根据目录及其所有子目录的内容输出一些静态信息。每个目录上的计算都需要很长时间。没有减速器。
我可以为要处理的每个目录创建一个tar/zip文件,并将其复制到hdfs中。但如何确保为每个tar文件创建Map器,并将tar文件的全部内容发送到该Map器(以便遍历tar文件的内容并生成该文件的统计信息)?
如果可能的话,我更愿意在hadoop流媒体中这样做。有可能这样做吗?
1条答案
按热度按时间6jygbczu1#
我想您在hdfs中有许多tar/zip文件作为map/reduce作业的输入?
在这种情况下,您必须实现自己的inputformat来处理这些问题。输入格式的实现(
getSplits()
)确定拆分的数目,每个拆分都会获得一个单独的Map器。因此,如果您只为每个输入文件返回一个分割,那么您就可以全部设置好了。据我在文档中看到的,hadoop流媒体中没有任何东西阻止您指定自己的inputformat;但这需要编写一个java类(问题是inputformat和基于脚本的Map器应该如何交互:据我所知,hadoop流式处理要求Map器通过stdin接收其输入,也就是说,您不能轻松地传递tar文件本身以供脚本操作。)