使用 Flume 序列化程序生成复合 hbase rowkey

Generate composite hbase rowkey using Flume Serializer

我有这样的 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)。我想创建一个复合行键(比如前两列的组合 111_2011-02-01 20:30:30)。
我尝试将所需的更改放入“AsyncHbaseLogEventSerializer.java”,但没有反映出来。

请建议我该怎么做。

复合键应该在 AsyncHbaseSerializer 中工作

下面是示例代码片段。

在 class 级别声明 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);
    }

Your get actions method looks like...

  @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;
        }