本文介绍如何通过HBase Java API访问云数据库HBase增强版实例。
前提条件
已安装Java SDK,具体操作请参见升级HBase Java SDK。
如果应用部署在ECS实例,您需要确保云数据库HBase增强版实例和ECS实例满足以下条件,以保证网络的连通性。ECS实例信息的查看方法请参见查看实例信息。
所在地域相同,并建议所在可用区相同(以减少网络延时)。
网络类型相同。
说明专有网络具有更高的安全性,建议使用专有网络。如果网络类型为专有网络,需确保使用相同的专有网络ID。
已将ECS实例的IP地址或客户端IP地址添加至云数据库HBase增强版实例的白名单中,具体操作请参见设置白名单。
操作步骤
初始化HBase配置。在Project中输入下述代码,然后根据下表描述配置参数。
// 新建一个Configuration Configuration conf = HBaseConfiguration.create(); // 集群的Java API访问地址,在控制台页面的数据库连接界面获得 conf.set("hbase.zookeeper.quorum", "ld-bp150tns0sjxs****-proxy-hbaseue.hbaseue.rds.aliyuncs.com:30020"); // xml_template.comment.hbaseue.username_password.default conf.set("hbase.client.username", "testuser"); conf.set("hbase.client.password", "password"); // 如果您直接依赖了阿里云hbase客户端,则无需配置connection.impl参数,如果您依赖了alihbase-connector,则需要配置此参数 //conf.set("hbase.client.connection.impl", AliHBaseUEClusterConnection.class.getName());
参数
示例值
获取方法
host:port
ld-bp150tns0sjxs****-proxy-hbaseue.hbaseue.rds.aliyuncs.com:30020
云数据库HBase增强版实例的Java API访问地址的连接地址,可以通过云数据库HBase控制台查看,单击目标实例,左侧导航栏选择数据库连接,在连接信息区域查看Java API访问地址。
用户名
testuser
如果您忘记用户名密码,可以通过云数据库HBase的集群管理系统修改密码,具体操作请参见管理用户。
密码
password
建立云数据库HBase增强版和数据之间的连接。
Connection connection = ConnectionFactory.createConnection(conf);
说明连接在程序生命周期内只需创建一次,该连接线程安全,可以共享给所有线程使用。在程序结束后,需要将Connection对象关闭,否则会造成连接泄露。也可以采用try finally方式防止泄露。
建立完连接后,即可使用Java API访问HBase增强版,以下提供简单的Java示例。
说明为了兼容HBase 1.x版本的客户端,本示例使用HBase 1.x版本客户端的写法。如果您使用的是HBase 2.x版本的客户端,在某些运行软件中会显示Deprecated,但不会影响正常运行。
DDL操作
try (Admin admin = connection.getAdmin()){ //建表 HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename")); htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family"))); //创建一个只有一个分区的表 //在生产上建表时建议根据数据特点预先分区 admin.createTable(htd); //禁用表 admin.disableTable(TableName.valueOf("tablename")); //清空表 admin.truncateTable(TableName.valueOf("tablename"), true); //删除表 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(); }