考虑一个想要使用 Hadoop
为了处理大量的专有二进制编码文本数据,在大约以下简化 MapReduce
顺序:
获取文件或目录的url作为输入
读取在输入url下找到的二进制文件的列表
从每个文件中提取文本数据
将文本数据保存到新的提取的纯文本文件中
将提取的文件分类为具有特殊特征(如“上下文”)的(子)格式
如果需要,根据上下文拆分每个提取的文本文件
使用原始(未拆分)文件的上下文处理每个拆分
将处理结果提交到专有数据存储库
步骤5中标识的特定于格式的特征(上下文)也作为键值对保存在(小)文本文件中,以便步骤6和步骤7可以访问它们。
步骤6中的拆分使用自定义 InputFormat
类(每个自定义文件格式一个)。
为了在hadoop中实现这个场景,可以在 Mapper
用另一个 Mapper
对于步骤7。
这种方法的一个问题是如何进行定制 InputFormat
知道要使用哪些提取的文件来生成拆分。例如,格式a可以表示具有稍微不同的特征(例如,不同的行分隔符)的2个提取的文件,因此在2个不同的文件中保存2个不同的上下文。
基于上述情况 getSplits(JobConf)
每个客户的方法 InputFormat
需要在拆分每个文件之前访问其上下文。但是,最多可以有1个 InputFormat
每个格式的类,那么如何将适当的一组提取文件与正确的上下文文件关联起来呢?
一个解决方案可以是使用一些特定的命名约定来关联提取的文件和上下文(反之亦然),但是有没有更好的方法呢?
1条答案
按热度按时间fnvucqvd1#
这听起来更像是一个storm(流处理)问题,喷口从url加载二进制文件列表,拓扑中的后续螺栓执行以下每个操作。