Java的String不能处理中文utf-8编码

Sequence File 文件格式支持文件分割,所以适合map-reduce作业。最近有一个项目,把kafka的protobuf数据写到hdfs,方便下游的离线作业做数据分析。

在kafka中,protobuf序列化成了byte数组(message就是byte数组)。这个时候在linkedin的camus(linkedin开源的一个把kafka数据写到hdfs 的工具)中配置作业把kafka message以sequence file的格式写到hdfs。Sequence file的key是org.apache.hadoop.io.LongWritable,value是org.apache.hadoop.io.Text。

很顺利,我们把数据写到了hdfs,然后我自己写一个pig udf去解析protobuf的数据。Pig本身有一个udf去读取sequencefile:org.apache.pig.piggybank.storage.SequenceFileLoader。因为存放的是Text,所以pig读取的时候就转成了chararray。然后我就遇到了如下的错误:

bad record, bad formatcom.google.protobuf.InvalidProtocolBufferException: While parsing a protocol message, the input ended unexpectedly in the middle of a field.  This could mean either than the input has been truncated or that an embedded message misreported its own length.

后来我们花费了很长时间,甚至查看了protobuf的二进制,做了人工翻译,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值