问题描述
我正在尝试创建 2 个 HBase 表,但遇到了一些问题。 这是我到目前为止所拥有的。 表未正确创建。 我可以在网上找到的唯一教程和帮助是创建一个 HBase 表而不是 2 个以上的 HBase 表。
更新:
- 我使用的是 HortonWorks Sandbox HDP 2.3.2。
- 我不确定如何在不调用表描述符表两次来创建假日表和组表的情况下创建 2 个表
我使用的教程是: :
公共类表创建{
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); }
}
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 上找到完整示例: 我使用 hbase shell 进行了测试,并且表已正确创建。