本文介绍通过HBase Java API访问Lindorm宽表引擎的具体操作和使用示例。
前提条件
- 已安装Java环境,要求安装JDK 1.8及以上版本。
- 已获取Lindorm宽表引擎中使用HBase Java API访问的连接地址,具体操作请参见查看连接地址。
- 将客户端IP地址添加至云原生多模数据库Lindorm实例的白名单中,添加方法请参见设置白名单。
- 已完成HBase Java SDK的安装。具体操作请参见升级HBase Java SDK。
操作步骤
- 通过以下两种方式配置客户端连接Lindorm实例。
- 在配置文件hbase-site.xml中增加以下配置项。
<configuration> <!-- 集群的连接地址,在控制台页面的数据库连接界面获得(注意公网地址和VPC内网地址) --> <property> <name>hbase.zookeeper.quorum</name> <value>ld-xxxx-proxy-hbaseue.lindormue.xxx.rds.aliyuncs.com:30020</value> </property> <!-- 设置用户名和密码,默认均为root,可根据实际情况调整 --> <property> <name>hbase.client.username</name> <value>testuser</value> </property> <property> <name>hbase.client.password</name> <value>password</value> </property> </configuration>
- 在Project中输入下述代码新建Configuration,然后根据下表描述配置相关参数。
// 新建一个Configuration Configuration conf = HBaseConfiguration.create(); // 集群的连接地址(公网地址)在控制台页面的数据库连接界面获得 conf.set("hbase.zookeeper.quorum", "host:port"); // xml_template.comment.hbaseue.username_password.default conf.set("hbase.client.username", "用户名"); conf.set("hbase.client.password", "密码");
参数 示例值 获取方法 host:port ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30020 Lindorm宽表引擎中使用HBase Java API访问的连接地址,具体操作请参见查看连接地址。 用户名 testuser 如果您忘记用户名密码,可以通过Lindorm宽表引擎的集群管理系统修改密码,具体操作请参见修改用户密码。 密码 password
- 在配置文件hbase-site.xml中增加以下配置项。
- 建立Lindorm客户端和数据之间的连接。
Connection connection = ConnectionFactory.createConnection(conf);
说明 在程序生命周期内只需创建一次,该连接线程安全,可以共享给所有线程使用。在程序结束后,需要将Connection对象关闭,否则会造成连接泄露。也可以采用try finally方式防止泄露。 - 连接建立后,可以使用HBase Java API访问Lindorm宽表。下面提供一些简单的Java示例。
- DDL操作
try (Admin admin = connection.getAdmin()){ // 建表 HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename")); htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family"))); // 创建一个只有一个分区的表 // 在生产上建表时建议根据数据特点预先分区 admin.createTable(htd); // disable表 admin.disableTable(TableName.valueOf("tablename")); // truncate表 admin.truncateTable(TableName.valueOf("tablename"), true); // 删除表,删除表之前需要先执行DISABLE语句。 admin.deleteTable(TableName.valueOf("tablename")); }
- DML操作
//Table为非线程安全对象,每个线程在对Table操作时,都必须从Connection中获取相应的Table对象 try (Table table = connection.getTable(TableName.valueOf("tablename"))) { // 插入数据 Put put = new Put(Bytes.toBytes("row")); put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value")); table.put(put); // 单行读取 Get get = new Get(Bytes.toBytes("row")); Result res = table.get(get); // 删除一行数据 Delete delete = new Delete(Bytes.toBytes("row")); table.delete(delete); // scan 范围数据 Scan scan = new Scan(Bytes.toBytes("startRow"), Bytes.toBytes("endRow")); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { // 处理查询结果result // ... } scanner.close(); }
- DDL操作