复杂的MapReduce配置方案

时间:2013-03-28 01:57:43

标签: java configuration hadoop mapreduce

考虑一个想要使用Hadoop的应用程序,以便按照以下简化的MapReduce序列处理大量专有的二进制编码文本数据:

  1. 获取文件或目录的URL作为输入
  2. 读取输入网址
  3. 下找到的二进制文件列表
  4. 从每个文件中提取文本数据
  5. 将文本数据保存为新的提取纯文本文件
  6. 将提取的文件分类为特殊特征的(子)格式(例如," context")
  7. 如有必要,根据其上下文拆分每个提取的文本文件
  8. 使用原始(unsplit)文件的上下文
  9. 处理每个拆分
  10. 将处理结果提交给专有数据存储库
  11. 步骤5中标识的特定于格式的特征(上下文)也作为键值对保存在(小)文本文件中,以便步骤6和步骤7可以访问它们。

    第6步中的拆分使用自定义InputFormat类(每个自定义文件格式一个)进行。

    为了在Hadoop中实现这种情况,可以在Mapper中集成步骤1 - 步骤5,并在步骤7中使用另一个Mapper

    此方法的一个问题是如何让自定义InputFormat知道要使用哪些提取文件来生成拆分。例如,格式A可以表示具有略微不同特征的2个提取文件(例如,不同的行分隔符),因此2个不同的上下文保存在2个不同的文件中。

    基于以上所述,每个自定义getSplits(JobConf)的{​​{1}}方法需要在拆分之前访问每个文件的上下文。但是,每种格式最多可以有1 InputFormat个类,所以如何将适当的提取文件集与正确的上下文文件相关联?

    解决方案可能是使用某些特定的命名约定来关联提取的文件和上下文(反之亦然),但还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这听起来更像一个Storm(流处理)问题,其中一个spout从URL和拓扑中的后续螺栓加载二进制文件列表,执行以下每个操作。