package com.xavient.dip.flink.hbase;
import java.io.IOException;
import org.apache.flink.api.common.io.OutputFormat;
import org.apache.flink.configuration.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import com.xavient.dip.common.AppArgs;
import com.xavient.dip.common.config.DiPConfiguration;
public class HBaseOutputFormat implements OutputFormat<Object[]> {
private org.apache.hadoop.conf.Configuration config = null;
private HTable table = null;
AppArgs appArgs = null;
HBaseConfiguration conf = null;
private String columnFamily;
private String[] columnFields;
private static final long serialVersionUID = 1L;
public HBaseOutputFormat(AppArgs appArgs) {
this.appArgs = appArgs;
}
@Override
public void configure(Configuration parameters) {
try {
this.columnFamily = appArgs.getProperty(DiPConfiguration.HBASE_COL_FAMILY);
this.columnFields = appArgs.getProperty(DiPConfiguration.HBASE_COL_NAMES).split(DiPConfiguration.HBASE_COL_DELIMITER);
config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum",
appArgs.getProperty(DiPConfiguration.ZK_HOST) + ":" + appArgs.getProperty(DiPConfiguration.ZK_PORT));
config.set("hbase.master", appArgs.getProperty(DiPConfiguration.HBASE_MASTER));
config.set("zookeeper.znode.parent", "/hbase-unsecure");
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("deprecation")
@Override
public void open(int taskNumber, int numTasks) throws IOException {
table = new HTable(config, appArgs.getProperty(DiPConfiguration.HBASE_TABLE_NAME));
}
@Override
public void close() throws IOException {
table.flushCommits();
table.close();
}
@SuppressWarnings("deprecation")
@Override
public void writeRecord(Object[] record) throws IOException {
Object[] data = (Object[]) record;
Put put = new Put(Bytes.toBytes(String.valueOf(data[1])));
for (int i = 2; i < data.length; i++) {
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(columnFields[i - 2]),
Bytes.toBytes(String.valueOf(data[i])));
}
table.put(put);
}
}