package net.hbase.secondaryindex.mapred;
import java.io.IOException;
import net.hbase.secondaryindex.util.Const;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapreduce.Mapper;
public class LoadMapper extends
Mapper<LongWritable, Text, ImmutableBytesWritable, Writable> {
private byte[] family = null;
private byte[] qualifier = null;
private byte[] cellValue = null;
private byte[] rowkey = null;
private long ts = System.currentTimeMillis();
public Configuration config;
public HTable table;
@Override
protected void setup(Context context) throws IOException,
InterruptedException {
config = context.getConfiguration();
table = new HTable(config, Bytes.toBytes(config
.get(TableOutputFormat.OUTPUT_TABLE)));
}
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
try {
String lineString = value.toString();
String[] arr = lineString.split("\t", -1);
if (arr.length == 2) {
String midTs = arr[0];
String cfq = arr[1];
String[] keys = midTs.split(Const.FIELD_COMMON_SEPARATOR, -1);
if (keys.length == 2) {
rowkey = Bytes.toBytes(keys[0]);
ts = Long.parseLong(keys[1]);
}
String[] vals = cfq.split(Const.FIELD_COMMON_SEPARATOR, -1);
if (vals.length == 3) {
family = Bytes.toBytes(vals[0]);
qualifier = Bytes.toBytes(vals[1]);
cellValue = Bytes.toBytes(vals[2]);
}
Put put = new Put(rowkey, ts);
put.add(family, qualifier, cellValue);
context.write(new ImmutableBytesWritable(rowkey), put);
// table.incrementColumnValue(rowkey, family,
// Const.COLUMN_RK_COUNTER_BYTE, 1L);
long cur = table.incrementColumnValue(rowkey, family,
Const.COLUMN_RK_COUNTER_BYTE, 1L);
System.out.println(cur);
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void cleanup(Context context) throws IOException,
InterruptedException {
if (null != table)
table.close();
}
}