如何创建2个以上的HBase表?

时间:2019-03-02 21:27:24

标签: java hadoop hbase

我正在尝试创建2个HBase表,但是遇到了一些问题。这是我到目前为止所拥有的。表创建不正确。我可以在网上找到的唯一教程和帮助是关于创建一个HBase表而不是2个以上HBase表的。

更新:

  • 我正在使用HortonWorks Sandbox HDP 2.3.2。
  • 我不确定如何在不两次调用表描述符表来创建假日表和组表的情况下创建2个表
  • 我正在使用的教程是: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);
    }
    

    }

1 个答案:

答案 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进行了测试,并正确创建了表。