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 中的數據即可正常顯示: