hbase编程指南
来源:互联网 发布:人工智能利弊作文 编辑:程序博客网 时间:2024/05/16 06:59
hbase编程指南
- hbase编程指南
- 0创建Configuration及Connection对象
- 1创建及删除表
- 2插入数据
- 3读取数据
- 4扫描表
- 5更改表结构
本文章参考hbase官方文档的2个示例,整合而成,示范了如何创建表,删除表,更改表结构,还是put, get, scan等操作。
完整代码请见:
https://github.com/lujinhong/hbasedemo/blob/master/src/main/java/com/lujinhong/demo/hbaseDemo/HbaseBasicDemo.java
官方文档请见:
* http://hbase.apache.org/book.html#quickstart
* http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/package-summary.html
0、创建Configuration及Connection对象
在客户端中连接hbase,首先需要2份配置文件,然后,使用配置对象创建一个Connection对象,再使用这个Connection对象来进行各种各样的操作。
private static Connection connection = null;public static Connection getConnection(Configuration config) throws IOException { if (connection == null) { connection = ConnectionFactory.createConnection(config); } return connection;}public static void main(String[] args) throws IOException { Configuration config = HBaseConfiguration.create(); config.addResource(new Path("/Users/liaoliuqing/Downloads/conf_loghbase/hbase", "hbase-site.xml")); config.addResource(new Path("/Users/liaoliuqing/Downloads/conf_loghbase", "core-site.xml")); try (Connection connection = getConnection(config)) { createAndDeleteSchemaTables(connection); putDataToHbase(connection); getDataFromHbase(connection); scanTableInHbase(connection); modifySchema(connection); }}
以上的几个步骤说明:
(1)创建一个Configuration对象,并加载core-site.xml与hbase-site.xml2个配置文件。也可以不指定路径,但这2个文件必须在CLASSPATH中,因此当你的配置没生效时,检查一下CLASSPATH是不是有其它配置文件。
(2)创建一个Connection对象,这里使用了单例模式,同时使用了AutoClosable的语法,保证connection会被正确close。Connection是有较高的代价的,因此一般情况下保证一个Connection打开即可,如果有多线程同时操作,则使用连接池。
当连接准备好之后,就可以开始各种各样的操作了。
1、创建及删除表
public static void createAndDeleteSchemaTables(Connection connection) throws IOException { try (Admin admin = connection.getAdmin()) { HTableDescriptor table = new HTableDescriptor(TableName.valueOf(TABLE_NAME)); table.addFamily(new HColumnDescriptor(FAMILY).setCompressionType(Algorithm.SNAPPY)); System.out.print("Creating table. "); // 删除表的demo if (admin.tableExists(table.getTableName())) { admin.disableTable(table.getTableName()); admin.deleteTable(table.getTableName()); } admin.createTable(table); System.out.println(" Done."); }}
关键步骤为:
(1)获取一个Admin对象,用于管理表。
(2)创建一个HTableDescriptor对象,表示一个表,但这个表还不存在。与下面的Table类对比。
(3)为这个表添加family,及指定压缩格式。
(4)判断表是否已经存在,若存在的话,先disable, 然后delete。
(5)创建表。
Admin, HTableDescriptor对象都是轻量级的,只要有需要就可以创建,
到此,hbase已经多了一个表。
2、插入数据
public static void putDataToHbase(Connection connection) throws IOException { try(Table table = connection.getTable(TableName.valueOf(TABLE_NAME))){ Put p = new Put(Bytes.toBytes("myLittleRow")); p.addColumn(Bytes.toBytes(FAMILY), Bytes.toBytes("someQualifier"), Bytes.toBytes("Some Value")); table.put(p); }}
(1)使用connection得到一个表对象。
(2)创建一个Put对象,参数为rowKey的字节组。如果不带timestamp参数,则默认使用当前系统时间。
(3)指定这个put的family, qualifier,以及具体的数据。family必须已经存在,而qualifier可以随意。
(4)插入数据
(5)关掉table对象。
3、读取数据
public static void getDataFromHbase(Connection connection) throws IOException { try (Table table = connection.getTable(TableName.valueOf(TABLE_NAME))) { Get g = new Get(Bytes.toBytes("myLittleRow")); Result r = table.get(g); byte[] value = r.getValue(Bytes.toBytes(FAMILY), Bytes.toBytes("someQualifier")); // If we convert the value bytes, we should get back 'Some Value', // the value we inserted at this location. String valueStr = Bytes.toString(value); System.out.println("GET: " + valueStr); }}
(1)创建一个Table对象。
(2)创建一个Get对象,参数是rowKey。
(3)获取result,并提取value
(4)将value打印出来。
4、扫描表
public static void scanTableInHbase(Connection connection) throws IOException { try (Table table = connection.getTable(TableName.valueOf(TABLE_NAME));) { Scan s = new Scan(); s.addColumn(Bytes.toBytes(FAMILY), Bytes.toBytes("someQualifier")); try (ResultScanner scanner = table.getScanner(s);) { for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { System.out.println("Found row: " + rr); } } } // The other approach is to use a foreach loop. Scanners are iterable! // for (Result rr : scanner) { // System.out.println("Found row: " + rr); // }}
(1)创建Table对象
(2)创建Scan对象。
(3)指定family与qualifier。
(4)获取ResultScanner对象。
(5)遍历结果集进行处理。
5、更改表结构
//有问题,而且一般不建议在代码中更改表结构。public static void modifySchema(Connection connection) throws IOException { try (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 = new HTableDescriptor(tableName); // Update existing table HColumnDescriptor newColumn = new HColumnDescriptor("NEWCF"); newColumn.setCompactionCompressionType(Algorithm.GZ); newColumn.setMaxVersions(HConstants.ALL_VERSIONS); admin.addColumn(tableName, newColumn); // Update existing column family HColumnDescriptor existingColumn = new HColumnDescriptor(FAMILY); existingColumn.setCompactionCompressionType(Algorithm.GZ); existingColumn.setMaxVersions(HConstants.ALL_VERSIONS); table.modifyFamily(existingColumn); admin.modifyTable(tableName, table); // Disable an existing table admin.disableTable(tableName); // Delete an existing column family admin.deleteColumn(tableName, FAMILY.getBytes("UTF-8")); // Delete a table (Need to be disabled first) admin.deleteTable(tableName); }}
- hbase编程指南
- hbase编程指南
- hbase编程指南
- hbase编程指南
- Hbase指南
- hbase 编程
- c++连接hbase指南
- Hbase 权威指南
- HBase权威指南 翻译
- hbase界面操作指南
- HBase权威指南中文版
- HBase分布式安装指南
- hbase 安装指南
- hbase安装指南
- HBase性能优化指南
- hadoop 权威指南 HBase
- Hbase 快速启动指南
- HBase性能优化指南
- BitLocker使用: 不重启,关闭已解锁加密驱动器。
- 一个小型名字字典
- EasyUI DataGrid 相同连续列合并
- ToolBar标题文字居中的方法
- 把map转换成String类型的json格式
- hbase编程指南
- Java程序设计概述及环境(Java核心技术卷Ⅰ)
- iOS Lable 多行显示URL,充满Label
- python sqlite3 mysql
- Https单向认证和双向认证
- guava中的join和split功能
- Zeromemory && memset
- opencontrail 2.20
- Linux系统ARP攻击的实现与防范