hadoop流:每个Map一个文件或多个文件不要分开

o2g1uqev  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(407)

我有很多zip文件需要由c库处理。所以我用c来编写hadoop流媒体程序。程序将读取zip文件,解压它,并处理提取的数据。我的问题是:
我的Map程序无法获取一个文件的内容。它通常得到2.4文件或3.2文件。hadoop将发送几个文件到我的Map器,但至少有一个文件是部分的。你知道zip文件不能这样处理。我能在每张Map上得到一个文件吗?我不想使用文件列表作为输入并从程序中读取它,因为我希望具有数据局部性的优势。
如果hadoop不拆分zip文件,我可以接受每个Map的多个zip文件的内容。我是说1,2,3个文件,而不是2.3个文件。实际上它会更好,因为我的程序需要加载大约800mb的数据文件来处理未压缩的数据。我们能这样做吗?

5f0d552i

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#fileformat

ygya80vv

ygya80vv2#

而不是取决于最小分割大小,我建议一个更简单的方法是gzip文件。
有一种使用gzip压缩文件的方法
http://www.gzip.org/
如果您使用的是linux,则使用

gzip -r /path/to/data

现在,您已经将这些数据作为输入传递到hadoop流式处理作业中。

相关问题