首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

使用hadoop序列化机制时的一点小疑点

2012-07-22 
使用hadoop序列化机制时的一点小问题其实在现在接触到的数据处理中还没怎么碰到到需要自己实现序列化对象

使用hadoop序列化机制时的一点小问题
        其实在现在接触到的数据处理中还没怎么碰到到需要自己实现序列化对象的情况。偶然看到一篇文章,说的是由于偷懒而造成序列化和反序列化时造成的不必要的时间和空间消耗。其实如果自己遇到这种问题,应该也会使用同样偷懒的方法。这里说明一下,以便提醒自己要这么做时,是否考虑到了性能方面的问题。
        原文地址:http://teddziuba.com/2008/04/dont-serialize-java-object-in.html

@Overridepublic 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。

热点排行