贡献者:xixici
本章节提供有关使用基础 HBase API 执行操作的方法。 此方法并非详尽无遗,快速参考 User API Reference。 此处的示例不全面,仅用于说明目的。
Apache HBase 也拥有多种外部 APIs. 详见:Apache HBase External APIs
96. 例子
Example 25. 使用 Java 创建.修改和删除表
package com.example.hbase.admin;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HConstants;import org.apache.hadoop.hbase.HTableDescriptor;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.io.compress.Compression.Algorithm;public class Example {private static final String TABLE_NAME = "MY_TABLE_NAME_TOO";private static final String CF_DEFAULT = "DEFAULT_COLUMN_FAMILY";public static void createOrOverwrite(Admin admin, HTableDescriptor table) throws IOException {if (admin.tableExists(table.getTableName())) {admin.disableTable(table.getTableName());admin.deleteTable(table.getTableName());}admin.createTable(table);}public static void createSchemaTables(Configuration config) throws IOException {try (Connection connection = ConnectionFactory.createConnection(config);Admin admin = connection.getAdmin()) {HTableDescriptor table = new HTableDescriptor(TableName.valueOf(TABLE_NAME));table.addFamily(new HColumnDescriptor(CF_DEFAULT).setCompressionType(Algorithm.NONE));System.out.print("Creating table. ");createOrOverwrite(admin, table);System.out.println(" Done.");}}public static void modifySchema (Configuration config) throws IOException {try (Connection connection = ConnectionFactory.createConnection(config);Admin admin = connection.getAdmin()) {TableName tableName = TableName.valueOf(TABLE_NAME);if (!admin.tableExists(tableName)) {System.out.println("Table does not exist.");System.exit(-1);}HTableDescriptor table = admin.getTableDescriptor(tableName);// 更新表格HColumnDescriptor newColumn = new HColumnDescriptor("NEWCF");newColumn.setCompactionCompressionType(Algorithm.GZ);newColumn.setMaxVersions(HConstants.ALL_VERSIONS);admin.addColumn(tableName, newColumn);// 更新列族HColumnDescriptor existingColumn = new HColumnDescriptor(CF_DEFAULT);existingColumn.setCompactionCompressionType(Algorithm.GZ);existingColumn.setMaxVersions(HConstants.ALL_VERSIONS);table.modifyFamily(existingColumn);admin.modifyTable(tableName, table);// 禁用表格admin.disableTable(tableName);// 删除列族admin.deleteColumn(tableName, CF_DEFAULT.getBytes("UTF-8"));// 删除表格(需提前禁用)admin.deleteTable(tableName);}}public static void main(String... args) throws IOException {Configuration config = HBaseConfiguration.create();//添加必要配置文件(hbase-site.xml, core-site.xml)config.addResource(new Path(System.getenv("HBASE_CONF_DIR"), "hbase-site.xml"));config.addResource(new Path(System.getenv("HADOOP_CONF_DIR"), "core-site.xml"));createSchemaTables(config);modifySchema(config);}}
