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

标签 hadoop hadoop-streaming

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

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

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

最佳答案

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

在这种情况下,您必须实现自己的 InputFormat来处理这些。输入格式实现 (getSplits()) 决定了splits 的数量,每个都获得一个单独的映射器。因此,如果您只为每个输入文件返回一个拆分,您就万事大吉了。

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

关于Hadoop:每个 tar/zip 文件一个映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30403862/

相关文章:

hadoop - 控制中间体导致Hadoop

java - 在 Hadoop MapReduce 中查找除 “the” 、 “am” 、 “is” 和 “are” 之外的前 10 个最常用词?

hadoop - 在 map/reduce 之间共享资源

hadoop - 使用MapReduce进行聚类的设计

hadoop - 使用联合身份验证在完整集群中安装apache Hadoop-2.0.0 alpha版本

java - 最高温度Mapreduce Java代码中的运行时错误

hadoop - 在 hadoop streaming mapreduce 中使用组合器(使用 mrjob)

hadoop - 一个作业的输出到多个文件

python - 使用python从Hive检索数据时出错

hadoop - 使用sqoop从RDBMS导入所有表