package com.lst.lc.hbase.service;
import java.io.IOException;
import java.util.List;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.springframework.data.hadoop.hbase.HbaseTemplate;
public class CreateHbaseTable {
private HbaseTemplate mHbaseTemplate;
private List<String> mNameList;
private List<String> mColumnList;
public CreateHbaseTable() {
}
public CreateHbaseTable(HbaseTemplate mHbaseTemplate,
List<String> mNameList, List<String> mColumnList) {
super();
this.mHbaseTemplate = mHbaseTemplate;
this.mNameList = mNameList;
this.mColumnList = mColumnList;
createTables();
}
/**
* 创建Hbase表
*
* @param tableName
* 表名数组
* @param column
* 列族数组
*/
public void createTables() {
try {
HBaseAdmin hBaseAdmin = new HBaseAdmin(
mHbaseTemplate.getConfiguration());
int columnNumbers = mColumnList.size();
int nameNumbers = mNameList.size();
for (int i = 0; i < nameNumbers; i++) {
// 如果存在要创建的表,不做操作
if (hBaseAdmin.tableExists(mNameList.get(i))) {
System.out.println("表" + mNameList.get(i) + "已存在");
} else {
HTableDescriptor tableDescriptor = new HTableDescriptor(
TableName.valueOf(mNameList.get(i)));
System.out.println("创建表:" + mNameList.get(i));
// 添加列族
for (int j = 0; j < columnNumbers; j++) {
tableDescriptor.addFamily(new HColumnDescriptor(
mColumnList.get(j)));
}
hBaseAdmin.createTable(tableDescriptor);
}
}
hBaseAdmin.close();
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}