立即注册 登录
About云-梭伦科技 返回首页

howtodown的个人空间 https://www.aboutyun.com/?19 [收藏] [复制] [分享] [RSS]

日志

Hadoop的Text类getBytes字节数据put到HBase后有多余字符串有关问题

已有 1072 次阅读2014-8-3 11:10

Hadoop的Text类getBytes字节数据put到HBase后有多余字符串问题
转载请标明出处:http://blackwing.iteye.com/blog/1978501

org.apache.hadoop.io.Text里面的getBytes方法有个小坑。

先看现场:
String s = "91223224-20131120-96413376-150";
Text t = new Text();
t.set(s);
Put put = new Put(t.getBytes());//*1
put.add("kq".getBytes(), "0".getBytes(),"1".getBytes());
List<Put> puts = new ArrayList<Put>();
puts.add(put);
Put put2 = new Put(t.toString().getBytes());//*2
put2.add("kq".getBytes(), "1".getBytes(),"2".getBytes());
puts.add(put2);
try {
table.batch(puts);
table.flushCommits();
table.close();
} catch (Exception e) {
e.printStackTrace();

其中标注的地方就是差别所在。如果按照*1方式put到hbase,跟按照*2方式put到hbase得到的数据如下:
91223224-20131120-96413376-150\x00\x00\x00
91223224-20131120-96413376-150


原因是getBytes获得的字节数组长度跟Text.getLength获得的长度不一致,不足的地方Text会自动补全。
String s = "91223224-20131120-96413376-150";
Text t = new Text();
t.set(s);
System.out.println(t.getLength()+"  |  "+t.getBytes().length);

输出结果是:30  |  33

所以如果要把Text的内容put到hbase,最保险的方式是先转换为String在获得字节数组Text.toString().getBytes()


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条