1.HBASEUtil.java
package HBaseUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.TreeSet;
public class HBASEUtil {
public static void create_Namecpace(Configuration conf,String namecpace) throws IOException {
Connection connection = ConnectionFactory.createConnection(conf);
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(namecpace).
addConfiguration("author","plus").build();
admin.createNamespace(namespaceDescriptor);
System.out.println("初始化命名空间");
close(admin, connection);
}
private static void close(Admin admin, Connection connection) throws IOException {
if (admin != null) {
admin.close();
}
if (connection != null) {
connection.close();
}
}
public static void createTable(Configuration conf, String tableName, int regions, String... columnFamily) throws IOException {
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
if (isExistTable(conf, tableName)) {
return;
}
HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));
for (String cf : columnFamily) {
htd.addFamily(new HColumnDescriptor(cf));
}
admin.createTable(htd,genSplitKeys(regions));
System.out.println("已建表");
close(admin,connection);
}
private static byte[][] genSplitKeys(int regions) {
String[] keys = new String[regions];
DecimalFormat df = new DecimalFormat("000");
for (int i = 0; i < regions; i++) {
keys[i] = df.format(i*10) + "";
}
byte[][] splitKeys = new byte[regions][];
TreeSet<byte[]> treeSet = new TreeSet<byte[]>(Bytes.BYTES_COMPARATOR);
for (int i = 0; i < regions; i++) {
treeSet.add(Bytes.toBytes(keys[i]));
}
Iterator<byte[]> iterator = treeSet.iterator();
int index = 0;
while (iterator.hasNext()) {
byte[] next = iterator.next();
splitKeys[index++]= next;
}
return splitKeys;
}
public static boolean isExistTable(Configuration conf, String tableName) throws IOException {
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
boolean result = admin.tableExists(TableName.valueOf(tableName));
close(admin, connection);
return result;
}
}
2.HBaseDAO.java
package HBaseUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
public class HBaseDAO {
private static String namespace = PropertiesUtil.getProperty("hbase.calllog.namespace");
private static String tableName = PropertiesUtil.getProperty("hbase.calllog.tablename");
private static Integer regions = Integer.valueOf(PropertiesUtil.getProperty("hbase.calllog.regions"));
public static void main(String[] args) throws Exception {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.zookeeper.quorum", "hadoop2");
conf.set("zookeeper.znode.parent", "/hbase");
if (!HBASEUtil.isExistTable(conf, tableName)) {
HBASEUtil.create_Namecpace(conf, namespace);
HBASEUtil.createTable(conf, tableName, regions, "f1", "f2");
}
}
}
3.PropertiesUtil.java
package HBaseUtil;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesUtil {
public static Properties properties = null;
static {
InputStream is = ClassLoader.getSystemResourceAsStream("hbase_consumer.properties");
properties = new Properties();
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getProperty(String key){
return properties.getProperty(key);
}
}
4.hbase_consumer.properties
hbase.calllog.namespace=plus
hbase.calllog.tablename=plus:split
hbase.calllog.regions=5