Java 复杂的MapReduce配置场景
考虑一个应用程序,该应用程序希望使用Java 复杂的MapReduce配置场景,java,configuration,hadoop,mapreduce,Java,Configuration,Hadoop,Mapreduce,考虑一个应用程序,该应用程序希望使用Hadoop以大约以下简化的MapReduce顺序处理大量专有二进制编码文本数据: 获取文件或目录的URL作为输入 读取在输入URL下找到的二进制文件列表 从每个文件中提取文本数据 将文本数据保存到新的提取纯文本文件中 将提取的文件分类为具有特殊特征的(子)格式(例如,“上下文”) 如有必要,根据上下文拆分每个提取的文本文件 使用原始(未拆分)文件的上下文处理每个拆分 将处理结果提交到专有数据存储库 步骤5中标识的特定于格式的特征(上下文)也作为键值对保存在(
Hadoop
以大约以下简化的MapReduce
顺序处理大量专有二进制编码文本数据:
InputFormat
类(每个自定义文件格式一个)进行
为了在Hadoop中实现这个场景,可以将步骤1-步骤5集成到Mapper
中,并使用另一个Mapper
进行步骤7
这种方法的一个问题是如何使自定义的InputFormat
知道要使用哪些提取的文件来生成拆分。例如,格式A可能表示两个提取的文件,其特征稍有不同(例如,不同的行分隔符),因此两个不同的上下文保存在两个不同的文件中
基于上述情况,每个自定义InputFormat
的getSplits(JobConf)
方法需要在分割每个文件之前访问其上下文。但是,每种格式最多可以有1个InputFormat
类,因此如何将适当的提取文件集与正确的上下文文件关联起来?
解决方案可以是使用特定的命名约定来关联提取的文件和上下文(反之亦然),但有没有更好的方法?这听起来更像是一场风暴(流处理)从URL加载二进制文件列表的喷口以及拓扑中执行以下操作的后续螺栓出现问题