当前位置: 首页 > news >正文

hadoop的序列化和压缩

  一、java对象的序列化:

    java可以通过实现Serializable接口来序列化一个对象。把一个对象进行序列化有几个好处,其一在于,对于一些不明确的类对象我们通过序列化把类保存起来,既可由本地的进程使用,也可以发送给网络上的一台计算机使用。远程计算机通过反序列化进而从一串字节中把活的对象给解析出来,从而复活对象。

   术语:

    持久化:将对象序列化存储到文件;

    数据通信:将对象序列化发送到远程计算机;

  java序列化机制的局限性:

    计算量开销大,序列化的结果体积庞大,有时能达到对象大小的数倍甚至十倍。他的引用机制也会导致大文件不能分割的问题。这些局限对于hadoop是不合适的。所以,hadoop实现了自己的序列化机制。

  二、hadoop的序列化接口:

    Writable接口:也就是org.apache.hadoop.io.Writable接口。hadoop的所有可序列化对象都必须实现这个接口。Writable接口有两个方法,一个是write方法,将对象写入字节流,另一个是readFields方法,从字节流解析出对象。

    Java的API提供了Comparable接口,也就是java.lang.Comparable接口,这个接口只有一个方法,就是compareTo,用于比较两个对象。

    WritableComparable接口同时继承了Writable和Comparable这两个接口。

    Hadoop里的三个类IntWritable、DoubleWritable和ByteWritable都继承了WritableComparable接口。

  三、hadoop的压缩

    hadoop 中有两个地方要使用到压缩,第一:在HDFS上存储数据文件,压缩之后数据体积更小,有利于存储;第二,集群间的通信需要压缩数据,这样可以提高网络带宽的利用率。

    如果用MapReduce算法处理压缩文件,要求压缩算法能支持文件分割,因为MapReduce的过程需要将文件分割成多个切片。如果压缩算法不支持文件分割,那就不能做切片了。

    Java中,一切输入输出都用流的方式进行,可以读取字节序列的对象叫输入流,文件,网络连接,内存区域都可以是输入流。一个可以写入字节序列的对象叫输出流。文件,网络连接,内存区域都可以是输出流。

    假设hadoop的输入流是A,输出流是B.做压缩的话,先选择压缩算法,然后根据压缩算法创建相应的压缩器,然后用压缩器和输出流B创建压缩输出流C,最后将数据从输入流A复制到压缩输出流C即可进行压缩并输出结果。/********/如果是解压缩,先选择解压缩算法,然后根据解压缩算法创建相应的解压缩器,然后用解压缩器和输入流A创建压缩输入流C,最后将数据从输入流C复制到输出流B即可进行解压缩并输出结果。

转载于:https://www.cnblogs.com/haiyun-online/p/3488346.html

相关文章:

  • linq转载
  • SpeedPHP关于一对一和一对多关联关系的建立 model建立
  • oracle 10g 学习之.NET使用Oracle数据库(14)
  • nm 命令 程序符号信息查看
  • HBase之八--(1):HBase二级索引的设计(案例讲解)
  • 记录上锁
  • Markdown学习笔记
  • 《需求工程》阅读随笔-1.做什么和怎么做
  • curl_errno错误码说明
  • 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇03:子弹发射》
  • 交换机的link-dependency链路依赖功能
  • 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹
  • 解决:导入第三方jar包后,仍然出现java.lang.NoClassDefFoundError的错误
  • javascript deferred
  • c#对象的内存结构(学习笔记)
  • 2017-08-04 前端日报
  • angular学习第一篇-----环境搭建
  • CSS实用技巧
  • flask接收请求并推入栈
  • Git学习与使用心得(1)—— 初始化
  • node-glob通配符
  • 百度小程序遇到的问题
  • 电商搜索引擎的架构设计和性能优化
  • 前端面试之CSS3新特性
  • 使用SAX解析XML
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 智能合约Solidity教程-事件和日志(一)
  • Java总结 - String - 这篇请使劲喷我
  • #Java第九次作业--输入输出流和文件操作
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (07)Hive——窗口函数详解
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)为什么要选择C++
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)JAVA中的堆栈
  • (转)大型网站的系统架构
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET中的Exception处理(C#)
  • ::
  • @Responsebody与@RequestBody
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20170705]diff比较执行结果的内容.txt
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [ACTF2020 新生赛]Include
  • [AIGC 大数据基础]hive浅谈
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [AutoSar NVM] 存储架构
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [Java、Android面试]_05_内存泄漏和内存溢出
  • [LeetCode] NO. 169 Majority Element
  • [LeetCode]—Permutations II 求全排列(有重复值)