在 hadoop 中对没有 .gz 扩展名的文件使用 gzip 输入编解码器
Use gzip input codec on files without .gz extension in hadoop
我是 运行 一个处理一堆 gzip 压缩输入文件的 Hadoop 作业。 Hadoop 应该很容易处理这个...... mapreduce in java - gzip input files
不幸的是,在我的例子中,输入文件没有 .gz
扩展名。我正在使用 CombineTextInputFormatClass
,如果我将它指向非 gzip 文件,它可以很好地运行我的工作,但如果我将它指向 gzip 文件,我基本上只会得到一堆垃圾。
我已经尝试搜索了很长时间,但我唯一找到的是其他人问我同样的问题,没有答案... How to force Hadoop to unzip inputs regadless of their extension?
有人有什么东西吗?
首先,gzip 文件不可拆分。因此结果是您的 map reduce 在拆分时不会使用块大小。
Map reduce 在看到文件扩展名时不执行拆分。遗憾的是,您的情况是说扩展名不是 .gz。所以恐怕 Map reduce 无法理解如何拆分数据。
因此,即使有一个选项可以知道扩展名,您也不会获得良好的性能。所以可能是为什么不解压缩然后将数据提供给 map reduce,而不是强制 map reduce 使用性能降低的压缩格式。
深入挖掘源代码并为此构建了一个解决方案...
您需要修改 LineRecordReader
class 的源代码以修改其选择压缩编解码器的方式。默认版本创建一个 Hadoop CompressionCodecFactory
并调用 getCodec
解析其扩展名的文件路径。您可以改为使用 getCodecByClassName
来获取您想要的任何编解码器。
然后您需要覆盖您的输入格式 class 以使其使用您的新记录 reader。详情在这里:http://daynebatten.com/2015/11/override-hadoop-compression-codec-file-extension/
我是 运行 一个处理一堆 gzip 压缩输入文件的 Hadoop 作业。 Hadoop 应该很容易处理这个...... mapreduce in java - gzip input files
不幸的是,在我的例子中,输入文件没有 .gz
扩展名。我正在使用 CombineTextInputFormatClass
,如果我将它指向非 gzip 文件,它可以很好地运行我的工作,但如果我将它指向 gzip 文件,我基本上只会得到一堆垃圾。
我已经尝试搜索了很长时间,但我唯一找到的是其他人问我同样的问题,没有答案... How to force Hadoop to unzip inputs regadless of their extension?
有人有什么东西吗?
首先,gzip 文件不可拆分。因此结果是您的 map reduce 在拆分时不会使用块大小。
Map reduce 在看到文件扩展名时不执行拆分。遗憾的是,您的情况是说扩展名不是 .gz。所以恐怕 Map reduce 无法理解如何拆分数据。
因此,即使有一个选项可以知道扩展名,您也不会获得良好的性能。所以可能是为什么不解压缩然后将数据提供给 map reduce,而不是强制 map reduce 使用性能降低的压缩格式。
深入挖掘源代码并为此构建了一个解决方案...
您需要修改 LineRecordReader
class 的源代码以修改其选择压缩编解码器的方式。默认版本创建一个 Hadoop CompressionCodecFactory
并调用 getCodec
解析其扩展名的文件路径。您可以改为使用 getCodecByClassName
来获取您想要的任何编解码器。
然后您需要覆盖您的输入格式 class 以使其使用您的新记录 reader。详情在这里:http://daynebatten.com/2015/11/override-hadoop-compression-codec-file-extension/