hadoop中读取protobuf数据
2015-05-14 00:00
537 查看
在mapreduce中读取protobuf数据时,会遇到一个坑
BytesWritable。当你把byte[]数据保存到BytesWritable后,通过BytesWritable.getBytes()再读到的数据并不一定是原数据,可能变长了很多,这是因为BytesWritable采用了自动内存增长算法,你保存的数据长度为size时,它可能将数据保存到了长度为capacity(capacity>size)的buffer中,这时候,你通过BytesWritable.getBytes()得到的数据最后一些字符是多余的,如果里面保存的是protobuf序列化后的数据,则无法反序列化,这时候可以使用BytesWritable.setCapacity(BytesWritable.getLength())将后面多余空间剔除掉,然后就可以使用protobuf反序列为原始数据。
关键代码如下
BytesWritable。当你把byte[]数据保存到BytesWritable后,通过BytesWritable.getBytes()再读到的数据并不一定是原数据,可能变长了很多,这是因为BytesWritable采用了自动内存增长算法,你保存的数据长度为size时,它可能将数据保存到了长度为capacity(capacity>size)的buffer中,这时候,你通过BytesWritable.getBytes()得到的数据最后一些字符是多余的,如果里面保存的是protobuf序列化后的数据,则无法反序列化,这时候可以使用BytesWritable.setCapacity(BytesWritable.getLength())将后面多余空间剔除掉,然后就可以使用protobuf反序列为原始数据。
关键代码如下
conf.setInputFormat(SequenceFileAsBinaryInputFormat.class);
public void map(Object key, BytesWritable values, OutputCollector output, Reporter reporter) throws IOException { values.setCapacity(values.getLength());// very important !!! byte[] data = values.getBytes(); // more code }
相关文章推荐
- hadoop中读取protobuf数据
- hadoop中读取protobuf数据
- 《从零开始搭建游戏服务器》 Protobuf读取Excel表格数据
- protobuf.js如何读取二进制数据
- 详解Google-ProtoBuf中结构化数据的编码
- 如何使用Spark的local模式远程读取Hadoop集群数据
- SpringBoot整合Netty并使用Protobuf进行数据传输(附工程)
- Spark在Hadoop的HDFS中读取数据
- Response 异步返回各种格式数据:json xml text Protobuf
- Hadoop Core 学习笔记(一) SequenceFile文件写入和读取Writable数据
- 【转】详解Google-ProtoBuf中结构化数据的编码
- Protobuf数据格式解析
- hadoop单线程实现server多socket连接读取数据原理分析
- Hadoop学习笔记——1.java读取Oracle中表的数据,创建新文件写入Hdfs
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- 详解Google-ProtoBuf中结构化数据的编码
- Protobuf for Python测试保存和读取文件
- Java接口之从Hadoop URL读取数据。
- Hadoop URL读取数据