2016-06-08 72 views
1

生成複合HBase的rowkey我有GIS數據看起來像這樣 -使用水槽串行

'111, 2011-02-01 20:30:30, 116.50443, 40.00951' 
'111, 2011-02-01 20:30:31, 116.50443, 40.00951' 
'112, 2011-02-01 20:30:30, 116.58197, 40.06665' 
'112, 2011-02-01 20:30:31, 116.58197, 40.06665' 

第一列是driver_id,第二是timestamp,第三是longitude &第四是latitude

我正在攝取這種類型的數據,使用Flume &我的接收器是HBase(類型 - AsyncHBaseSink)。
默認情況下,HBase將rowkey分配爲第一列(如111)。我想創建一個複合rowkey(如前兩欄的組合111_2011-02-01 20:30:30)。
我試圖在'AsyncHbaseLogEventSerializer.java'中放入所需的更改,但未反映。

請建議我該如何做同樣的事情。

+0

複合rowkey應該工作和正常使用這些密鑰。你能否粘貼你的代碼片段?你是如何做到這一點的? –

+0

請檢查示例片段,根據我的經驗,應該有可能(如果您沒有做過簡單的錯誤):-) –

+0

:我的回答有用嗎? –

回答

2

複合鍵應該在AsyncHbaseSerializer

工作,下面是示例代碼段。

在聲明類級別privae List<PutRequest> puts = null;

/** 
    * Method joinRowKeyContent. (with EMPTY string separation) 
    * 
     * Joiner is google guava class 
    * @param objArray Object... 
    * 
    * @return String 
    */ 
    public static String joinRowKeyContent(Object... objArray) { 
     return Joiner.on("").appendTo(new StringBuilder(), objArray).toString(); 
    } 

/** 
    * Method preParePutRequestForBody. 
    * 
    * @param rowKeyBytes 
    * @param timestamp 
    */ 
    private void preParePutRequest(final byte[] rowKeyBytes, final long timestamp) { 
     // Process 

      LOG.debug("Processing ..." + Bytes.toString(rowKeyBytes)); 

     final PutRequest putreq = new PutRequest(table, rowKeyBytes, colFam, Bytes.toBytes("yourcolumn"), yourcolumnasBytearray, timestamp); 
     puts.add(putreq); 
    } 

的GET操作方法看起來像......

@Override 
     public List<PutRequest> getActions() { 
//create rowkey like this 
    final String rowKey = joinRowKeyContent(driver_id, timestamp, longitude , latitude); 

    // call prepare put requests method here 
    final byte[] rowKeyBytes = Bytes.toBytes(rowKey); 
       puts.clear(); 
    preParePutRequest(rowKeyBytes ,<timestamp>) 
      return puts; 
     }