hadoop mapreduce和压缩/加密文件(大文件)

2o7dmzc5  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(458)

我有hdfs集群,它以最终用户选择的压缩/加密形式存储大型csv文件。对于压缩、加密,我创建了一个 Package 器输入流,以压缩/加密的形式将数据提供给hdfs。压缩格式采用gz,加密格式为aes256。在hdfs上,4.4gb csv文件被压缩到40mb。
现在我有了mapreduce job(java),它可以同时处理多个压缩文件。mr job使用fileinputformat。当使用Map器计算分割时,4.4gb压缩文件(40mb)只分配给一个Map器,分割开始为0,分割长度等于40mb。
如何处理这样大的压缩文件。?我发现的一个选项是实现自定义recordreader,并使用 Package 器输入流读取未压缩的数据并对其进行处理。因为我没有文件的实际长度,所以我不知道要从输入流中读取多少数据。
若我从inputstream读到最后,那个么当两个Map器被分配到同一个文件时如何处理,如下所述。如果压缩文件大小大于64mb,则将为同一文件分配两个Map器。如何处理这种情况。?
hadoop版本-2.7.1

jum4pzuy

jum4pzuy1#

如果文件将由map reduce处理,则应考虑确定压缩格式。因为,是压缩格式是可拆分的,那么map reduce正常工作。
但是,如果不可拆分(在您的情况下gzip是不可拆分的,map reduce将知道它),那么整个文件将在一个Map器中处理。这将起到作用,但会有数据局部性问题,因为一个Map程序只执行该任务,它从其他块获取数据。
来自hadoop权威指南:“对于大型文件,不应使用不支持对整个文件进行拆分的压缩格式,因为这样会丢失位置,并使mapreduce应用程序效率非常低。”。
有关更多信息,请参阅hadoopi/o章节中的压缩一节。

相关问题