Hadoop怎么处理非标准格式的二进制流文件?
背景 :我本来的程序是在单机下用C++开发的,现在需要部署到Hadoop上运行,因此我选择了Hadoop Streaming技术。程序的输入是很多非常大的二进制流文件(数据包,pcap格式),程序就是对该数据流进行解析输出解析结果。
问题 :默认Hadoop的输入文件是TextInputFormat格式,而我这里要处理二进制格式文件,Hadoop也可以处理二进制格式,例如SequenceFileInputFormat,但是key是什么?value是什么?由于我的二进制文件完全没有固定的某个格式,因此我有一个想法就是:Hadoop Streaming无输入,而是将流文件作为词典的形式加载进去(-files选项),然后直接在mapper中打开每个流文件fopen("流文件")进行处理,这样我在单机下的程序完全不用动,但是我的问题是:各个slave节点还有用吗?master节点会把这样的任务均匀分配给各个slave节点(也就是fopen的流文件会分配到各个slave节点上处理吗),貌似这样不符合Hadoop的处理方式了。
注:之所以不用SequenceFileInputFormat是因为我的二进制每条流都不是固定不小的,因此不能分割成一条条的流,需要在程序中更加读取的标志位判断,因此也就不能分割成key和value
注明:也许我表述的不是很清晰,那我就用一句话简单概括吧:Hadoop怎么处理不能明显分割为<key, value>键值对的二进制流文件?
无敌LtH
10 years, 9 months ago