hbase value 支持多大字符串
答案:3 悬赏:80 手机版
解决时间 2021-02-18 07:27
- 提问者网友:流星是天使的眼泪
- 2021-02-17 18:43
hbase value 支持多大字符串
最佳答案
- 五星知识达人网友:迷人又混蛋
- 2021-02-17 19:22
文中可能涉及到的API:
Hadoop/HDFS:http://hadoop.apache.org/common/docs/current/api/
HBase: http://hbase.apache.org/apidocs/index.html?overview-summary.html
Begin!
在设置scan的startRowKey与endRowKey时,经常需要在某个条件字符串后面补充出一个范围。(再比如SingleColumnValueFilter也会用到)
比如:我的条件字符串是“abc”,scan时我需要将下述内容都囊括到我scan的范围内。
abc123
abcdabc
abccca
....
这时候我startRowKey使用“abc”即可,上述字符串按字典序都比“abc”要大,“abc”串c之后的值是0嘛~
而endRowKey最初我使用了“abc~”,因为我查ASCII码表时‘~’是倒数第二个,值为127,足够大,肯定大于上述串中的1、d、c等字符。
这样做,在处理英文数据时就足够了,系统运行正常。
但当我处理中文数据时,中文一般都是以UTF-8格式处理的,一个汉字表示出来类似“0xe6,0xc2,0xe1”。0xe6大于127。所以使用‘~’遇到中文必然悲催。
我的解决方法:
使用UltraEdit,进入十六进制编辑模式,将值改为FF。然后回到文本模式,将刚才的字符复制下来。这个字符应该是一个不可显示的字符,看着好像两个空格的长度。
然后在设置endRowKey时
new String(name + " "); //这里只是示例,引号间就是刚才复制的那个字符。将这个字符串作为endRowKey,果然所有的中文字符就囊括在内了。
另外一定要注意:使用HBase API时不要使用str.getBytes将String转化为byte[] ,而应该使用Bytes.toBytes(str);同样使用Bytes.toString(bytes);完成逆向转换。
Hadoop/HDFS:http://hadoop.apache.org/common/docs/current/api/
HBase: http://hbase.apache.org/apidocs/index.html?overview-summary.html
Begin!
在设置scan的startRowKey与endRowKey时,经常需要在某个条件字符串后面补充出一个范围。(再比如SingleColumnValueFilter也会用到)
比如:我的条件字符串是“abc”,scan时我需要将下述内容都囊括到我scan的范围内。
abc123
abcdabc
abccca
....
这时候我startRowKey使用“abc”即可,上述字符串按字典序都比“abc”要大,“abc”串c之后的值是0嘛~
而endRowKey最初我使用了“abc~”,因为我查ASCII码表时‘~’是倒数第二个,值为127,足够大,肯定大于上述串中的1、d、c等字符。
这样做,在处理英文数据时就足够了,系统运行正常。
但当我处理中文数据时,中文一般都是以UTF-8格式处理的,一个汉字表示出来类似“0xe6,0xc2,0xe1”。0xe6大于127。所以使用‘~’遇到中文必然悲催。
我的解决方法:
使用UltraEdit,进入十六进制编辑模式,将值改为FF。然后回到文本模式,将刚才的字符复制下来。这个字符应该是一个不可显示的字符,看着好像两个空格的长度。
然后在设置endRowKey时
new String(name + " "); //这里只是示例,引号间就是刚才复制的那个字符。将这个字符串作为endRowKey,果然所有的中文字符就囊括在内了。
另外一定要注意:使用HBase API时不要使用str.getBytes将String转化为byte[] ,而应该使用Bytes.toBytes(str);同样使用Bytes.toString(bytes);完成逆向转换。
全部回答
- 1楼网友:笑迎怀羞
- 2021-02-17 21:41
可通过此参数设置
- 2楼网友:迷人又混蛋
- 2021-02-17 20:49
目前也在测试,看hfile存储格式中有value length块用来存储value的长度,该块大小位4B,所能表示的十进制最大值为2147483647,所以value 的byte[]最大长度为2147483647即约为2G,不知道对不对,请大神指教
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯