• 使用Hadoop API 解压缩 HDFS文件


    接上篇:使用Hadoop API 压缩HDFS文件

      压缩完了,当然需要解压缩了。

      直接上代码:

      

    private static void getFile(String filePath) throws IOException, ClassNotFoundException {
    
            FileSystem fs = FileSystem.get(URI.create(filePath), HDFSConf.getConf());
            Path path = new Path(filePath);
            if (fs.exists(path) ) {
    
    
                FSDataInputStream in;
                FSDataOutputStream out;
                Path outPath;
    
                FileStatus file = fs.getFileStatus(path);
                // 该压缩方法对应的文件扩展名
    
                outPath = new Path(filePath.substring(0,filePath.indexOf(".")) + ".new");
                logger.info("out put path is : " + outPath.toString());
    
                if (fs.createNewFile(outPath)) {
    
                    CompressionCodecFactory factory = new CompressionCodecFactory(HDFSConf.getConf());
                    CompressionCodec codec = factory.getCodec(file.getPath());
                    in = fs.open(file.getPath());
                    InputStream cin = codec.createInputStream(in);
                    logger.info("create file  : " + outPath.toString());
    
                    out = fs.append(outPath);
    
                    // 缓冲区设为5MB
                    IOUtils.copyBytes(cin, out, 1024 * 1024 * 5, false);
    
                    out.flush();
                    cin.close();
                    in.close();
                    out.close();
    
    
                    logger.info("Decompress file successful");
                } else {
                    logger.error("File exists");
                }
    
    
            } else {
                logger.info("There is no file :" + filePath);
            }
    
        }

    打包执行:  

    [hadoop@venn05 venn]$ java -cp compressHdfsFile-1.0-SNAPSHOT.jar com.utstarcom.hdfs.DeCompressFile /aaa/test/viewlog_20180402.log.gz
    2018-06-10 04:21:44.562 [Common.java] [main] 
    INFO : start init : 
    2018-06-10 04:21:44.566 [Common.java] [main] 
    INFO : properties path : /opt/hadoop/tmp/venn/
    /opt/hadoop/tmp/venn/hdfs.properties
    default.compress.format
    hdfs.uri
    2018-06-10 04:21:44.568 [Common.java] [main] 
    INFO : get System enviroment : 46
    2018-06-10 04:21:44.569 [Common.java] [main] 
    INFO : properties path : {hdfs.uri=hdfs://venn06:8020, default.compress.format=bz2}
    hdfs://venn06:8020/aaa/test/viewlog_20180402.log.gz
    log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
    2018-06-10 04:21:46.409 [DeCompressFile.java] [main] 
    INFO : out put path is : hdfs://venn06:8020/aaa/test/viewlog_20180402.new
    2018-06-10 04:21:46.623 [DeCompressFile.java] [main] 
    INFO : create file : hdfs://venn06:8020/aaa/test/viewlog_20180402.new
    2018-06-10 04:22:24.566 [DeCompressFile.java] [main] 
    INFO : Decompress file successful
    cost : 
    39 s

     文件大小: 249.4 M ,解压后大小:1.4 G,执行时间  39 s,很不错

    文件大小:
    [hadoop@ut01 venn]$ hadoop fs -ls /aaa/test/
    18/06/10 04:26:29 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Found 3 items
    -rw-r--r-- 3 hadoop supergroup 1515343101 2018-06-03 17:07 /aaa/test/viewlog_20180402.log
    -rw-r--r-- 3 hadoop supergroup 261506977 2018-06-09 15:46 /aaa/test/viewlog_20180402.log.gz
    -rw-r--r-- 3 hadoop supergroup 1515343101 2018-06-09 15:43 /aaa/test/viewlog_20180402.new
    [hadoop@ut01 venn]$ hadoop fs -ls -h /aaa/test/
    18/06/10 04:26:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Found 3 items
    -rw-r--r-- 3 hadoop supergroup 1.4 G 2018-06-03 17:07 /aaa/test/viewlog_20180402.log
    -rw-r--r-- 3 hadoop supergroup 249.4 M 2018-06-09 15:46 /aaa/test/viewlog_20180402.log.gz
    -rw-r--r-- 3 hadoop supergroup 1.4 G 2018-06-09 15:43 /aaa/test/viewlog_20180402.new

     项目地址:码云

  • 相关阅读:
    KVM 重命名虚机
    甲醛了解
    递归函数,匿名函数
    函数
    zabbix监控URL
    zabbix自动发现
    vim常用命令总结
    saltstack常用命令
    zabbix监控Apache
    nginx配置详解
  • 原文地址:https://www.cnblogs.com/Springmoon-venn/p/9194654.html
Copyright © 2020-2023  润新知