關於HBase讀寫數據的方法
阿新 • • 發佈:2018-08-24
cep tin return ces n) .get eof tab exceptio 目前我這邊有兩種方案讀寫HBase數據
1.將對象直接序列化然後存儲到HBase;
2.將對象利用反射,一個Field對應一個列進行存儲
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讀寫數據的方法