Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)

                                          作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.编辑配置文件(pml.xml)(我们这里配置的是对“cn.org.yinzhengjie.compress.TestCompressCodec”该包进行打包操作)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>groupId</groupId>
  8. <artifactId>yinzhengjieCode</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <dependencies>
  12. <dependency>
  13. <groupId>org.apache.hadoop</groupId>
  14. <artifactId>hadoop-client</artifactId>
  15. <version>2.7.3</version>
  16. </dependency>
  17.  
  18. <dependency>
  19. <groupId>org.anarres.lzo</groupId>
  20. <artifactId>lzo-hadoop</artifactId>
  21. <version>1.0.0</version>
  22. </dependency>
  23.  
  24. </dependencies>
  25.  
  26. <!--将指定类的所有依赖打入到一个包中-->
  27. <build>
  28. <plugins>
  29. <plugin>
  30. <artifactId>maven-assembly-plugin</artifactId>
  31. <configuration>
  32. <descriptorRefs>
  33. <descriptorRef>jar-with-dependencies</descriptorRef>
  34. </descriptorRefs>
  35. <archive>
  36. <manifest>
  37. <!-- main函数所在的类 -->
  38. <mainClass>cn.org.yinzhengjie.compress.TestCompressCodec</mainClass>
  39. </manifest>
  40. </archive>
  41. </configuration>
  42. <executions>
  43. <execution>
  44. <id>make-assembly</id> <!-- this is used for inheritance merges -->
  45. <phase>package</phase> <!-- bind to the packaging phase -->
  46. <goals>
  47. <goal>single</goal>
  48. </goals>
  49. </execution>
  50. </executions>
  51. </plugin>
  52. </plugins>
  53. </build>
  54.  
  55. </project>

  注意事项如下:

   我们通过pom.xml配置文件不难看出我们需要打的包是“cn.org.yinzhengjie.compress.TestCompressCodec”,上述的配置主要是对该包打入相应的依赖包关系,且上述配置仅对该包有效哟。当然我所述的只是“<build></build>”标签里面里面的参数,它是对手动添加依赖的关键!

二.开始打包

1>.需要打包(cn.org.yinzhengjie.compress.TestCompressCodec)的代码如下:

  1. /*
  2. @author :yinzhengjie
  3. Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
  4. EMAIL:y1053419035@qq.com
  5. */
  6. package cn.org.yinzhengjie.compress;
  7.  
  8. import org.apache.hadoop.conf.Configuration;
  9. import org.apache.hadoop.io.IOUtils;
  10. import org.apache.hadoop.io.compress.*;
  11. import org.apache.hadoop.util.ReflectionUtils;
  12. import java.io.File;
  13. import java.io.FileInputStream;
  14. import java.io.FileOutputStream;
  15.  
  16. public class TestCompressCodec {
  17. /**
  18. * 设置路径动态传参
  19. * @param args
  20. */
  21. public static void main(String[] args) {
  22. if(args == null || args.length == 0){
  23. System.out.println("需要输入路径");
  24. System.exit(-1);
  25. }
  26. Class[] classes = {
  27. DefaultCodec.class,
  28. GzipCodec.class,
  29. BZip2Codec.class,
  30. Lz4Codec.class,
  31. LzopCodec.class,
  32. SnappyCodec.class
  33. };
  34. for(Class clazz : classes){
  35. testCompress(clazz, args[0]);
  36. testDecompress(clazz,args[0]);
  37. }
  38. }
  39. /**
  40. * Gzip压缩
  41. * @throws Exception
  42. */
  43. public static void testCompress(Class clazz, String path) {
  44. try {
  45. long start = System.currentTimeMillis();
  46. Configuration conf = new Configuration();
  47. conf.set("fs.defaultFS", "file:///");
  48. CompressionCodec codec = (CompressionCodec)ReflectionUtils.newInstance(clazz, conf);
  49. FileInputStream fis = new FileInputStream(path);
  50. //获取扩展名
  51. String ext = codec.getDefaultExtension();
  52. //创建压缩输出流
  53. CompressionOutputStream cos = codec.createOutputStream(new FileOutputStream(path+ext));
  54. IOUtils.copyBytes(fis,cos,1024);
  55. fis.close();
  56. cos.close();
  57. System.out.print("压缩类型:"+ ext+"\t"+ "压缩时间:" + (System.currentTimeMillis() - start)+ "\t");
  58. File f = new File(path+ext);
  59. System.out.print("文件大小:"+ f.length() + "\t");
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. }
  63. }
  64.  
  65. /**
  66. * Gzip解压
  67. * @throws Exception
  68. */
  69. public static void testDecompress(Class clazz,String path) {
  70. try {
  71. long start = System.currentTimeMillis();
  72. Configuration conf = new Configuration();
  73. conf.set("fs.defaultFS", "file:///");
  74. CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz, conf);
  75. //扩展名
  76. String ext = codec.getDefaultExtension();
  77. //压缩输入流
  78. CompressionInputStream cis = codec.createInputStream(new FileInputStream(path+ext));
  79. FileOutputStream fos = new FileOutputStream(path+ext+".txt");
  80. IOUtils.copyBytes(cis,fos,1024);
  81. cis.close();
  82. fos.close();
  83. System.out.println("解压时间:" + (System.currentTimeMillis() - start));
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. }
  87. }
  88. }

2>.点击“package进行打包操作”

3>.打包后的产物

  在打包的过程需要一定的时间,我们需要耐心等待

  打包过程中如果没有遇到错误,就会出现以下的界面

   打包完成之后,会有两个文件生成,如下图:

三.Hadoop压缩格式综合测试

  由于我在Windows测试说当前Hadoop版本不支持snappy压缩格式,官网上也没有相应的下载版本(链接:https://pan.baidu.com/s/1Clhsvv-gzvVX7lQOQ27vng 密码:d367),不过有大神编译了Hadoop支持snappy格式的,如果有时间了我也得去研究研究,到时候会把笔记共享给大家。好了,下图就是我使用支持snappy压缩格式的版本进行测试的。

   我们将上面的核心信息抽取如下:

  1. 压缩类型:.deflate 压缩时间: 文件大小: 解压时间:
  2. 压缩类型:.gz 压缩时间: 文件大小: 解压时间:
  3. 压缩类型:.bz2 压缩时间: 文件大小: 解压时间:
  4. 压缩类型:.lz4 压缩时间: 文件大小: 解压时间:
  5. 压缩类型:.lzo 压缩时间: 文件大小: 解压时间:
  6. 压缩类型:.snappy 压缩时间: 文件大小: 解压时间:

  根据结果反推理论:(以上实验是对一个890M的文件进行处理,生成环境最好以实际生成环境为准,这个数据仅供参考!)

    压缩时间从小到大:
      lz4 < lzo < gz < snappy < deflate < bz2;

    压缩大小从小到大:

      defalte < gz < lz4 < bz2 < lzo < snappy;

    解压时间从小到大:

      zo < lz4 < deflate < gz < snappy < bz2;

Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)的更多相关文章

  1. hadoop应用开发技术详解

    <大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...

  2. 《Hadoop应用开发技术详解》

    <Hadoop应用开发技术详解> 基本信息 作者: 刘刚 丛书名: 大数据技术丛书 出版社:机械工业出版社 ISBN:9787111452447 上架时间:2014-1-10 出版日期:2 ...

  3. 基础拾遗------redis详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  4. 基础拾遗------webservice详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  5. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  6. VS2010开发程序打包详解

    VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...

  7. AssetBundle打包详解

    Unity5.x AssetBundle打包详解 在网上查看了很多资料,想详细搞清楚AssetBundle的原理.以实现符合项目需求的打包工具和加载逻辑 1. AssetBundle是什么? Asse ...

  8. Hadoop生态圈-Kafka配置文件详解

    Hadoop生态圈-Kafka配置文件详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.默认kafka配置文件内容([yinzhengjie@s101 ~]$ more /s ...

  9. (转)总结之:CentOS 6.5 MySQL数据库的基础以及深入详解

    总结之:CentOS 6.5 MySQL数据库的基础以及深入详解 原文:http://tanxw.blog.51cto.com/4309543/1395539 前言 早期MySQL AB公司在2009 ...

随机推荐

  1. YQCB冲刺周第六天

    站立会议如上图 任务看板: 今天的任务为依旧为将用户记录的数据添加到数据库中,以及金额球的设置. 遇到的问题为金额球在jsp页面的显示.

  2. C# CHM帮助文档

    1.生成chm文件 首先,下载EasyCHM软件,此软件可将HTML文件.TXT文件.图片和文件夹按照文件层次生成.chm文件.EasyCHM打开界面如图所示: 点击“新建”,选择需要生成.chm文件 ...

  3. 配置JDBC

    在数据库和MyEclipse都安装好的情况下进行配置: 1.将JDBC(sqljdbc_4.0.2206.100_chs.exe)文件解压到C盘program files下面(也可以将解压后的文件Mi ...

  4. 实验二 四则运算 完成版 ver.1

    package size; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JMenuBar; im ...

  5. java equals()方法的注意事项

    1.在写代码的时候,我们有时候需要判断两个相同类的对象的值是否全部相等,很多人想到的就是equals()方法,但是equals方法真的是可以比较吗?其实equals方法比较的并不是两个对象的值,它只是 ...

  6. iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件上传

    官方建议AFN的使用方法 0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目   •2. 或使用Cocopod 导入AFNetworking3.0+   •3.  引入 ...

  7. IE8+SpringMVC文件上传防止JSON下载

    今天在IE8测试文件上传的时候发现总是提示下载,原因是上传接口返回的是json,通过以下修改就可以保证返回是json并且不会出现下载的情况: @RequestMapping(value = " ...

  8. java poi给sheet表格中的某个单元格添加批注

    Label l = , , "A cell with a comment"); WritableCellFeatures cellFeatures = new WritableCe ...

  9. 理解RESTful架构【转】

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  10. Python面向对象高级编程:__slot__(给实例添加方法、属性)

    纲要: 本章总的来说是给实例添加属性,给类添加方法两个主题,以及相应的作用范围.总结如下: 1.给实例添加属性(作用范围:当然是只对当前实例有效): 2.用__slots__限制可以给实例添加的属性( ...