我有很多zip文件需要由c库处理。所以我用c来编写hadoop流媒体程序。程序将读取zip文件,解压它,并处理提取的数据。我的问题是:
我的Map程序无法获取一个文件的内容。它通常得到2.4文件或3.2文件。hadoop将发送几个文件到我的Map器,但至少有一个文件是部分的。你知道zip文件不能这样处理。我能在每张Map上得到一个文件吗?我不想使用文件列表作为输入并从程序中读取它,因为我希望具有数据局部性的优势。
如果hadoop不拆分zip文件,我可以接受每个Map的多个zip文件的内容。我是说1,2,3个文件,而不是2.3个文件。实际上它会更好,因为我的程序需要加载大约800mb的数据文件来处理未压缩的数据。我们能这样做吗?
2条答案
按热度按时间5f0d552i1#
您可以在这里找到解决方案:
http://wiki.apache.org/hadoop/faq#how_do_i_get_each_of_a_job.27s_maps_to_work_on_one_complete_input-文件和不允许框架拆分文件。3f
我建议最简单的方法就是
mapred.min.split.size
以使文件不会被分割。如果这不起作用,那么您需要实现
InputFormat
这不是很难做到,您可以在以下位置找到步骤:http://developer.yahoo.com/hadoop/tutorial/module5.html#fileformatygya80vv2#
而不是取决于最小分割大小,我建议一个更简单的方法是gzip文件。
有一种使用gzip压缩文件的方法
http://www.gzip.org/
如果您使用的是linux,则使用
现在,您已经将这些数据作为输入传递到hadoop流式处理作业中。