一、准备阶段
开发环境:
hadoophadoop -2.4.0
hbasehbase -0.94.11-security
eclipse:Juno Service Release 2

二、创建 hbasedemo项目

1、通过 Eclipse 创建一个新 Java project
2、右击项目根文件夹,选择“Propertiesà> Java Build Pathà> Libraryà>  Add  External  JARs”
3、加入jar文件到 classpath
3.1 解压 HBase 安装文件
3.2 拷贝 hbase-0.94.7-security.jar、 hbase-0.94.11-security-tests.jar到project
3.3 lib 子文件夹下全部的 jar 包加入到本project的 Build Path下

三、使用HBase JAVA API

初始化和释放资源方法:

public void init() 数据初始化

public void destory()  释放资源



验证方法:

public void testCreate() 验证创建表

public void testDrop() 验证删除表

public void testPut()验证加入表数据

public void testGetByRowKey() 验证怎样通过rowkey获取数据

public void testScanSToEnd() 验证范围行数据获取

public void testScanAll()  验证全表扫描



方法:

public List<Cell> get(String tableName, String rowKey)  通过rowKey插入表数据

public List<Result> scan(String tableName)  通过表名查询全部信息

public List<Result> scan(String tableName,String startRow,String stopRow) 查询范围行方法

public void create(String tableName, String[] cfs)  通过表名和列族信息创建表

public void drop(String tableName) 删除表

public void put(String tableName, List<CellBean> values) 依据提供的表和对象信息插入hbase



第一步: 封装HBase中的存储单元Cell对象

/**
* 封装HBase中存储单元cell对象
* @author shenfl
* @version:V1.0
* @Date:2015-6-8
*/
public class CellBean { //行健
private String rowKey;
//列族
private String columnFamilly;
//列名
private String columnName;
//cell值
private String columnValue; public String getRowKey() {
return rowKey;
} public void setRowKey(String rowKey) {
this.rowKey = rowKey;
} public String getColumnFamilly() {
return columnFamilly;
} public void setColumnFamilly(String columnFamilly) {
this.columnFamilly = columnFamilly;
} public String getColumnName() {
return columnName;
} public void setColumnName(String columnName) {
this.columnName = columnName;
} public String getColumnValue() {
return columnValue;
} public void setColumnValue(String columnValue) {
this.columnValue = columnValue;
}
}

第二步: 使用HBase JAVA API 操作HBase  数据库

/**
* 使用HBase JAVA API操作
*
* @author shenfl
*
*/
public class HBaseTest {
Configuration config = null;
// 创建操作表對象
HBaseAdmin admin = null;
// hbase的连接
HConnection conn = null; @Before
public void init() {
config = HBaseConfiguration.create();
// HBase仅仅须要知道ZooKeeper。就能够操作RegionServer上的數據,设置HBase 连接ZooKeeper
config.set("hbase.zookeeper.quorum", "192.168.2.35:2181,192.168.2.36:2181,192.168.2.37:2181");
try {
conn = HConnectionManager.createConnection(config);
admin = new HBaseAdmin(config);
} catch (Exception e) {
e.printStackTrace();
}
} @After
public void destory() {
try {
admin.close();
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void testCreate() {
String tableName = "account";
String[] columnFamilies = new String[] { "info", "other" };
create(tableName, columnFamilies);
} //@Test
public void testDrop() {
drop("account");
} @Test
public void testPut() { // 设置表对象列表
List<CellBean> cbList = new ArrayList<CellBean>();
// 设置表名account
String tableName = "account";
CellBean e = null;
for(int i=0;i<3;i++){
e = new CellBean();
e.setRowKey("g20142500"+i);
e.setColumnFamilly("info");
e.setColumnName("username");
e.setColumnValue("shenfl"+i);
cbList.add(e);
e = new CellBean();
e.setRowKey("g20142500"+i);
e.setColumnFamilly("other");
e.setColumnName("career");
e.setColumnValue("singer"+i);
cbList.add(e);
}
put(tableName, cbList);
} @Test
public void testGetByRowKey() { String tableName = "account";
String rowKey = "g201425001";
List<Cell> cells = get(tableName, rowKey);
StringBuffer info = new StringBuffer();
for (Cell c : cells) {
//使用CellUtil方法输出相应列。 hbase0.96 版本号使用CellUtil函数
info.append(new String(CellUtil.cloneFamily(c))).append(":")
.append(new String(CellUtil.cloneQualifier(c))).append("\t")
.append(new String(CellUtil.cloneValue(c))).append("\n");
}
System.out.println(info);
}
@Test
public void testScanSToEnd(){ StringBuffer sb = new StringBuffer();
String tableName = "account";
String startRow = "g201425000";
String stopRow = "g201425002";
List<Result> rsList = scan(tableName, startRow, stopRow);
byte[] rowKey = null;
byte[] username = null;
byte[] career = null;
for(Result rs:rsList){
rowKey = rs.getRow();
username = rs.getValue(Bytes.toBytes("info"), Bytes.toBytes("username"));
career = rs.getValue(Bytes.toBytes("other"), Bytes.toBytes("career"));
sb.append(new String(rowKey)).append("\t")
.append(new String(username)).append("\t")
.append(new String(career)).append("\n");
}
System.out.println(sb.toString());
} @Test
public void testScanAll() {
StringBuffer sb = new StringBuffer();
List<Result> rsList = scan("account");
for (Result rs : rsList) { List<Cell> listCells = rs.listCells();
for (Cell c : listCells) {
// 使用CellUtil方法输出相应列。 hbase0.96 版本号使用CellUtil函数
sb.append(new String(CellUtil.cloneRow(c))).append("\t")
.append(new String(CellUtil.cloneFamily(c))).append(":")
.append(new String(CellUtil.cloneQualifier(c))).append("\t")
.append(new String(CellUtil.cloneValue(c))).append("\n");
}
} System.out.println(sb);
}
/**
* 通过rowKey插入表数据
* @param tableName 表名
* @param rowKey 行健
* @return
*/
public List<Cell> get(String tableName, String rowKey) {
HTableInterface table = null;
Get get = null;
Result rs = null;
List<Cell> listCells = new ArrayList<Cell>();
try {
table = conn.getTable(tableName);
get = new Get(Bytes.toBytes(rowKey));
rs = table.get(get);
listCells = rs.listCells();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
table.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return listCells;
} /**
* 查询全部行
*
* @param tableName
* @return
*/
public List<Result> scan(String tableName) {
HTableInterface table = null;
List<Result> rsList = new ArrayList<Result>();
try {
table = conn.getTable(tableName);
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
Iterator<Result> iterator = scanner.iterator();
Result rs = null;
while (iterator.hasNext()) {
rs = (Result) iterator.next();
rsList.add(rs);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
table.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return rsList;
}
/**
* 查询范围行
* @param tableName 表名
* @param startRow 開始的行健
* @param stopRow 结束行健
* @return
*/
public List<Result> scan(String tableName,String startRow,String stopRow) { HTableInterface table = null;
List<Result> rsList = new ArrayList<Result>();
try {
table = conn.getTable(tableName);
Scan scan = new Scan();
scan.setStartRow(Bytes.toBytes(startRow));
scan.setStopRow(Bytes.toBytes(stopRow));
ResultScanner rs = table.getScanner(scan); for(Result v:rs){
rsList.add(v);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
table.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return rsList;
}
/**
* 创建壁报
*
* @param tableName
* 表名
* @param cfs
* 列族
*/
public void create(String tableName, String[] cfs) { if (cfs == null || cfs.length == 0) {
return;
}
try {
// 校验表是否存储
if (admin.tableExists(tableName)) {
return;
}
// 创建表
HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName));
// 创建列族
for (String cf : cfs) {
desc.addFamily(new HColumnDescriptor(cf));
}
// 创建表
admin.createTable(desc);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 删除表
*
* @param tableName
* 表名
*/
public void drop(String tableName) {
try {
if(admin.tableExists(tableName)){ admin.disableTable(tableName);
admin.deleteTable(tableName);
}
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 向指定表插入数据
*
* @param tableName
* 表名
* @param values
* 数据
*/
public void put(String tableName, List<CellBean> values) { if (StringUtils.isBlank(tableName) || values == null || values.size() == 0) {
return;
}
Put put = null;
HTableInterface table = null;
try {
table = conn.getTable(tableName);
for (CellBean v : values) {
put = new Put(Bytes.toBytes(v.getRowKey()));
put.add(Bytes.toBytes(v.getColumnFamilly()), Bytes.toBytes(v.getColumnName()),
Bytes.toBytes(v.getColumnValue()));
table.put(put);
}
} catch (Exception e) {
// 实际生产环境要通过记录日志。比如: logger.warn("xxxxx",e);
e.printStackTrace();
}finally{
try {
table.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}


參考文章:
1、HBase连接池 -- HTablePool被Deprecated之后
http://blog.csdn.net/u010967382/article/details/38046821
2、HBase Java API 介绍
http://www.cnblogs.com/NicholasLee/archive/2012/09/13/2683432.html
3、HBase Java API 操作案例
http://www.programcreek.com/java-api-examples/index.php?api=org.apache.hadoop.hbase.HTableDescriptor
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Admin.html
http://blog.csdn.net/hadoop_/article/details/11481215

版权声明:本文博主原创文章,博客,未经同意不得转载。

1006-HBase操作实战(JAVA API状态)的更多相关文章

  1. elasticsearch 5.0 获取 TransportClient 操作客户端java API

    本文转载自:http://blog.csdn.net/likui1314159/article/details/53233881 elasticsearch 5.0 获取 TransportClien ...

  2. HBase环境搭建、shell操作及Java API编程

    一. 1.掌握Hbase在Hadoop集群体系结构中发挥的作用和使过程. 2.掌握安装和配置HBase基本方法. 3.掌握HBase shell的常用命令. 4.使用HBase shell命令进行表的 ...

  3. HBase学习笔记——Java API操作

    1.1.  配置 HBaseConfiguration 包:org.apache.hadoop.hbase.HBaseConfiguration 作用:通过此类可以对HBase进行配置 用法实例: C ...

  4. Elasticsearch 5.4.3实战--Java API调用:索引mapping创建

    因为项目开发使用的是Java语言, 项目的开发架构是Spring MVC+ maven的jar包管理,  所以今天重点说说ES 5.4.3 的Java API的源码实战 1. pom.xml文件增加依 ...

  5. HBase常用的JAVA API操作

    为了方便以后查看,总结了一些常用的java操作hbase的代码: package com.mcq; import static org.hamcrest.CoreMatchers.describedA ...

  6. Hbase(6)【Java Api Phoenix操作Hbase】

    目录 两种方式操作Phoenix 1.Thick Driver 2.Thin Driver 3.注意事项 两种方式操作Phoenix 官网:http://phoenix.apache.org/faq. ...

  7. HBase性能优化 Java Api

    1. 使用“连接池” 如果每次和Hbase交互时都去新建连接的话,显然是低效率的,HBase也提供类连接池相关的API. 1.1. HTablePool 早期的API中使用它,但很不幸,现在它已经过时 ...

  8. Elasticsearch 5.4.3实战--Java API调用:搜索建议

    通常的搜索引擎,都会根据用户的输入,实时给予匹配的提示. 那么这个功能在elasticsearch中如何实现呢? Elasticsearch里设计了4种类别的Suggester,分别是: Term S ...

  9. Elasticsearch 5.4.3实战--Java API调用:搜索

    ES有多种查询方式,我自己的业务是需要对多个字段进行查询,具体实现类代码如下. package com.cs99lzzs.elasticsearch.service.imp; import java. ...

随机推荐

  1. Android 自己定义ScrollView ListView 体验各种纵向滑动的需求

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38950509.本文出自[张鸿洋的博客] 1.概述 群里的一个哥们有个需求是这种: ...

  2. JavaScript概要

     当用户填写表单在线,用户输入表单经常要推测在页面上,它提示用户填写正确的邮箱.哪些项目不填之类,这些都是JavaScript小的特点. JavaScript是一种基于对象的脚本语言,使用它能够开 ...

  3. CSS设计指南之浮动与清除

    原文:CSS设计指南之浮动与清除 浮动意思就是把元素从常规文档流中拿出来,浮动元素脱离了常规文档流之后,原来紧跟在其后的元素就会在空间允许的情况下,向上提升到与浮动元素平起平坐. 一.浮动 CSS设计 ...

  4. Tomcat部署发布JSP应用程序的三种方法 (转)

    Tomcat部署发布JSP应用程序的三种方法     1.直接放到Webapps目录下      Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应 ...

  5. 【JUnit4.10来源分析】6 Runner

    org.junit.runner.Runner它是JUnit作业引擎.它在许多类型的支持下的.处理试验和生产(Description).Failure和Result和其它输出. Runner参见图主类 ...

  6. 【转】Directx11 SDK文档

    原文地址:http://blog.csdn.net/cmt100/article/details/6343274 总结 这是一个初步的教程.我们将通过必要的步骤来创建一个Win32 Applicati ...

  7. 实现DataGridView行的拖动,即实现行的顺序交换

    参考:http://blog.csdn.net/soarheaven/article/details/3267379 1.界面准备 (1)首先在form中添加一个DataGridView控件,将默认A ...

  8. NuttX 介绍

    (嵌入式 实时操作系统 rtos nuttx 7.1) NuttX 介绍 转载请注明出处:http://blog.csdn.net/zhumaill/article/details/24197637 ...

  9. Android属于查询执行情况的电话号码

    这部分是昨天学习,但是因为眼所以现在到眼睛超负荷,以后要合理规划时间. 现在里面的手机号码归属地查询主要通过两种途径:1.网络查询.2.匹配本地归属地数据库. 我认为最好的两个方法的结合,在进行联网查 ...

  10. Android-用你自己的自定义图像资源(2)

    Android-自己定义图像资源的使用 2014年4月29日   上一篇博客.介绍前面几种图像资源的使用,本篇博客把剩下的所有介绍完: 普通图像资源 XML图像资源 Nine-patch图像资源 XM ...