Hbase-1.1.1-java API

1.工具类

  1 package com.lixin.stuty.hbase;
  2
  3 import java.io.IOException;
  4
  5 import org.apache.commons.configuration.ConfigurationUtils;
  6 import org.apache.commons.lang.StringUtils;
  7 import org.apache.hadoop.conf.Configuration;
  8 import org.apache.hadoop.hbase.Cell;
  9 import org.apache.hadoop.hbase.HBaseConfiguration;
 10 import org.apache.hadoop.hbase.HColumnDescriptor;
 11 import org.apache.hadoop.hbase.HTableDescriptor;
 12 import org.apache.hadoop.hbase.TableName;
 13 import org.apache.hadoop.hbase.client.Admin;
 14 import org.apache.hadoop.hbase.client.Connection;
 15 import org.apache.hadoop.hbase.client.ConnectionFactory;
 16 import org.apache.hadoop.hbase.client.Get;
 17 import org.apache.hadoop.hbase.client.Put;
 18 import org.apache.hadoop.hbase.client.Result;
 19 import org.apache.hadoop.hbase.client.ResultScanner;
 20 import org.apache.hadoop.hbase.client.Scan;
 21 import org.apache.hadoop.hbase.client.Table;
 22 /**
 23  * hbase for version 1.1.1
 24  * @author Administrator
 25  *
 26  */
 27 public class HBaseUtil {
 28     public static final String ZK_QUORUM  = "hbase.zookeeper.quorum";
 29     public static final String ZK_CLIENTPORT  = "hbase.zookeeper.property.clientPort";
 30     private Configuration conf = HBaseConfiguration.create();
 31     private Connection connection ;
 32     private Admin admin;
 33
 34     public HBaseUtil(String zk_quorum) {
 35         conf.set(ZK_QUORUM, zk_quorum);
 36         init();
 37     }
 38
 39     public HBaseUtil(String zk_quorum,String zk_clientPort) {
 40         conf.set(ZK_QUORUM, zk_quorum);
 41         conf.set(ZK_CLIENTPORT, zk_clientPort);
 42         init();
 43     }
 44
 45     private void init(){
 46         try {
 47             //Connection 的创建是个重量级的工作,线程安全,是操作hbase的入口
 48             connection = ConnectionFactory.createConnection(conf);
 49             admin  = connection.getAdmin();
 50         } catch (IOException e) {
 51             e.printStackTrace();
 52         }
 53     }
 54     public void close(){
 55         try {
 56             if(admin != null) admin.close();
 57             if(connection!=null) connection.close();
 58         } catch (IOException e) {
 59             e.printStackTrace();
 60         }
 61     }
 62     /**
 63      * 创建一个表
 64      * @param table_name 表名称
 65      * @param family_names 列族名称集合
 66      * @throws IOException
 67      */
 68     public void create(String table_name,String... family_names) throws IOException{
 69         //获取TableName
 70         TableName tableName = TableName.valueOf(table_name);
 71         //table 描述
 72         HTableDescriptor htabledes =  new HTableDescriptor(tableName);
 73         for(String family_name : family_names){
 74             //column 描述
 75             HColumnDescriptor family = new HColumnDescriptor(family_name);
 76             htabledes.addFamily(family);
 77         }
 78         admin.createTable(htabledes);
 79     }
 80     /**
 81      * 增加一条记录
 82      * @param table_name 表名称
 83      * @param row    rowkey
 84      * @param family 列族名称
 85      * @param qualifier 列族限定符(可以为null)
 86      * @param value 值
 87      * @throws IOException
 88      */
 89     public void addColumn(String table_name,String row, String family,String qualifier,String value) throws IOException{
 90         //表名对象
 91         TableName tableName = TableName.valueOf(table_name);
 92         //表对象
 93         Table table = connection.getTable(tableName);
 94         // put对象 负责录入数据
 95         Put put = new Put(row.getBytes());
 96         put.addColumn(family.getBytes(), qualifier.getBytes(), value.getBytes());
 97         table.put(put);
 98     }
 99     /**
100      * 判断表是否存在
101      */
102     public boolean tableExist(String table_name) throws IOException{
103         return admin.tableExists(TableName.valueOf(table_name));
104     }
105     /**删除表*/
106     public void deleteTable(String table_name) throws IOException{
107         TableName tableName = TableName.valueOf(table_name);
108         if(admin.tableExists(tableName)){
109             admin.disableTable(tableName);
110             admin.deleteTable(tableName);
111         }
112     }
113     /**
114      * 查询单个row的记录
115      * @param table_name 表明
116      * @param row  行键
117      * @param family  列族
118      * @param qualifier  列族成员
119      * @return
120      * @throws IOException
121      */
122     public Cell[] getRow(String table_name,String row,String family,String qualifier) throws IOException{
123         Cell[] cells = null;
124         //check
125         if(StringUtils.isEmpty(table_name)||StringUtils.isEmpty(row)){
126             return null;
127         }
128         //Table
129         Table table = connection.getTable(TableName.valueOf(table_name));
130         Get get = new Get(row.getBytes());
131         //判断在查询记录时,是否限定列族和子列(qualifier).
132         if(StringUtils.isNotEmpty(family)&&StringUtils.isNotEmpty(qualifier)){
133             get.addColumn(family.getBytes(), qualifier.getBytes());
134         }
135         if(StringUtils.isNotEmpty(family)&&StringUtils.isEmpty(qualifier)){
136             get.addFamily(family.getBytes());
137         }
138         Result result = table.get(get);
139         cells = result.rawCells();
140         return cells;
141     }
142     /**
143      * 获取表中的所有记录,可以指定列族,列族成员,开始行键,结束行键.
144      * @param table_name
145      * @param family
146      * @param qualifier
147      * @param startRow
148      * @param stopRow
149      * @return
150      * @throws IOException
151      */
152     public ResultScanner getScan(String table_name,String family,String qualifier,String startRow,String stopRow) throws IOException{
153         ResultScanner resultScanner = null;
154
155         //Table
156         Table table = connection.getTable(TableName.valueOf(table_name));
157         Scan scan = new Scan();
158         if(StringUtils.isNotBlank(family)&& StringUtils.isNotEmpty(qualifier)){
159             scan.addColumn(family.getBytes(), qualifier.getBytes());
160         }
161         if(StringUtils.isNotEmpty(family)&& StringUtils.isEmpty(qualifier)){
162             scan.addFamily(family.getBytes());
163         }
164         if(StringUtils.isNotEmpty(startRow)){
165             scan.setStartRow(startRow.getBytes());
166         }
167         if(StringUtils.isNotEmpty(stopRow)){
168             scan.setStopRow(stopRow.getBytes());
169         }
170         resultScanner = table.getScanner(scan);
171
172         return resultScanner;
173     }
174 }

2.测试:

 1 package com.lixin.stuty.hbase;
 2
 3 import static org.junit.Assert.*;
 4
 5 import java.io.IOException;
 6 import java.util.Iterator;
 7
 8 import org.apache.hadoop.hbase.Cell;
 9 import org.apache.hadoop.hbase.CellUtil;
10 import org.apache.hadoop.hbase.client.Result;
11 import org.apache.hadoop.hbase.client.ResultScanner;
12 import org.apache.hadoop.hbase.util.Bytes;
13 import org.junit.Before;
14 import org.junit.Test;
15
16 public class HBaseUtilTest {
17     private HBaseUtil hu = null;
18     @Before
19     public void init(){
20         String zk_quorum  = "172.21.135.148";
21         String zk_clientPort = "2181";
22         hu = new HBaseUtil(zk_quorum, zk_clientPort);
23     }
24     @Test
25     public void testCreate() throws IOException {
26         String table_name = "users";
27         String[] fanily_names = new String[]{"user_id","address","info"};
28         hu.create(table_name, fanily_names);
29         hu.close();
30     }
31     @Test
32     public void testIsExist() throws IOException{
33         String table_name = "sitech";
34         System.out.println(hu.tableExist(table_name));
35         hu.close();
36     }
37     @Test
38     public void testDelete() throws IOException{
39         String table_name = "person1";
40         hu.deleteTable(table_name);
41         hu.close();
42     }
43     @Test
44     public void testGetRow() throws IOException{
45         String table_name = "users";
46         String row = "xiaoming";
47         String family = "address";
48         String qualifier = "";
49         Cell[] cells = hu.getRow(table_name, row, family, qualifier);
50         for(Cell cell : cells){
51             String recode_row = Bytes.toString(CellUtil.cloneRow(cell));
52             String family1 = Bytes.toString(CellUtil.cloneFamily(cell));
53             String qualifier1 = Bytes.toString(CellUtil.cloneQualifier(cell));
54             String value = Bytes.toString(CellUtil.cloneValue(cell));
55             System.out.println(recode_row+"\t"+family1+"\t"+qualifier1+"\t"+value);
56         }
57         hu.close();
58     }
59     @Test
60     public void testGetScanner() throws IOException{
61         String table_name = "users";
62         String family = "address";
63         String qualifier = "city";
64         String startRow = "xiaoming";
65         String stopRow = "xiaoming";
66
67         ResultScanner resultScanner  = hu.getScan(table_name, family, qualifier, startRow, stopRow);
68         Iterator<Result> iterator = resultScanner.iterator();
69         while(iterator.hasNext()){
70             Result result = iterator.next();
71             Cell[] rawCells = result.rawCells();
72             for(Cell cell : rawCells){
73                 String recode_row = Bytes.toString(CellUtil.cloneRow(cell));
74                 String family1 = Bytes.toString(CellUtil.cloneFamily(cell));
75                 String qualifier1 = Bytes.toString(CellUtil.cloneQualifier(cell));
76                 String value = Bytes.toString(CellUtil.cloneValue(cell));
77                 System.out.println(recode_row+"\t"+family1+"\t"+qualifier1+"\t"+value);
78             }
79         }
80         hu.close();
81     }
82 }
时间: 2024-11-08 12:12:14

Hbase-1.1.1-java API的相关文章

HBase 二次开发 java api和demo

1. 试用thrift python/java以及hbase client api,结论如下: 1.1 thrift的安装和发布繁琐,可能会遇到未知的错误,且hbase.thrift的版本在变化中.优点代码简单,需要打包的内容少. 1.2 hbase client api,需要的jar很多,发布版的容量也很大,打包后近百兆.优点是,明确,无歧义. 2. 推荐用hbase client api的方式搞定. 3. 以下均为技术细节. 4. 有一台机器/一个集群,在运行hadoop,也运行了基于这个h

Hbase java API 调用详解

Hbase java API 调用 一. hbase的安装 参考:http://blog.csdn.net/mapengbo521521/article/details/41777721 二.hbase访问方式 Native java api:最常规最高效的访问方式. Hbase shell:hbase的命令行工具,最简单的接口,适合管理员使用 Thrift gateway:利用thrift序列化结束支持各种语言,适合异构系统在线访问 Rest gateway:支持rest风格的http api

Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结

转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbase调用MapReduce函数使用理解 第三部分:Hbase调用Java API使用理解 第四部分:Hbase Shell操作 第五部分:Hbase建表.读写操作方式性能优化总结 第一部分:Hbase框架原理理解 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google

HBase的常用Java API

1. 创建HBase表的对象 HBase表的对项名字叫HTable,创建它的方法有很多,常见的有如下: org.apache.hadoop.hbase.client.HTable hTable = new HTable(org.apache.hadoop.hbase.HBaseConfiguration conf, String tableName); 或 org.apache.hadoop.hbase.client.HTable hTable = new HTable(org.apache.h

HBase Java API使用(一)

前言 1. 创建表:(由master完成) 首先需要获取master地址(master启动时会将地址告诉zookeeper)因而客户端首先会访问zookeeper获取master的地址 client和master通信,然后有master来创建表(包括表的列簇,是否cache,设置存储的最大版本数,是否压缩等). 2. 读写删除数据 client与regionserver通信,读写.删除数据 写入和删除数据时讲数据打上不同的标志append,真正的数据删除操作在compact时发生 3. 版本信息

hbase java api样例(版本1.3.1,新API)

验证了如下几种java api的使用方法. 1.创建表 2.创建表(预分区) 3.单条插入 4.批量插入 5.批量插入(写缓存) 6.单条get 7.批量get 8.简单scan 具体请参考GitHub. https://github.com/quchunhui/hbase_sample pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave

HBase Java API使用

概括 1. 创建.删除及启用禁用表.添加列等都需用到HBaseAdmin,另外需要注意删除,添加列等操作都需要禁用表 2. 表中添加数据,查询等都是和HTable相关,如果是多线程的情况下注意用HTablePool 3.  插入数据使用Put,可以单行添加也可批量添加 4. 查询数据需使用Get,Result,Scan.ResultScanner等 一.HBaseConfiguration org.apache.hadoop.hbase.HBaseConfiguration 对HBase进行配置

HBase学习(十二)Java API 与HBase交互实例

HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要 import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoo

通过Java Api与HBase交互(转)

HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要,本文将继续前两篇文章中blog表的示例,介绍常用的Api. import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescr

HBase概念学习(三)Java API之扫描和过滤器

HBase基本的CRUD操作就不多介绍了,无非就是Put,Get,Delete三个类的运用. 本文相当于是阅读HBase权威指南的总结. 一.扫描(Scan) 现在看一下扫描技术,这种技术类似于关系型数据库的游标(cursor),并利用到了HBase底层顺序存储的特性. 使用扫描的一般步骤是: 1.创建Scan实例 2.为Scan实例增加扫描的限制条件 3.调用HTable的getScanner()方法获取ResultScanner对象 4.迭代ResultScanner对象中的Result对象