我正在尝试创建2个HBase表,但是遇到了一些问题。这是我到目前为止所拥有的。表创建不正确。我可以在网上找到的唯一教程和帮助是关于创建一个HBase表而不是2个以上HBase表的。
更新:
我正在使用的教程是:https://www.tutorialspoint.com/hbase/hbase_create_table.htm
公共类TableCreation {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(config);
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("holidays"));
tableDescriptor.addFamily(new HColumnDescriptor("observed"));
tableDescriptor.addFamily(new HColumnDescriptor("date"));
admin.createTable(tableDescriptor);
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("group"));
tableDescriptor.addFamily(new HColumnDescriptor("type"));
tableDescriptor.addFamily(new HColumnDescriptor("size"));
admin.createTable(tableDescriptor);
}
}
答案 0 :(得分:1)
我设法编写了一些能正常工作的代码,并正确地插入了2个带有列的表。我正在使用Cloudera CDH5 Hadoop发行版。
这是一个示例类,它创建带有列族的表:
public class HBaseOps {
public static void createTable(Connection conn, String tableName, String... families) throws IOException {
Admin admin = conn.getAdmin();
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
for(String family : families) {
tableDescriptor.addFamily(new HColumnDescriptor(family));
}
admin.createTable(tableDescriptor);
}
}
您可以调用上面的代码来创建表:
//Connect to hbase
Configuration config = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(config);
//Create table
final String TABLE1 = "table1";
final String FAMILY1 = "family1";
final String FAMILY2 = "family2";
HBaseOps.createTable(connection, TABLE1, FAMILY1, FAMILY2);
//Create table
final String TABLE2 = "table2";
final String FAMILY3 = "family3";
final String FAMILY4 = "family4";
HBaseOps.createTable(connection, TABLE2, FAMILY3, FAMILY4);
您可以在我的github上找到完整的示例: Full Code on Github 我使用hbase shell进行了测试,并正确创建了表。