package com.ganqiang.recsys.hbase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.log4j.Logger;
import com.ganqiang.recsys.util.Constants;
import com.ganqiang.recsys.util.Initializable;
import com.ganqiang.recsys.util.StringUtil;
public class HBaseContext implements Initializable{
private static final Logger logger = Logger.getLogger(HBaseContext.class);
public static Configuration config;
private void initTable(HConnectionController hcc) {
HBaseAdmin admin = null;
try {
admin = new HBaseAdmin(hcc.getConfig());
for(String tablename : Constants.hbase_tables){
if (admin.tableExists(tablename)) {
logger.info("hbase table " + tablename + " already exists!");
} else {
HTableDescriptor tableDesc = new HTableDescriptor(
TableName.valueOf(tablename));
HColumnDescriptor hcol = new HColumnDescriptor(Constants.hbase_column_family);
hcol.setMaxVersions(1);
// hcol.setInMemory(true);
tableDesc.addFamily(hcol);
tableDesc.setDurability(Durability.ASYNC_WAL);
admin.createTable(tableDesc);
}
}
} catch (Exception e) {
logger.error("hbase init failed. ", e);
} finally {
if (admin != null) {
try {
admin.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public void init() {
config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", Constants.hbase_zk_quorum);
if (!StringUtil.isNullOrBlank(Constants.hbase_master)) {
config.set("hbase.master", Constants.hbase_master);
}
config.set("hbase.zookeeper.property.clientPort", String.valueOf(Constants.hbase_zk_client_port));
HConnectionController cc = new HConnectionController();
cc.setConfig(config);
Constants.hbase_con = cc;
initTable(cc);
logger.info("hbase context init finish.");
}
}