HBase 乱码问题解决方法(通过java api 插入数据),hbaseapi
HBase 提供了 java 的api,可以很方便的通过 java 代码创建 table, 添加数据,删除数据等。
其中添加数据的代码如下:
package com.hbase.apidemo;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class InsertData {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "10.18.218.17:2181,10.18.218.5:2181,10.18.218.9:2181");
Connection conn = ConnectionFactory.createConnection(conf);
Table table = conn.getTable(TableName.valueOf("demo"));
Put p = new Put(Bytes.toBytes("1"));
p.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("alice"));
p.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes("15"));
table.put(p);
System.out.println("data inserted");
table.close();
}
}
此时,可以正常添加数据,在 HBase 中的数据如下:
其中 ROW = 1 的数据是通过代码添加的。
可以看出,此时添加数据是正常的,但有时我们在添加数据时,会出现乱码,比如下图:
其中的 value 无法正常读取,通常出现这种情况的原因是在插入数据时,字符转换出现问题。添加一个字段的数据是通过 addColumn函数。它的三个参数分别是 列族、列、值,都是 Bytes 数组。当通过 Bytes.toBytes() 进行转换时,如果是一个 int 或 double,则转换后会出现乱码。
int 型数据转换:
结果如下:
从中可以看出,直接把 int 型的参数传入 Bytes.toBytes() 函数中,编译不会报错,但数据的格式发生错误,再显示时就会出现乱码,因此,在调用 Bytes.toBytes() 函数时,需要先将 int, double 型数据转换成 String 类型,此时即可正常显示。
在添加 int, double 类型数据时,需使用下面的方式:
int a = 80;
double b = 110.23;
p.addColumn(Bytes.toBytes("info"),Bytes.toBytes("a"),Bytes.toBytes(String.valueOf(a)));
p.addColumn(Bytes.toBytes("info"),Bytes.toBytes("b"),Bytes.toBytes(String.valueOf(b)));
此时,HBase 中的数据即可正常显示:
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。