小狼今天很郁闷,我想要mysql中表的字段同步到hbase列族上去,非得在那dos上写命令行,今天想了一个方法,用代码完成
从mysql中获取字段名称
public static String mysql(String biaoming){
StringBuffer sb = new StringBuffer();
try {
new Dbtool();
Connection conn = Dbtool.getConnection();
PreparedStatement statement = conn.prepareStatement("desc "+biaoming);
ResultSet rs = statement.executeQuery();
while(rs.next()){
String name = rs.getString(1);
String leixing = rs.getString(2);
String isnull = rs.getString(3);
String suoyin = rs.getString(4);
sb.append(name+",");
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
用mysql获取的字段创建hbase表
//创建表:
public static void createTable(String tableName,String columnFarily)throws Exception{
System.out.println(columnFarily);
try {
HBaseAdmin hBaseAdmin = new HBaseAdmin(con);
if (hBaseAdmin.tableExists(tableName)) {// 如果存在要创建的表,那么先删除,再创�?
hBaseAdmin.disableTable(tableName);
hBaseAdmin.deleteTable(tableName);
}
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
String[] datas = columnFarily.split(",");
for(int i=0;i<datas.length;i++){
tableDescriptor.addFamily(new HColumnDescriptor(datas[i]));
}
hBaseAdmin.createTable(tableDescriptor);
System.out.println("创建表:"+tableName+"成功!");
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
main方法,运行,创建表
private static Configuration con;
private static String mysqlname = "betweens";
private static String hbasename = "betweens";
public static void main(String[] args) throws Exception {
try {
String names = mysql(mysqlname);
con = HBaseConfiguration.create();
con.set("hbase.zookeeper.property.clientPort", "2181");
con.set("hbase.zookeeper.quorum", "slave1,slave2");
con.set("hbase.master", "master:600000");
if(names.matches(".*[,]")){
names = names.substring(0,names.length()-1);
createTable(hbasename,names);
}
} catch (Exception e) {
e.printStackTrace();
}
}