1. 程式人生 > >關於HBase讀寫數據的方法

關於HBase讀寫數據的方法

cep tin return ces n) .get eof tab exceptio

目前我這邊有兩種方案讀寫HBase數據
1.將對象直接序列化然後存儲到HBase;
2.將對象利用反射,一個Field對應一個列進行存儲

第一種方法

private Connection getConn(){
        Configuration config = HBaseConfiguration.create();
        config.set(HConstants.ZOOKEEPER_QUORUM, zkAddress);
        Connection connection = null;
        try {
            connection = ConnectionFactory.createConnection(config);
            return connection;
        }catch (IOException e){
            return null;
        }
    }
 public <T> int insertIntoTable(String tableName,String conlumFamily,String rowKey,T column) {
        try {
            Connection conn = getConn();
            Date date = new Date();
            Put p = new Put(rowKey.getBytes(), date.getTime());
            p.addColumn(conlumFamily.getBytes(), "obj".getBytes(), ObjectBytesUtil.toByteArray(column));
            conn.getTable(TableName.valueOf(tableName)).put(p);
            return 1;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return -1;
    }

第二種方法

public <T> int insertIntoTable(String tableName,String conlumFamily,String rowKey,T column) {
        try {
            Connection conn = getConn();
            Date date = new Date();
            Put p = new Put(rowKey.getBytes(), date.getTime());
            Field[] fs = column.getClass().getFields();
            for (int j = 0; j < fs.length; j++) {
                Field f = fs[j];
                                //ObjectBytesUtil.dataToByte(f.get(column)  將對應屬性轉換為byte[]
                p.addColumn(conlumFamily.getBytes(), f.getName().getBytes(), ObjectBytesUtil.dataToByte(f.get(column)));
            }
            conn.getTable(TableName.valueOf(tableName)).put(p);
            return 1;
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return -1;
    }

不知道 哪種方法要好一點

關於HBase讀寫數據的方法