package com.gan.hbase; import java.io.IOException; import java.math.BigInteger; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.HTablePool; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.filter.Filter; import org.apache.hadoop.hbase.filter.FilterList; import org.apache.hadoop.hbase.filter.PageFilter; import org.apache.hadoop.hbase.filter.RegexStringComparator; import org.apache.hadoop.hbase.filter.RowFilter; import org.apache.hadoop.hbase.filter.SingleColumnValueFilter; import org.apache.hadoop.hbase.util.Bytes; import com.gan.util.Const; public class HbaseTest { public static Configuration configuration; /** * a.配置host, 例如:ganbjc2 192.168.11.72 * b.参考:hbase-site.xml: * <property> <name>hbase.zookeeper.quorum</name> * <value>ganbjc2,ganbjc3,ganbjc4</value> * </property> * <property> <name>hbase.rootdir</name> * <value>hdfs://ganbjc1:12000/hbase</value> * </property> */ static { configuration = HBaseConfiguration.create(); //String ZOOKEEPER_QUORAM = "zk-1:2181,zk-2:2181,zk-3:2181,zk-4:2181,zk-5:2181,zk-6:2181"; configuration.set("hbase.zookeeper.quorum","ganbjc2:2181,ganbjc3:2181,ganbjc4:2181"); configuration.set("hbase.rootdir", "hdfs://ganbjc1:12000/hbase"); } public static void main(String[] args) throws Exception { // createTable("gangliang13"); //insertData("gangliang13"); //deleteRow("gangliang13", "112"); //queryAllLimit("gangliang13",2); //queryByRowKey("GidCross","0100020a000056c100004e374e267993"); //queryByColumn("gangliang13","aaa1"); //testLikeQuery("gangliang13","11"); //queryByManyColumn("gangliang13"); //queryAll("gangliang13"); //System.out.println("input GidCross rawkey:"+args[0]); queryByRowKey("Gid_Cat_Visit", "0100020a00000353000005b64e1f00a8"); } public static void createTable(Configuration configuration, String tableName, String columnDescriptor) { System.out.println("start create table ......"); try { HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration); if (hBaseAdmin.tableExists(tableName)) { hBaseAdmin.disableTable(tableName); hBaseAdmin.deleteTable(tableName); } HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); tableDescriptor.addFamily(new HColumnDescriptor(columnDescriptor)); hBaseAdmin.createTable(tableDescriptor,getHexSplits("0","FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",16)); } catch (Exception e) { e.printStackTrace(); } System.out.println("end create table ......"); } public static void createTable(Configuration configuration,String tableName, String columnDescriptor,List<String> regionKeyList) { System.out.println("start create table ......"); try { HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration); if (hBaseAdmin.tableExists(tableName)) { hBaseAdmin.disableTable(tableName); hBaseAdmin.deleteTable(tableName); } HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); tableDescriptor.addFamily(new HColumnDescriptor(columnDescriptor)); hBaseAdmin.createTable(tableDescriptor,getHexSplits(regionKeyList)); } catch (Exception e) { e.printStackTrace(); } System.out.println("end create table ......"); } public static byte[][] getHexSplits(String startKey, String endKey, int numRegions) { byte[][] splits = new byte[numRegions - 1][]; BigInteger lowestKey = new BigInteger(startKey, 16); BigInteger highestKey = new BigInteger(endKey, 16); BigInteger range = highestKey.subtract(lowestKey); BigInteger regionIncrement = range.divide(BigInteger .valueOf(numRegions)); lowestKey = lowestKey.add(regionIncrement); for (int i = 0; i < numRegions - 1; i++) { BigInteger key = lowestKey.add(regionIncrement.multiply(BigInteger .valueOf(i))); byte[] b = String.format("%016x", key).getBytes(); splits[i] = b; } return splits; } public static byte[][] getHexSplits(List<String> regionStartKeyList) { if(regionStartKeyList ==null || regionStartKeyList.size()==0){ return getHexSplits("0","FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",16); }else{ byte[][] splits = new byte[regionStartKeyList.size()][]; for (int i = 0; i <regionStartKeyList.size(); i++) { BigInteger key = new BigInteger(regionStartKeyList.get(i), 16); byte[] b = String.format("%016x", key).getBytes(); splits[i] = b; } return splits; } } public StringBuffer compactKV(String k, String v) { StringBuffer retval = new StringBuffer(); retval.append(k).append(Const.KV_SPLIT).append(v) .append(Const.COLUMN_SPLIT); return retval; } /** * 如果存在要创建的表,那么先删除,再创建 * @param tableName */ public static void createTable(String tableName) { System.out.println("start create table ......"); try { HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration); if (hBaseAdmin.tableExists(tableName)) { hBaseAdmin.disableTable(tableName); hBaseAdmin.deleteTable(tableName); System.out.println(tableName + " is exist,detele...."); } HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); tableDescriptor.addFamily(new HColumnDescriptor("name")); tableDescriptor.addFamily(new HColumnDescriptor("age")); tableDescriptor.addFamily(new HColumnDescriptor("sex")); hBaseAdmin.createTable(tableDescriptor); } catch (MasterNotRunningException e) { e.printStackTrace(); } catch (ZooKeeperConnectionException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("end create table ......"); } /** * 插入数据 * @param tableName */ public static void insertData(String tableName) { System.out.println("start insert data ......"); HTablePool pool = new HTablePool(configuration, 1000); HTableInterface table = pool.getTable(tableName); Put put = new Put("111".getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值 put.add("name".getBytes(), null, "aaa1".getBytes());// 本行数据的第一列 put.add("age".getBytes(), null, "bbb1".getBytes());// 本行数据的第三列 put.add("sex".getBytes(), null, "ccc1".getBytes());// 本行数据的第三列 Put put2 = new Put("222".getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值 put2.add("name".getBytes(), null, "aaa2".getBytes());// 本行数据的第一列 put2.add("name".getBytes(), "nickname".getBytes(), "aaabbbbbnick".getBytes()); put2.add("age".getBytes(), null, "bbb2".getBytes());// 本行数据的第三列 put2.add("sex".getBytes(), null, "ccc2".getBytes());// 本行数据的第三列 try { table.put(put); table.put(put2); } catch (IOException e) { e.printStackTrace(); } System.out.println("end insert data ......"); } /** * * @param tableName 取前面limit条 */ public static void queryAllLimit(String tableName,int limit) { HTablePool pool = new HTablePool(configuration, 1000); HTableInterface table = pool.getTable(tableName); try { Scan scan = new Scan(); scan.setCaching(1); Filter filter = new PageFilter(limit); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan);// 执行扫描查找 int num = 0; Iterator<Result> res = scanner.iterator();// 返回查询遍历器 while (res.hasNext()) { Result result = res.next(); table.setWriteBufferSize(1024*1024*1); KeyValue[] kv = result.raw(); for (int i = 0; i < kv.length; i++) { System.out.print(new String(kv[i].getRow()) + " "); System.out.print(new String(kv[i].getFamily()) + ":"); System.out.print(new String(kv[i].getQualifier()) + " "); System.out.print(kv[i].getTimestamp() + " "); System.out.println(new String(kv[i].getValue())); } } } catch (IOException e) { e.printStackTrace(); } } /** * 对行key进行like查询 * @param table * @param likeQuery * @throws Exception */ public static void testLikeQuery(String table,String likeQuery) throws Exception { Scan scan = new Scan(); RegexStringComparator comp = new RegexStringComparator(likeQuery); RowFilter filter = new RowFilter(CompareOp.EQUAL, comp); scan.setFilter(filter); scan.setCaching(200); scan.setCacheBlocks(false); HTable hTable = new HTable(configuration, table); ResultScanner scanner = hTable.getScanner(scan); for (Result r : scanner) { KeyValue[] kv = r.raw(); for (int i = 0; i < kv.length; i++) { System.out.print(new String(kv[i].getRow()) + " "); System.out.print(new String(kv[i].getFamily()) + ":"); System.out.print(new String(kv[i].getQualifier()) + " "); System.out.print(kv[i].getTimestamp() + " "); System.out.println(new String(kv[i].getValue())); } } } /** * 查询表所有行 * @param tableName */ public static void queryAll(String tableName) { HTablePool pool = new HTablePool(configuration, 1000); HTableInterface table = pool.getTable(tableName); try { ResultScanner rs = table.getScanner(new Scan()); for (Result r : rs) { KeyValue[] kv = r.raw(); for (int i = 0; i < kv.length; i++) { System.out.print(new String(kv[i].getRow()) + " "); System.out.print(new String(kv[i].getFamily()) + ":"); System.out.print(new String(kv[i].getQualifier()) + " "); System.out.print(kv[i].getTimestamp() + " "); System.out.println(new String(kv[i].getValue())); } } } catch (IOException e) { e.printStackTrace(); } } /** * 根据行记录值删除 * @param tablename * @param rowkey */ public static void deleteRow(String tablename, String rowkey) { try { HTable table = new HTable(configuration, tablename); List<Delete> list = new ArrayList<Delete>(); Delete d1 = new Delete(rowkey.getBytes()); list.add(d1); table.delete(list); System.out.println("删除行成功!"); } catch (IOException e) { e.printStackTrace(); } } /** * 根据行记录索引 * @param tableName * @param row * @throws IOException */ public static void queryByRowKey(String tableName,String row) throws IOException { HTable table = new HTable(configuration, tableName); //System.err.println(table.getRegionLocation(row.getBytes())); try { Get scan = new Get(row.getBytes());// 根据rowkey查询 Result r = table.get(scan); KeyValue[] kv = r.raw(); for (int i = 0; i < kv.length; i++) { // System.out.print(new String(kv[i].getRow()) + " "); //System.out.print(new String(kv[i].getFamily()) + ":"); System.out.print(new String(kv[i].getQualifier()) + " "); // System.out.print(kv[i].getTimestamp() + " "); System.out.println(new String(kv[i].getValue())); } System.out.println("=============="); for (KeyValue kv2 : r.raw()) { System.out.println(new String(kv2.getQualifier()) + " "); System.out.println(new String(kv2.getValue()) + " "); } } catch (IOException e) { e.printStackTrace(); } } /** * 按列查询,查询多条记录 * @param tableName */ public static void queryByColumn(String tableName,String columnValue) { try { HTable table = new HTable(configuration,tableName); Filter filter = new SingleColumnValueFilter(Bytes.toBytes("name"), null, CompareOp.EQUAL, Bytes.toBytes(columnValue)); // 当列column1的值为aaa时进行查询 Scan s = new Scan(); s.setFilter(filter); ResultScanner rs = table.getScanner(s); for (Result r : rs) { KeyValue[] kv = r.raw(); for (int i = 0; i < kv.length; i++) { System.out.print(new String(kv[i].getRow()) + " "); System.out.print(new String(kv[i].getFamily()) + ":"); System.out.print(new String(kv[i].getQualifier()) + " "); System.out.print(kv[i].getTimestamp() + " "); System.out.println(new String(kv[i].getValue())); } } } catch (Exception e) { e.printStackTrace(); } } /** * 按多列查询,查询多条记录 * @param tableName */ public static void queryByManyColumn(String tableName) { try { HTable table = new HTable(configuration,tableName); List<Filter> filters = new ArrayList<Filter>(); Filter filter1 = new SingleColumnValueFilter(Bytes .toBytes("age"), null, CompareOp.EQUAL, Bytes.toBytes("bbb1")); filters.add(filter1); Filter filter2 = new SingleColumnValueFilter(Bytes .toBytes("name"), null, CompareOp.EQUAL, Bytes.toBytes("aaa1")); filters.add(filter2); FilterList filterList1 = new FilterList(filters); Scan scan = new Scan(); scan.setFilter(filterList1); ResultScanner rs = table.getScanner(scan); for (Result r : rs) { KeyValue[] kv = r.raw(); for (int i = 0; i < kv.length; i++) { System.out.print(new String(kv[i].getRow()) + " "); System.out.print(new String(kv[i].getFamily()) + ":"); System.out.print(new String(kv[i].getQualifier()) + " "); System.out.print(kv[i].getTimestamp() + " "); System.out.println(new String(kv[i].getValue())); } } rs.close(); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
在本文档中,我们将深入探讨如何使用Java API与HBase数据库进行交互,特别是关于如何创建表、修改表结构以及批量插入数据。HBase是Apache的一个分布式、可扩展的大数据存储系统,它基于谷歌的Bigtable设计,适用于...
"hbase java api 所需最精简 jar"这个标题意味着我们将探讨的是为了在Java环境中最小化依赖,但仍能实现基本HBase操作所需的JAR文件。 首先,我们需要理解HBase Java API的核心组件。HBase的Java客户端API提供了一...
HBase中文API为开发者提供了在中文环境中操作HBase的便利。 1. **入门** - **介绍**: HBase为大数据处理提供了实时读写能力,特别适合于存储海量稀疏数据。 - **快速开始**: 开发者通常需要了解如何创建表、插入...
"Hbase 0.9 API"指的是HBase在0.94.5版本中的客户端API,这个版本是HBase发展历史上的一个重要里程碑,为开发者提供了丰富的功能来操作HBase数据库。 首先,HBase的API主要分为两种:Java API和Shell命令。Java API...
Java 操作 Hbase 进行建表、删表以及对数据进行增删改查 一、Hbase 简介 Hbase 是一个开源的、分布式的、基于 column-...这些操作都是基于 Hbase 的 API 实现的。同时,也介绍了使用 Filter 对象进行条件查询的方法。
8. **异步操作**:为了提高性能,HBase提供了异步操作API,如`AsyncTable`和`AsyncAdmin`。这些API允许程序员以非阻塞方式执行操作,提高系统吞吐量。 9. **故障恢复和容错**:HBase通过Zookeeper进行协调和故障...
《HBase in Action》是一本由Nick Dimiduk和Amandeep Khurana撰写的关于HBase实践的书籍,该书旨在帮助读者深入理解HBase的工作原理及其实战应用。 **章节概述**: - **第一部分:HBase基础** - **第1章:介绍...
表一旦创建,就可以通过HTable类来对表中的数据进行操作,如增加、删除、查询数据等。 在使用HBase API时,应当注意的是,数据在HBase中是以二进制形式存储的,因此,应用程序必须负责将数据转换成适当的格式。而且...
4. 使用HBase shell或API创建表,定义列族,插入数据,并进行查询操作。 5. 监控和维护:使用HBase自带的Web UI监控集群状态,调整HBase配置以优化性能。 在搭建HBase分布式数据库系统时,需要注意集群中的...
HBase提供了多种API来操作表,包括: - `Admin`: 用于管理表,如创建、删除表等。 - `Table`: 用于执行对表的具体操作,如插入、查询数据等。 - `HTableDescriptor`: 描述表的元数据,如列族、表名等。 - `...
HBase的API支持Java、Python、REST等多种语言,方便各种应用场景的开发。 总结起来,HBase是一个强大的大数据存储解决方案,尤其适合处理海量、稀疏的数据。HBase 1.2.0和2.0.5这两个版本都在性能和特性上有所提升...
4. **Java API**: HBase提供了一套丰富的Java API,允许开发者创建表、获取/更新数据、执行扫描操作等。主要接口包括`HBaseAdmin`(用于管理表和列族)、`HTable`(用于操作表)和`Put`、`Get`、`ResultScanner`等类...
在Python中操作HBase主要依赖于Thrift和HBase的REST API或者使用现成的库,例如happybase。 HBase是一个功能强大的非关系型数据库,适合处理大规模的数据存储和高速读写需求。无论是对于初学者还是有经验的开发者,...
授权则控制不同用户对表和列族的访问权限,而审计功能则记录所有的操作,以便于追踪和分析。 6. **安装与配置**:解压"Hbase-0.94.5-security.tar.gz"后,用户需要根据自己的环境配置HBase,包括设置Hadoop的路径、...
HBase还提供了丰富的管理功能,如表分区、Region分裂、监控等,这需要通过HBase的Admin API或者管理工具来实现。例如,使用`list`命令查看所有表,`split`命令手动分裂Region。 **七、HBase与Hadoop集成** HBase与...
使用HBase开发应用程序,可以通过Java API或者HBase Shell,也可以使用如HBase Thrift或REST接口与非Java语言交互。此外,HBase与Hadoop其他组件如Hive、Pig等集成良好,可以在大数据分析流程中发挥重要作用。 总之...
HBase提供了命令行工具`hbase shell`进行数据操作,同时也支持Java API和RESTful接口供应用程序调用。监控和管理方面,HBase提供了Web UI,展示集群状态、Region分布等信息。 8. **优化策略** 针对性能优化,用户...
5. Table 接口:用于实现 HBase 表的操作,属于 org.apache.hadoop.hbase.client 包。Table 接口提供了对表操作的方法,如 put、get、delete 等。 6. Put 类:用于插入数据操作,属于 org.apache.hadoop.hbase....
此外,对表的分裂和合并操作也进行了优化,使得动态调整数据分布变得更加平滑,降低了对服务的影响。 其次,HBase 2.0.0-beta-2在数据模型上进一步完善。列族是HBase的基本存储单元,每个列族包含一组列,列族内的...