package com.xavient.dip.storm.bolt; import static org.apache.storm.hbase.common.Utils.toLong; import org.apache.hadoop.hbase.util.Bytes; import org.apache.storm.hbase.bolt.mapper.HBaseMapper; import org.apache.storm.hbase.common.ColumnList; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Tuple; public class DataIngestionHBaseMapper implements HBaseMapper { private static final long serialVersionUID = 7412080649211687669L; private String rowKeyField; private byte[] columnFamily; private Fields columnFields; private Fields counterFields; public DataIngestionHBaseMapper() { } public DataIngestionHBaseMapper withRowKeyField(String rowKeyField) { this.rowKeyField = rowKeyField; return this; } public DataIngestionHBaseMapper withColumnFields(Fields columnFields) { this.columnFields = columnFields; return this; } public DataIngestionHBaseMapper withCounterFields(Fields counterFields) { this.counterFields = counterFields; return this; } public DataIngestionHBaseMapper withColumnFamily(String columnFamily) { this.columnFamily = columnFamily.getBytes(); return this; } public byte[] rowKey(Tuple tuple) { Object objVal = tuple.getValueByField(this.rowKeyField); return toBytes(objVal); } public ColumnList columns(Tuple tuple) { ColumnList cols = new ColumnList(); if (this.columnFields != null) { for (String field : this.columnFields) { cols.addColumn(this.columnFamily, field.getBytes(), toBytes(tuple.getValueByField(field))); } } if (this.counterFields != null) { for (String field : this.counterFields) { cols.addCounter(this.columnFamily, field.getBytes(), toLong(tuple.getValueByField(field))); } } return cols; } private byte[] toBytes(Object obj) { return Bytes.toBytes(String.valueOf(obj)); } }