`

hadoop读取不同压缩格式的设置-待补充

阅读更多

 

 

这是对 gzip格式的读取设置:

conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.GzipCodec");

 

如果源文件就是  backend_userlog_2017092200_192.168.201.4.1506010201501.4968.log.gz  

这种的, 那么 即使 不设置上面读取的编码集, hadoop也会自动读取:

 

因为源代码会自动设置:

 

从配置文件里,拿不到编码相关的配置,就会默认把GzipCodec,DefaultCodec加进去。

/**
* Find the codecs specified in the config value io.compression.codecs 
* and register them. Defaults to gzip and zip.
*/
public CompressionCodecFactory(Configuration conf) {
    codecs = new TreeMap<String, CompressionCodec>();
    List<Class<? extends CompressionCodec>> codecClasses = getCodecClasses(conf);
    if (codecClasses == null) {
        addCodec(new GzipCodec());
        addCodec(new DefaultCodec());      
    } else {
        Iterator<Class<? extends CompressionCodec>> itr = codecClasses.iterator();
        while (itr.hasNext()) {
            CompressionCodec codec = ReflectionUtils.newInstance(itr.next(), conf);
            addCodec(codec);     
        }
    }
}

 

 

而针对 .gz格式的hdfs文件, 如果过滤查看文件内容的话,可以直接通过命令:

 

hadoop fs -text /collect_data/teach/20180825/*.gz | grep "1800066" | grep "41783251"

 而如果通过 

   hadoop  fs  -cat 的方式,会出现乱码

 

 

 

 

其他的待补充 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics