hbase java编程,HBase编程实例
摘要:在前文中安装了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编程实例相关推荐
- JAVA入门Hwork,HBase Java编程入门教程
一款优秀的数据库除了会提供客户端,还会提供编程语言接口,HBase 也不例外.HBase 除了支持使用 Shell 客户端来操作(请看<HBase Shell及其常用命令>),还提供了多种 ...
- java 令牌解析_Java编程guava RateLimiter实例解析
本文主要研究的是Java编程guava RateLimiter的相关内容,具体如下. 场景1 在流量监管中的应用 约定访问速率(CAR)是流量监管常用技术之一,可以应用在端口进和出方向,一般应用在入方 ...
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...
- (转载)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解 ...
- java语言数据库编程_JAVA语言数据库编程实例详解
本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...
- Java 网络编程API以及实例
Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接 ...
- Hbase过滤器与scala编程
什么是Hbase过滤器?有什么用 因为Hbase没有sql,一些复杂的查询就需要用过滤器来实现. 过滤器 为方便后续输出查看结果,先封装一个打印结果的函数 def printScanner(resul ...
- java连接Hbase数据库
java连接Hbase数据库 如果是是连接机群上的Hbase服务,需要提前将相关的几个xml文件存放在本地的编程目录下,否则开发端无法获取机群信息及授权: hdfs-site.xml core-sit ...
- Java 7并发编程实战手册
2019独角兽企业重金招聘Python工程师标准>>> Java 7并发编程实战手册 本书是 Java 7 并发编程的实战指南,介绍了Java 7 并发API 中大部分重要而有用的机 ...
最新文章
- TVM 各个模块总体架构
- Linux环境下命令行截图【转】
- java中飞飞检查异常_Java复习6异常处理
- 12306抢票脚本 python_如何使用Python实现12306抢票?摆脱无票可买的窘境
- 将MATLAB的变量数据导入到C/C++程序中的方法
- iOS - 数据的归档和反归档
- maven自动化部署插件sshexec-maven-plugin
- Windows下设置自动关机的命令指示符
- java痴和堆_JAVA虚拟机理解 - 爱笑的痴迷者的个人空间 - OSCHINA - 中文开源技术交流社区...
- Spring mvc 拦截器 配置心得
- python小白从哪来开始-老男孩python课程亮点在哪里?python小白
- 《流畅的python》概述
- 5种好看实用的字体分享
- 技巧:苹果电脑怎么清理缓存文件
- Cesium开发: Draco模型压缩
- [答疑]为什么要把actor翻译成执行者
- 欢喜传媒2021年报:亏损收窄背后,影视行业静待春暖花开
- 丽思卡尔顿游轮正式加入万豪旅享家旅行计划
- 密码学实验_7_S盒创建(python 实现)
- 动漫制作技巧如何制作动漫视频