HBase JavaAPI
一.概念
1.对HBase JavaAPI的概述:
01.hbase使用java语言编写,自然支持java编程
02.支持CRUD操作
03.JavaAPI包含了所有的hbase的shell,甚至比这个还要多
04.JavaAPI是访问hbase的最快的方式
2.api
01.Configuration:Configuration对象包含了连接到hbase的服务的信息;zookeeper的位置,连接时间等
02.HbaseConfiguration.create():从classPath下加载hbase-default.xml和hbase-sitl.xml文件,所以需要将hbase-site.xml放入到classPath下。hbase-sitl.xml将覆盖hbase-default.xml的同名属性
03.HTable句柄:为Configuration提供对象和访问table的名称
HTable table = new HTable(con, tableName);
一个table对应一个句柄:
001.提供了CRUD操作,且支持批处理
002.设计简单,使用方便
003.提供行级事务
004.不支持1多行事务或者表级别的事务
005.并发读,顺序写
006.严格的行一致性
007.创建句柄代价很大,创建一次后尽可能复用
008.如果需要创建多个句柄,使用HtablePoll
009.HTable并非线程安全的,一个线程创建一个即可,但性能较高
二.代码环节
1.需要下面的pom节点
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.5</version>
</dependency> <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.8.5</version>
</dependency> <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.5</version>
</dependency> <dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency> <dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>1.3.1</version>
</dependency>
2.将虚拟机中的hdfs-sitl.xml和hbase-sitl.xml文件复制到项目中的resources文件下
3.修改window下的hosts文件,路径是:C:\Windows\System32\drivers\etc\hosts


4.代码
public class HBaseJavaAPI {
public static void main(String[]args) throws Exception{
//createTable();
//addData();
//getAllData();
//deleteByRowKey();
//getByRowKey();
//deleteQualifier();
//deleteTable();
}
/**
* 1.创建表
*/
public static void createTable() throws Exception {
//1.创建一个Configuration对象
Configuration con = HBaseConfiguration.create();
/**
* 2.创建HBaseAdmin对象,此对象包含了创建表,创建列族,检索表是否存在,修改表和列族结构,删除表等功能
* HBaseAdmin对象的生命周期不宜太长
*/
HBaseAdmin hBaseAdmin=new HBaseAdmin(con);
//3.判断表是否存在
if(hBaseAdmin.tableExists("hbase_demo_api")) {
System.out.println("表已存在,不许重复创建");
}else {
//4.创建表的描述对象
HTableDescriptor tableDescriptor=new HTableDescriptor("hbase_demo_api");
tableDescriptor.addFamily(new HColumnDescriptor("grade"));
tableDescriptor.addFamily(new HColumnDescriptor("course"));
hBaseAdmin.createTable(tableDescriptor);
System.out.println("表创建成功!");
}
hBaseAdmin.close();
}
/**
* 2.新增数据
*/
public static void addData() throws Exception {
//1.创建一个Configuration对象
Configuration con = HBaseConfiguration.create();
//2.创建HTable句柄
HTable htable=new HTable(con, "hbase_demo_api");
//3.创建put对象
Put put=new Put("class1".getBytes()); //class1就是rowkey
put.addColumn("course".getBytes(), "sql".getBytes(), "90".getBytes());
put.addColumn("course".getBytes(), "java".getBytes(), "89".getBytes());
put.addColumn("grade".getBytes(), "".getBytes(), "c1".getBytes());
//4.向表中插入数据
htable.put(put);
System.out.println("插入成功!");
//5.关闭HTable对象
htable.close();
}
/**
* 3.查询全部数据
*/
public static void getAllData() throws Exception {
//1.创建一个Configuration对象
Configuration con = HBaseConfiguration.create();
//2.创建HTable句柄
HTable htable=new HTable(con, "hbase_demo_api");
//3.使用扫描器去扫描表
ResultScanner scanner = htable.getScanner(new Scan());
for (Result result: scanner) {
for (Cell cell: result.rawCells()) {
System.out.println("RowKey-------"+Bytes.toString(result.getRow()));
System.out.println("column(列族)-------"+Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("col(列)-------"+Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("value(值)-------"+Bytes.toString(CellUtil.cloneValue(cell)));
}
}
//4.关闭HTable对象
htable.close();
}
/**
* 4.删除表中指定RowKey的数据
*/
public static void deleteByRowKey() throws Exception {
//1.创建一个Configuration对象
Configuration con = HBaseConfiguration.create();
//2.创建HTable句柄
HTable htable=new HTable(con, "hbase_demo_api");
//3.创建delete对象
Delete delete =new Delete(Bytes.toBytes("class1"));
htable.delete(delete);
System.out.println("删除成功!");
//4.关闭HTable对象
htable.close();
}
/**
* 5.获取指定RowKey的数据
*/
public static void getByRowKey() throws Exception {
//1.创建一个Configuration对象
Configuration con = HBaseConfiguration.create();
//2.创建HTable句柄
HTable htable=new HTable(con, "hbase_demo_api");
//3.创建get对象
Get get=new Get(Bytes.toBytes("class1"));
Result result = htable.get(get);
for (Cell cell : result.rawCells()) {
System.out.println("RowKey-------"+Bytes.toString(result.getRow()));
System.out.println("column(列族)-------"+Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("value(值)-------"+Bytes.toString(CellUtil.cloneValue(cell)));
}
htable.close();
}
/**
* 6.获取指定RowKey的数据
*/
public static void deleteQualifier() throws Exception {
//1.创建一个Configuration对象
Configuration con = HBaseConfiguration.create();
//2.创建HTable句柄
HTable htable=new HTable(con, "hbase_demo_api");
//3.创建delete对象
Delete delete=new Delete(Bytes.toBytes("class1"));
delete.addColumn(Bytes.toBytes("course"), Bytes.toBytes("java"));
htable.delete(delete);
System.out.println("删除成功!");
htable.close();
}
/**
* 7.删除表
*/
public static void deleteTable() throws Exception {
//1.创建一个Configuration对象
Configuration con = HBaseConfiguration.create();
//2.创建HAdmin对象
HBaseAdmin admin=new HBaseAdmin(con);
//3.先将表禁用
admin.disableTable("hbase_demo_api");
//4.删除指定表
admin.deleteTable("hbase_demo_api");
System.out.println("删除成功!");
//5.关闭资源
admin.close();
}
HBase JavaAPI的更多相关文章
- 三、hbase JavaAPI
hbase是Java编写的,当然也提供了Java的API来操作hbase. 如果你是使用虚拟机来安装配置hbase那么你需要配置一下hostname,不然JavaAPI访问虚拟机的时候会无法连接,请参 ...
- HBase JavaAPI操作示例
package testHBase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBase ...
- Hbase javaAPI(工具类)表的增删改查
建立连接: package Init; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; i ...
- Hbase javaAPI报错:Callexception,tries=10,retries=35,started=38465msago
[client.RpcRetryingCaller(142)]Callexception,tries=10,retries=35,started=38465msago,cancelled=false, ...
- 分享知识-快乐自己:HBase编程
HBase编程: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...
- 学大数据是先学java还是先学python?
大数据的发展趋势日渐明显,但是进入这个领域的门槛不小,除了要有心理准备,其次就是要付诸实际行动中去学习. 学习方法有很多,在没有基础的前提下,自学是因人而异是有难度.其次是大数据目前的工作方向主要是三 ...
- HBase的JavaAPI操作
如果是DDL的操作就找HbaseAdmin. 如果是表上的增删改查的操作就找HTable. 附录代码: mport java.util.Arrays; import org.apache.hadoop ...
- HBase的Shell命令和JavaAPI
HBase的shell操作和JavaAPI的使用: Shell 表操作 创建表 create 'student','info' #表名 列族 插入表 put 'student','1001','inf ...
- 大数据入门第十四天——Hbase详解(二)基本概念与命令、javaAPI
一.hbase数据模型 完整的官方文档的翻译,参考:https://www.cnblogs.com/simple-focus/p/6198329.html 1.rowkey 与nosql数据库们一样, ...
随机推荐
- Vofuria ARCamera相机问题
想要发射 射线 Camera.allCameras[0] 该语句来选择相机:Camera.main 此语句只能找到Tag为MainCamera的相机:
- springMVC下载中文文件名乱码【转】
//遇到的现象是,下载含有中文文件名的文件时,能获取到文件,但是使用IE正常,使用firefox,chrome文件名却乱码.//既然如此,就区分一下浏览器再返回好了,处理方式如下 //RESTfull ...
- jquery 第二章
1.本章目标 css样式 选择器2.css样式 宽.高.边框.背景颜色.字体....... <html> <head> <style> div{ ...
- 详解 CAP 定理 Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)
CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. 分布式 ...
- 饮冰三年-人工智能-Python-23 Python PyCharm 使用中常见的问题
一:软件工具使用中遇到的问题 1:AttributeError: module 'pip' has no attribute 'main'问题 处理方法: a:找到JetBrains\PyCharm ...
- ios 运行时特征,动态改变控件字体大小
需求:ex: 在不同尺寸的iPhone上面显示的字体大小不一样 https://github.com/rentzsch/jrswizzle #import <UIKit/UIKit.h> ...
- 咸鱼入门到放弃8--jsp<三>jsp内置对象
NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.HttpServletRequ ...
- Codechef August Challenge 2018 : Lonely Cycles
传送门 几波树形dp就行了. #include<cstdio> #include<cstring> #include<algorithm> #define MN 5 ...
- jsp 自定义标签解决jsp页面中int时间戳的时间格式化问题
jsp 自定义标签解决jsp页面中int时间戳的时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签的步骤,下面就以我之前的一个例子中的定义一 ...
- 5、faker.js数据模拟
转载于:https://segmentfault.com/a/1190000008574028 今天发现了一个神器--json-server!在他的帮助下可以在很短的时间内搭建一个Rest API, ...