基于上一篇的SimpleHbaseEventSerializer 类解析, 接下来分析SimpleAsyncHbaseEventSerializer类,它和SimpleHbaseEventSerializer的主要区别在于getActions函数。
public List<PutRequest> getActions() {
List<PutRequest> actions = new ArrayList<PutRequest>();
if(payloadColumn != null){
byte[] rowKey;
try {
switch (keyType) {
case TS:
rowKey = SimpleRowKeyGenerator.getTimestampKey(rowPrefix);
break;
case TSNANO:
rowKey = SimpleRowKeyGenerator.getNanoTimestampKey(rowPrefix);
break;
case RANDOM:
rowKey = SimpleRowKeyGenerator.getRandomKey(rowPrefix);
break;
default:
rowKey = SimpleRowKeyGenerator.getUUIDKey(rowPrefix);
break;
}
// table是hbase中的表名
// rowkey是hbase中的rowkey
// cf是hbase中的columnFamily
// payloadColum是hbase中的column
// payload是hbase中的value
PutRequest putRequest = new PutRequest(table, rowKey, cf,
payloadColumn, payload);
actions.add(putRequest);
} catch (Exception e){
throw new FlumeException("Could not get row key!", e);
}
}
return actions;
}
与
SimpleHbaseEventSerializer的getActions的不同,不是产生put实例,而是生成PutRequest实例。