摘要:在前文中安装了Hbase,通过Hbase shell可以进行一些操作,但是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例。

一、使用Eclipse开发HBase应用程序

1,在Eclipse中新建一个Java Project,命名为HBaseTest,然后右键Properties中选择Java Build Path,选择Add External Jars,将HBase/lib目录下的jar包导入进来。

2,在工程根目录下创建Conf文件夹,将HBase/Conf下的hbase-site.xml文件复制到该文件夹中,通过右键选择Properties->Java BuildPath->Libraries->Add Class Folder,然后选择Conf文件夹即可。

二、简要介绍HBaseJava API

1,  HbaseConfiguration

关系:org.apache.hadoop.hbase.HBaseConfiguration

作用:通过此类可以对HBase进行配置

2,  HBaseAdmin

关系:org.apache.hadoop.hbase.client.HBaseAdmin

作用:提供一个接口来管理HBase数据库中的表信息。它提供创建表、删除表等方法。

3,  HTableDescriptor

关系:org.apache.hadoop.hbase.client.HTableDescriptor

作用:包含了表的名字及其对应列族。 提供的方法有

void          addFamily(HColumnDescriptor)          添加一个列族

HColumnDescriptor   removeFamily(byte[] column)      移除一个列族

byte[]              getName()                     获取表的名字

byte[]              getValue(byte[] key)              获取属性的值

void                setValue(String key,Stringvalue)    设置属性的值

4,  HColumnDescriptor

关系:org.apache.hadoop.hbase.client.HColumnDescriptor

作用:维护关于列的信息。提供的方法有

byte[]              getName()                   获取列族的名字

byte[]              getValue()                获取对应的属性的值

void              setValue(String key,String value)设置对应属性的值

5,  HTable

关系:org.apache.hadoop.hbase.client.HTable

作用:用户与HBase表进行通信。此方法对于更新操作来说是非线程安全的,如果启动多个线程尝试与单个HTable实例进行通信,那么写缓冲器可能会崩溃。

6,  Put

关系:org.apache.hadoop.hbase.client.Put

作用:用于对单个行执行添加操作

7,  Get

关系:org.apache.hadoop.hbase.client.Get

作用:用于获取单个行的相关信息

8,  Result

关系:org.apache.hadoop.hbase.client.Result

作用:存储Get或Scan操作后获取的单行值。

9,  ResultScanner

关系:Interface

作用:客户端获取值的接口。

三、 HBase Java API简单实例

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.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.client.HBaseAdmin;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Get;

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.util.Bytes;

/*

* @author minglaihan

*/

public class HBaseTest {

static Configuration cfg = HBaseConfiguration.create();

//通过HBaseAdmin HTableDescriptor来创建一个新表

public static void create(String tableName, String columnFamily) throws Exception{

HBaseAdmin admin = new HBaseAdmin(cfg);

if(admin.tableExists(tableName)){

System.out.println("Table exist");

System.exit(0);

}

else {

HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);

tableDescriptor.addFamily(new HColumnDescriptor(columnFamily));

admin.createTable(tableDescriptor);

System.out.println("Table create success");

}

}

//添加一条数据,通过HTable Put为已存在的表添加数据

public static void put(String tableName,String row,String columnFamily,String column,String data) throws IOException{

HTable table = new HTable(cfg, tableName);

Put put = new Put(Bytes.toBytes(row));

put.add(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(data));

table.put(put);

System.out.println("put success");

}

//获取tableName表里列为row的结果集

public static void get(String tableName,String row) throws IOException{

HTable table = new HTable(cfg, tableName);

Get get = new Get(Bytes.toBytes(row));

Result result = table.get(get);

System.out.println("get "+ result);

}

//通过HTable Scan来获取tableName表的所有数据信息

public static void scan (String tableName) throws IOException{

HTable table = new HTable(cfg, tableName);

Scan scan = new Scan();

ResultScanner resultScanner = table.getScanner(scan);

for(Result s:resultScanner){

System.out.println("Scan "+ resultScanner);

}

}

public static boolean delete(String tableName) throws Exception{

HBaseAdmin admin = new HBaseAdmin(cfg);

if(admin.tableExists(tableName)){

try {

admin.disableTable(tableName);

admin.deleteTable(tableName);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

return false;

}

}

return true;

}

public static void main(String[] args) {

String tableName = "hbase_test";

String columnFamily = "c1";

try {

HBaseTest.create(tableName, columnFamily);

HBaseTest.put(tableName, "row1", columnFamily, "column1", "data1");

HBaseTest.get(tableName, "row1");

HBaseTest.scan(tableName);

if(HBaseTest.delete(tableName)==true){

System.out.println("delete table "+ tableName+"success");

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

}

将Delete的步骤注释掉的运行结果截图:

四、总结

HBase与Java API的交互目前表现良好,在今后的hadoop编程中,可以根据HBase的情况适当利用,提高整体水平。

hbase java编程,HBase编程实例相关推荐

  1. JAVA入门Hwork,HBase Java编程入门教程

    一款优秀的数据库除了会提供客户端,还会提供编程语言接口,HBase 也不例外.HBase 除了支持使用 Shell 客户端来操作(请看<HBase Shell及其常用命令>),还提供了多种 ...

  2. java 令牌解析_Java编程guava RateLimiter实例解析

    本文主要研究的是Java编程guava RateLimiter的相关内容,具体如下. 场景1 在流量监管中的应用 约定访问速率(CAR)是流量监管常用技术之一,可以应用在端口进和出方向,一般应用在入方 ...

  3. Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...

  4. (转载)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解 ...

  5. java语言数据库编程_JAVA语言数据库编程实例详解

    本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...

  6. Java 网络编程API以及实例

    Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接 ...

  7. Hbase过滤器与scala编程

    什么是Hbase过滤器?有什么用 因为Hbase没有sql,一些复杂的查询就需要用过滤器来实现. 过滤器 为方便后续输出查看结果,先封装一个打印结果的函数 def printScanner(resul ...

  8. java连接Hbase数据库

    java连接Hbase数据库 如果是是连接机群上的Hbase服务,需要提前将相关的几个xml文件存放在本地的编程目录下,否则开发端无法获取机群信息及授权: hdfs-site.xml core-sit ...

  9. Java 7并发编程实战手册

    2019独角兽企业重金招聘Python工程师标准>>> Java 7并发编程实战手册 本书是 Java 7 并发编程的实战指南,介绍了Java 7 并发API 中大部分重要而有用的机 ...

最新文章

  1. TVM 各个模块总体架构
  2. Linux环境下命令行截图【转】
  3. java中飞飞检查异常_Java复习6异常处理
  4. 12306抢票脚本 python_如何使用Python实现12306抢票?摆脱无票可买的窘境
  5. 将MATLAB的变量数据导入到C/C++程序中的方法
  6. iOS - 数据的归档和反归档
  7. maven自动化部署插件sshexec-maven-plugin
  8. Windows下设置自动关机的命令指示符
  9. java痴和堆_JAVA虚拟机理解 - 爱笑的痴迷者的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. Spring mvc 拦截器 配置心得
  11. python小白从哪来开始-老男孩python课程亮点在哪里?python小白
  12. 《流畅的python》概述
  13. 5种好看实用的字体分享
  14. 技巧:苹果电脑怎么清理缓存文件
  15. Cesium开发: Draco模型压缩
  16. [答疑]为什么要把actor翻译成执行者
  17. 欢喜传媒2021年报:亏损收窄背后,影视行业静待春暖花开
  18. 丽思卡尔顿游轮正式加入万豪旅享家旅行计划
  19. 密码学实验_7_S盒创建(python 实现)
  20. 动漫制作技巧如何制作动漫视频

热门文章

  1. 架构设计(5)—架构愿景分析
  2. 如何安装Python虚拟环境
  3. 2022-2028全球与中国脚手架市场现状及未来发展趋势
  4. Android系国产手机操作系统汇总
  5. linux ss 命令
  6. Mentor-dft 学习笔记 day13-Scan Insertion for Wrapped Core案例
  7. 汶川大地震随感谢摘录
  8. 微前端:使用qiankun框架的注意点
  9. win10 系统下安装ubuntu实现双系统爬坑记录
  10. C编译器剖析_5.3.2 中间代码生成及优化_switch语句的翻译