2016-06-08 41 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; 
     }