This topic describes how to use the HBase Java API to access an ApsaraDB for HBase Performance-enhanced Edition cluster.
Prerequisites
- HBase SDK for Java is installed. For more information, see Download HBase SDK for Java.
- If you connect to an ApsaraDB for HBase Performance-enhanced Edition cluster over an internal network, make sure that an Elastic Compute Service (ECS) instance is purchased. This ECS instance must be deployed in the same virtual private cloud (VPC) as the cluster. The IP address of the ECS instance must be added to the whitelist of the cluster.
- For more information about how to purchase an ECS instance, see Create ECS instance.
- For more information about how to configure a whitelist, see Configure a whitelist.
- If you connect to an ApsaraDB for HBase Performance-enhanced Edition cluster over the Internet, make sure that a whitelist is configured for the cluster. For more information, see Configure a whitelist.
- Copy the client connection configuration.
- Initialize an HBase configuration and add the copied Java configuration code.
// Create a configuration. Configuration conf = HBaseConfiguration.create(); // Specify the endpoint of the cluster. You can obtain the endpoint on the Database Connection page of the cluster in the console. Select the public endpoint or the VPC-facing endpoint based on your business requirements. conf.set("hbase.zookeeper.quorum", "ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020"); // Specify the username and the password. The default username and password are both root. You can change them based on your business requirements. conf.set("hbase.client.username", "testuser") conf.set("hbase.client.password", "password") // If you add the ApsaraDB for HBase client as a dependency, you do not need to configure the connection.impl parameter. If you add the alihbase-connector plug-in as a dependency, you must configure the connection.impl parameter. //conf.set("hbase.client.connection.impl", AliHBaseUEClusterConnection.class.getName());
- Create an HBase connection.
In the application code that runs in an on-premises environment, create a connection based on the configuration.
// Create an HBase connection. You need only to perform this step once during the lifecycle of the program. The thread of this connection is secure and can be shared among all threads. // Close the connection object after the program ends. Otherwise, a connection leak may occur. // You can also execute a try-finally statement to prevent leakage. Connection connection = ConnectionFactory.createConnection(conf);
- After the connection is established, you can use the HBase Java API to access the ApsaraDB for HBase Performance-enhanced Edition cluster. The following section provides examples in the Java format:
- Data Definition Language (DDL) statements
try (Admin admin = connection.getAdmin()){ // Create a table. HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename")); htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family"))); // Create a table that has only one partition. // We recommend that you pre-split a table based on the data when you create the table in the production environment. admin.createTable(htd); // Disable a table. admin.disableTable(TableName.valueOf("tablename")); // Truncate a table. admin.truncateTable(TableName.valueOf("tablename"), true);
- Data Manipulation Language (DML) statements
// A table is a non-thread secure object. When a thread performs operations on a table, it must obtain the corresponding table object from the connection. try (Table table = connection.getTable(TableName.valueOf("tablename"))) { // Insert data. Put put = new Put(Bytes.toBytes("row")); put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value")); table.put(put); // Read a single row. Get get = new Get(Bytes.toBytes("row")); Result res = table.get(get); // Delete a row. Delete delete = new Delete(Bytes.toBytes("row")); table.delete(delete); // Scan the data within the specified range. Scan scan = new Scan(Bytes.toBytes("startRow"), Bytes.toBytes("endRow")); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { // Process the query result. // ... } scanner.close(); }
- Data Definition Language (DDL) statements