flume官网上介绍了很多sink/source;
这篇51cto博客有很多示例介绍;
HBaseSink/AsyncHBaseSink我是基于这篇apche官网博客做的。
我首先将详细介绍 SimpleHbaseEventSerializer.java 代码
SimpleHbaseEventSerializer类中包括的函数有
// 读取flume配置文件中的rowPrefix,rowPrefix的默认值是default rowPrefix = context.getString("rowPrefix", "default"); // 读取flume配置文件中的incrementRow,默认值是inRow incrementRow = context.getString("incrementRow", "incRow").getBytes(Charsets.UTF_8); // 读取flume配置文件中的suffix,默认值是uuid String suffix = context.getString("suffix", "uuid"); // 读取flume配置文件中的payloadColumn,默认之是pCol。payloadColumn对应这hbase的列名 String payloadColumn = context.getString("payloadColumn","pCol"); // 读取flume配置文件中的incrementColumn,默认值是iCol String incColumn = context.getString("incrementColumn","iCol"); if(payloadColumn != null && !payloadColumn.isEmpty()) { // 这几行代码是配置hbase中的rowkey前缀 if(suffix.equals("timestamp")){ keyType = KeyType.TS; } else if (suffix.equals("random")) { keyType = KeyType.RANDOM; } else if(suffix.equals("nano")){ keyType = KeyType.TSNANO; } else { keyType = KeyType.UUID; } plCol = payloadColumn.getBytes(Charsets.UTF_8); } if(incColumn != null && !incColumn.isEmpty()) { incCol = incColumn.getBytes(Charsets.UTF_8); }
public void initialize(Event event, byte[] cf) { this.payload = event.getBody(); this.cf = cf; }
public List<Row> getActions() throws FlumeException { List<Row> actions = new LinkedList<Row>(); if(plCol != null){ byte[] rowKey; try { // 配置rowkey,具体靠参考SimpleRowKeyGenerator类 if (keyType == KeyType.TS) { rowKey = SimpleRowKeyGenerator.getTimestampKey(rowPrefix); } else if(keyType == KeyType.RANDOM) { rowKey = SimpleRowKeyGenerator.getRandomKey(rowPrefix); } else if(keyType == KeyType.TSNANO) { rowKey = SimpleRowKeyGenerator.getNanoTimestampKey(rowPrefix); } else { rowKey = SimpleRowKeyGenerator.getUUIDKey(rowPrefix); } // 创建rowkey的一个put Put put = new Put(rowKey); // 在put中添加一列数据。columnfamily是cf,colunname是plCol,value是payload。 // plCol是payloadColumn的byte形式。而payloadColumn初始化于Configure函数,来自于flume的配置文件 // payload初始化于initalize函数,来自于event put.add(cf, plCol, payload); actions.add(put); } catch (Exception e){ throw new FlumeException("Could not get row key!", e); } } return actions; }
public List<Increment> getIncrements(){ List<Increment> incs = new LinkedList<Increment>(); if(incCol != null) { Increment inc = new Increment(incrementRow); inc.addColumn(cf, incCol, 1); incs.add(inc); } return incs; }该函数作用是在hbase增添一个自增序列。