2016-06-08 5 views
1

У меня есть данные ГИС, которая выглядит следующим образом -Сформировать композитный Hbase RowKey с использованием Подводящий канал Serializer

'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

ключ Composite должен работать в 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; 
     } 
Смежные вопросы