Hadoop的Text类getBytes字节数据put到HBase后有多余字符串问题
2015-07-03 14:19
323 查看
本文转载于博客:http://blackwing.iteye.com/blog/1978501
转载请注明原博主博客地址
转载请标明出处:http://blackwing.iteye.com/blog/1978501
org.apache.hadoop.io.Text里面的getBytes方法有个小坑。
先看现场:
其中标注的地方就是差别所在。如果按照*1方式put到hbase,跟按照*2方式put到hbase得到的数据如下:
原因是getBytes获得的字节数组长度跟Text.getLength获得的长度不一致,不足的地方Text会自动补全。
输出结果是:30 | 33
所以如果要把Text的内容put到hbase,最保险的方式是先转换为String在获得字节数组Text.toString().getBytes()
转载请标明出处:http://blackwing.iteye.com/blog/1978501
转载请注明原博主博客地址
转载请标明出处: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()
转载请标明出处:http://blackwing.iteye.com/blog/1978501
相关文章推荐
- option(recompile)
- linux SD卡驱动分析
- XShell 技巧分享
- squid3.5.5的编译安装
- Linux中查看CPU信息
- OpenSource备忘
- NSOperation的最大并发数量,挂起,依赖的操作
- linux下mysql的远程连接
- linux删除了占资源的log日志,磁盘还是满的不可用解决方案
- 更新Centos系统时间
- opencv不能读取MP4格式文件
- linux 逻辑卷管理 调整分区大小
- Dell服务器安装卸载监控Open Manage
- LINUX下的SD卡分区
- Linux常用快捷键
- 部署cacti监控服务配置说明
- Tomcat配置文件---配置访问指定路径下的项目
- Linux下设置环境变量PATH的方法
- SCVMM 2012 R2运维管理六之:SCVMM高可用部署
- linux中chkconfig命令的基本使用