使用 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;
}
我有这样的 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;
}