其实在现在接触到的数据处理中还没怎么碰到到需要自己实现序列化对象的情况。偶然看到一篇文章,说的是由于偷懒而造成序列化和反序列化时造成的不必要的时间和空间消耗。其实如果自己遇到这种问题,应该也会使用同样偷懒的方法。这里说明一下,以便提醒自己要这么做时,是否考虑到了性能方面的问题。
原文地址:
http://teddziuba.com/2008/04/dont-serialize-java-object-in.html
@Override
public void write(DataOutput out) throws IOException {
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(byteOutStream);
objectOut.writeObject(getContainedObject());
objectOut.close();
byte[] serializedObject= byteOutStream.toByteArray();
out.writeInt(serializedObject.length);
out.write(serializedModel);
}
作者在写一个Writable类时,因为这个类有太多的成员变量(because it had a ton of instance variables),所以索性将这个类先放到一个字节数组中,然后再将此数组和数组长度写出去。这么做固然减少了相当的代码量,但可能带来的是性能方面的损耗。
作者做了个测试,序列化一个字节数组用了953字节,而直接序列化变量则只用了296字节。而且正确的序列化方法使一个有1600条记录的sequencefile从1.4GB压缩到了825MB。
在时间消耗方面,序列化object用了7.2ms,反序列化用了1.7ms。而用stream I/O则序列化只用了76000ns,反序列化用了58000ns。
分享到:
相关推荐
标题中的“Hadoop序列化机制”是指Hadoop生态系统中用于数据传输和存储的数据表示方式,它是Hadoop MapReduce和Hadoop Distributed File System (HDFS)等组件之间交换数据的关键技术。序列化是将对象转化为可存储或...
本篇文章将深入探讨Hadoop的序列化机制,以及如何自定义Bean对象实现序列化接口。 **2.1 序列化概述** 序列化是将内存中的对象转化为可存储或可传输的数据格式的过程,而反序列化则是相反的操作,将这些数据恢复为...
Hadoop,作为一个分布式计算框架,同样需要处理大量的数据,因此也引入了自己的序列化机制。Hadoop的序列化方式不同于Java的标准序列化,它使用了一种称为`Writable`的自定义格式。`Writable`接口设计得更加紧凑且...
Hadoop的序列化机制还允许不同语言之间进行交互,这意味着即使部分组件是用其他语言(如Python或C++)编写,它们也可以与Java组件一起工作,前提是它们都支持相同的序列化协议。 此外,Hadoop的序列化机制还允许...
Hadoop 序列化使用了WOBM(Writable Object Binary Markup)格式来序列化对象,该格式可以高效地存储和传输数据。 Hadoop 序列化提供了两种序列化方式:Writable 和 Serialization。Writable 是 Hadoop 序列化的...
3. **序列化请求**:客户端调用Proxy的方法时,请求会被序列化成字节流。 4. **发送请求**:序列化后的请求通过网络发送到服务器。 5. **服务端处理**:服务器接收到请求后,将其反序列化为可执行的命令,然后执行...
本节课程主要介绍 HDFS 的概念、HDFS 存储架构和数据读写流程、HDFS 的 Shell 命令、Java 程序操作 HDFS、Hadoop 序列化、Hadoop 小文件处理、通信机制 RPC 等知识点。 HDFS 概念 HDFS(Hadoop Distributed File ...
Avro是Apache Hadoop项目的一部分,它是一种高效的数据序列化系统,被广泛应用于大数据处理和分布式计算领域。作为Hadoop开发基础知识的重要组成部分,理解并掌握Avro对于开发高效率、可扩展的分布式应用至关重要。 ...
6. **序列化框架**:除了Java内置的序列化机制,还有一些第三方库,如Google的Protocol Buffers,Apache的Avro,和JSON序列化库如Jackson和Gson,它们提供了更高效、更灵活的数据序列化解决方案。 7. **序列化与...
1. **Java默认序列化**:Java提供了内置的序列化机制,但存在几个显著缺点。首先,Java序列化的字节流无法被其他语言识别,限制了跨语言兼容性。其次,序列化的结果通常较大,占用较多网络带宽。最后,由于使用同步...
Hadoop并没有使用Java的序列化机制,而是自己定义了大量的可序列化对象,这些对象都实现了Writable接口。实现Writable接口的类可以将对象数据编码成适合网络传输的格式,并能够从这种格式中解码。 Hadoop的...
Avro的设计目标是为Hadoop提供更快、更紧凑的数据序列化方法,特别是在RPC场景中。由于其高性能和灵活性,Avro已经成为Hadoop生态系统中广泛使用的组件之一。 #### Hadoop Common:核心组件 **Hadoop Common** ...
总结来说,Hadoop的序列化机制主要基于`Writable`接口,通过自定义的序列化和反序列化方法实现数据的转换。`ObjectWritable`作为通用的载体,适应了RPC通信中不同类型的对象传输。`WritableFactories`则是保证`...
02-hadoop中的序列化机制.avi 03-流量求和mr程序开发.avi 04-hadoop的自定义排序实现.avi 05-mr程序中自定义分组的实现.avi 06-shuffle机制.avi 07-mr程序的组件全貌.avi 08-textinputformat对切片规划的源码...
Java内置的序列化机制是通过实现`java.io.Serializable`接口来标记一个类可以被序列化。当对象实例需要序列化时,Java会调用`writeObject()`和`readObject()`方法来处理对象的状态。这个过程是自动的,开发者只需要...
在Hadoop中,Java的序列化机制存在一些问题,如数据量过大,包含过多附加信息,这可能导致不必要的带宽消耗。例如,Block类的序列化数据远超过其实际内容的大小。此外,Java序列化不支持跨语言操作,并且在反序列化...
3. **序列化与反序列化**:Hadoop RPC使用Writables接口进行数据序列化,将对象转化为字节流在网络中传输,到达目的地后再反序列化为对象。这确保了数据在网络间的有效传输。 4. **安全认证**:为了保证通信安全,...
在执行Hadoop数据迁移时,Hadoop集群中的MapReduce作业会利用JDBC驱动与Oracle数据库建立连接,通过执行SQL查询来检索数据,并使用Hadoop的序列化机制将数据写入到HDFS。这样,Oracle中的数据就成功地迁移到了Hadoop...
Avro 1.8.2版本为Hadoop新型序列化框架规范定义了相关细节,提供了标准化的序列化和反序列化机制,可以用于远程过程调用(RPC)和持久化数据的存储。 ### 标题和描述知识点 标题“Avro 1.8.2 序列化规范”直接指出了...
在Hadoop的源代码分析中,我们还可以看到Hadoop的序列化机制。Hadoop没有采用Java的序列化,而是引入了它自己的序列化机制。org.apache.hadoop.io中定义了大量的可序列化对象,他们都实现了Writable接口。 Hadoop的...