HBase编程实例
摘要:在前文中安装了Hbase,通过Hbase shell能够进行一些操作。可是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例。
一、使用Eclipse开发HBase应用程序
1。在Eclipse中新建一个Java Project,命名为HBaseTest,然后右键Properties中选择Java Build Path,选择Add External Jars,将HBase/lib文件夹下的jar包导入进来。
2,在project根目录下创建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
作用:client获取值的接口。
三、 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编程实例的更多相关文章
- 分享知识-快乐自己:HBase编程
HBase编程: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...
- PHP多进程编程实例
这篇文章主要介绍了PHP多进程编程实例,本文讲解的是在Linux下实现PHP多进程编程,需要的朋友可以参考下 羡慕火影忍者里鸣人的影分身么?没错,PHP程序是可以开动影分身的!想完成任务,又觉得一个进 ...
- c#摄像头编程实例 (转)
c#摄像头编程实例 摄像头编程 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using system;using System.Runtime.Intero ...
- JAX-RS 2.0 REST客户端编程实例
JAX-RS 2.0 REST客户端编程实例 2014/01/28 | 分类: 基础技术, 教程 | 0 条评论 | 标签: JAX-RS, RESTFUL 分享到:3 本文由 ImportNew - ...
- Android studio 下JNI编程实例并生成so库
Android studio 下JNI编程实例并生成so库 因为公司需要为Android相机做美颜等图像后期处理,需要使用JNI编程,最近学了下JNI,并且在Android Studio下实现了一个小 ...
- hadoop2.2编程:使用MapReduce编程实例(转)
原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
- 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别
请求转发:MVC设计模式.细节.请求域属性的编程实例.请求重定向和请求转发的区别 MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层) ...
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
随机推荐
- drawable的文件名大写
drawable的文件名大写导致的R文件消失!!!1
- CTSC+APIO+THUACM游记
退役之前,写点破事乐呵乐呵.. (同DaD3zZ) CTSC Day0 来到丽都 哈哈哈这可是四星级豪华酒店啊 想想要在这住7天 美滋滋 换了半天的房间 也没有换到一起 最后yzy& ...
- 题解报告:hdu 2066 一个人的旅行
Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...
- vmware workstation 14 黑屏处理方法
从12升级到14以后,所有老的虚拟系统全部黑屏.进行了一波操作,例如:虚拟机-管理-更改硬件兼容性,选择14.黑屏将加速3D图形勾选去掉:启动,关闭,再勾选上,启动.黑屏将显示器选择为指定监视器,黑屏 ...
- EF 批量插入,sqlhelper 批量插入
需添加一个using System.Linq; 引用 public void BulkInsert<T>(string connection, string tableName, ILis ...
- cocos2dx实现单机版三国杀(二)
接上续,东西还没有做完 所以代码免不了改动 之前的头文件现在又改了不少,因为架构也改变了现在主要类就是GameScene.GameUI.PlayInfo.Poker这四个类 前面想的GameLoop ...
- 一、CSS的基础样式
CSS的基础样式 border 边框 复合写法 border:border-width border-style border-color: border-width:边框宽度 top right ...
- BFS小结
其实bfs本身不难,甚至不需要去学习,只要知道它的特性就可以写出来了.往往,bfs都是用递归做的.递归比循环更容易timeout.所以这次遇到一题bfs,卡时间的就悲剧了. PAT1076 #incl ...
- cms中某些标题链接的单独写法
href="{$CATEGORYS[45][url]}" 链接写法, {$CATEGORYS[45][catname]} 标题写法 在show页面中 src="{$thu ...
- JS高级——作用域链
基本概念 1.只要是函数就可以创造作用域 2.函数中又可以再创建函数 3.函数内部的作用域可以访问函数外部的作用域 4.如果有多个函数嵌套,那么就会构成一个链式访问结构,这就是作用域链 <scr ...