全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
表格存储

Hello World

更新时间:2017-02-21 21:55:57

本节描述如何使用 TableStore HBase Client 实现一个简单的 Hello World 程序,主要包括下列操作:

  • 配置依赖
  • 连接表格存储
  • 创建表
  • 写数据
  • 读数据
  • 扫描数据
  • 删表

代码位置

当前示例程序使用了 HBase API 访问表格存储服务,完整的示例程序位于 Github 的 aliyun-tablestore-hbase-client 项目中,目录位置是 src/test/java/samples/HelloWorld.java。

使用 HBase API

配置项目依赖

Maven 的依赖配置如下:

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.aliyun.openservices</groupId>
  4. <artifactId>tablestore-hbase-client</artifactId>
  5. <version>1.2.0</version>
  6. </dependency>
  7. </dependencies>

更高级的配置请参考从 HBase 迁移到表格存储

配置文件

hbase-site.xml 中增加下列配置项:

  1. <configuration>
  2. <property>
  3. <name>hbase.client.connection.impl</name>
  4. <value>com.alicloud.tablestore.hbase.TablestoreConnection</value>
  5. </property>
  6. <property>
  7. <name>tablestore.client.endpoint</name>
  8. <value>endpoint</value>
  9. </property>
  10. <property>
  11. <name>tablestore.client.instancename</name>
  12. <value>instance_name</value>
  13. </property>
  14. <property>
  15. <name>tablestore.client.accesskeyid</name>
  16. <value>access_key_id</value>
  17. </property>
  18. <property>
  19. <name>tablestore.client.accesskeysecret</name>
  20. <value>access_key_secret</value>
  21. </property>
  22. <property>
  23. <name>hbase.client.tablestore.family</name>
  24. <value>f1</value>
  25. </property>
  26. <property>
  27. <name>hbase.client.tablestore.table</name>
  28. <value>ots_adaptor</value>
  29. </property>
  30. </configuration>

更高级的配置请参考从 HBase 迁移到表格存储

连接表格存储

通过创建一个 TableStoreConnection 对象来链接表格存储服务。

  1. Configuration config = HBaseConfiguration.create();
  2. // 创建一个 Tablestore Connection
  3. Connection connection = ConnectionFactory.createConnection(config);
  4. // Admin 负责创建、管理、删除等
  5. Admin admin = connection.getAdmin();

创建表

通过指定表名创建一张表,MaxVersion 和 TimeToLive 使用默认值。

  1. // 创建一个 HTableDescriptor,只有一个列族
  2. HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
  3. // 创建一个列族,MaxVersion 和 TimeToLive使用默认值,MaxVersion 默认值是 1,TimeToLive 默认值是 Integer.INF_MAX
  4. descriptor.addFamily(new HColumnDescriptor(COLUMN_FAMILY_NAME));
  5. // 通过 Admin 的 createTable 接口创建表
  6. System.out.println("Create table " + descriptor.getNameAsString());
  7. admin.createTable(descriptor);

写数据

写入一行数据到表格存储。

  1. // 创建一个 TablestoreTable,用于单个表上的读写更新删除等操作
  2. Table table = connection.getTable(TableName.valueOf(TABLE_NAME));
  3. // 创建一个 Put 对象,主键是 row_1
  4. System.out.println("Write one row to the table");
  5. Put put = new Put(ROW_KEY);
  6. // 增加一列,表格存储只支持单列族,列族名称在 hbase-site.xml 中配置,如果没有配置则默认是“f”,所以写入数据时 COLUMN_FAMILY_NAME 可以是空值
  7. put.addColumn(COLUMN_FAMILY_NAME, COLUMN_NAME, COLUMN_VALUE);
  8. // 执行 Table 的 put 操作,使用 HBase API 将这一行数据写入表格存储
  9. table.put(put);

读数据

读取指定行的数据。

  1. // 创建一个 Get 对象,读取主键为 ROW_KEY 的行
  2. Result getResult = table.get(new Get(ROW_KEY));
  3. Result result = table.get(get);
  4. // 打印结果
  5. String value = Bytes.toString(getResult.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME));
  6. System.out.println("Get one row by row key");
  7. System.out.printf("\t%s = %s\n", Bytes.toString(ROW_KEY), value);

扫描数据

范围读取数据。

  1. 扫描全表所有行数据
  2. System.out.println("Scan for all rows:");
  3. Scan scan = new Scan();
  4. ResultScanner scanner = table.getScanner(scan);
  5. // 循环打印结果
  6. for (Result row : scanner) {
  7. byte[] valueBytes = row.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME);
  8. System.out.println('\t' + Bytes.toString(valueBytes));
  9. }

删表

使用 Admin API 删除一张表。

  1. print("Delete the table");
  2. admin.disableTable(table.getName());
  3. admin.deleteTable(table.getName());

完整代码

  1. package samples;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.hbase.HBaseConfiguration;
  4. import org.apache.hadoop.hbase.HColumnDescriptor;
  5. import org.apache.hadoop.hbase.HTableDescriptor;
  6. import org.apache.hadoop.hbase.TableName;
  7. import org.apache.hadoop.hbase.client.*;
  8. import org.apache.hadoop.hbase.util.Bytes;
  9. import java.io.IOException;
  10. public class HelloWorld {
  11. private static final byte[] TABLE_NAME = Bytes.toBytes("HelloTablestore");
  12. private static final byte[] ROW_KEY = Bytes.toBytes("row_1");
  13. private static final byte[] COLUMN_FAMILY_NAME = Bytes.toBytes("f");
  14. private static final byte[] COLUMN_NAME = Bytes.toBytes("col_1");
  15. private static final byte[] COLUMN_VALUE = Bytes.toBytes("col_value");
  16. public static void main(String[] args) {
  17. helloWorld();
  18. }
  19. private static void helloWorld() {
  20. try {
  21. Configuration config = HBaseConfiguration.create();
  22. Connection connection = ConnectionFactory.createConnection(config);
  23. Admin admin = connection.getAdmin();
  24. HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
  25. descriptor.addFamily(new HColumnDescriptor(COLUMN_FAMILY_NAME));
  26. System.out.println("Create table " + descriptor.getNameAsString());
  27. admin.createTable(descriptor);
  28. Table table = connection.getTable(TableName.valueOf(TABLE_NAME));
  29. System.out.println("Write one row to the table");
  30. Put put = new Put(ROW_KEY);
  31. put.addColumn(COLUMN_FAMILY_NAME, COLUMN_NAME, COLUMN_VALUE);
  32. table.put(put);
  33. Result getResult = table.get(new Get(ROW_KEY));
  34. String value = Bytes.toString(getResult.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME));
  35. System.out.println("Get a one row by row key");
  36. System.out.printf("\t%s = %s\n", Bytes.toString(ROW_KEY), value);
  37. Scan scan = new Scan();
  38. System.out.println("Scan for all rows:");
  39. ResultScanner scanner = table.getScanner(scan);
  40. for (Result row : scanner) {
  41. byte[] valueBytes = row.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME);
  42. System.out.println('\t' + Bytes.toString(valueBytes));
  43. }
  44. System.out.println("Delete the table");
  45. admin.disableTable(table.getName());
  46. admin.deleteTable(table.getName());
  47. table.close();
  48. admin.close();
  49. connection.close();
  50. } catch (IOException e) {
  51. System.err.println("Exception while running HelloTablestore: " + e.toString());
  52. System.exit(1);
  53. }
  54. }
  55. }
本文导读目录