public class Test {
public Connection connection;
// 用HBaseconfiguration初始化配置信息是会自动加载当前应用的classpath下的hbase-site.xml
public static Configuration configuration = HBaseConfiguration.create(); public Test() throws Exception {
// 当然也可以手动加载配置文件,手动加载配置文件时要调用configuration的addResource方法
// configuration.addResource("hbase-site.xml");
connection = ConnectionFactory.createConnection(configuration);
} public void createTable(String tableName, String... cf1) throws Exception {
Admin admin = connection.getAdmin(); //HTD需要TableName类型的tableName,创建TableName类型的tableName
TableName tbName = TableName.valueOf(tableName);
//判断表述否已存在,不存在则创建表
if (admin.tableExists(tbName)) {
System.err.println("表" + tableName + "已存在!");
return;
}
//通过HTableDescriptor创建一个HTableDescriptor将表的描述传到createTable参数中
HTableDescriptor HTD = new HTableDescriptor(tbName);
//为描述器添加表的详细参数
for (String cf : cf1) {
// 创建HColumnDescriptor对象添加表的详细的描述
HColumnDescriptor HCD = new HColumnDescriptor(cf);
HTD.addFamily(HCD);
}
//调用createtable方法创建表
admin.createTable(HTD);
} public void deleteTable(String tableName) throws Exception {
Admin admin = connection.getAdmin();
//通过tableName创建表名
TableName tbName = TableName.valueOf(tableName);
//判断表是否存在,若存在就删除,不存在就退出
if (admin.tableExists(tbName)) {
//首先将表解除占用,否则无法删除
admin.disableTable(tbName);
//调用delete方法
admin.deleteTable(tbName);
System.err.println("表" + tableName + "已删除");
} else {
System.err.println("表" + tableName + "不存在!");
}
} public void putData() throws Exception {
//通过表名获取tbName
TableName tbname = TableName.valueOf("t1");
//通过connection获取相应的表
Table table = connection.getTable(tbname);
//创建Random对象以作为随机参数
Random random = new Random();
//hbase支持批量写入数据,创建Put集合来存放批量的数据
List<Put> batput = new ArrayList<>(); for (int i = 0; i < 10; i++) {
//实例化put对象,传入行键
Put put = new Put(Bytes.toBytes("rowkey_" + i));
//调用addcolum方法,向f1列簇中添加字段
put.addImmutable(Bytes.toBytes("f1"), Bytes.toBytes("username"), Bytes.toBytes("un_" + i));
put.addImmutable(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes(random.nextInt(50) + 1));
put.addImmutable(Bytes.toBytes("f1"), Bytes.toBytes("birthday"), Bytes.toBytes("2017" + i));
put.addImmutable(Bytes.toBytes("f1"), Bytes.toBytes("phone"), Bytes.toBytes("phone:" + i));
put.addImmutable(Bytes.toBytes("f1"), Bytes.toBytes("邮箱"), Bytes.toBytes("邮箱:" + i));
//将测试数据添加到list中
batput.add(put);
}
//调用put方法将list中的测试数据写入hbase
table.put(batput);
System.err.println("数据插入完成!");
} public void getData() throws Exception {
//获取想要查询的表的TableName
TableName tbname = TableName.valueOf("t1");
//通过tbName获得Table对象
Table table = connection.getTable(tbname);
//创建Get的集合以承接查询的条件
List<Get> gets = new ArrayList<Get>();
//循环五次,取前五个测试数据
for (int i = 0; i < 5; i++) {
//就将查询条件放入get对象中
Get get = new Get(Bytes.toBytes("rowkey_" + i));
//将get对象放入聚合
gets.add(get);
}
//调用table.get方法传入查询条件,获得查询的结果的数组
Result[] results = table.get(gets);
//遍历结果数组,利用CellScanner配合cellUtil获得对应的数据
for (Result result : results) {
//调用result.cellscanner创建scanner对象
CellScanner cellScanner = result.cellScanner();
//遍历结果集,取出查询结果,
//如果存在下一个cell则advandce方法返回true,且current方法会返回一个有效的cell,可以当作循环条件
while (cellScanner.advance()) {
//current方法返回一个有效的cell
Cell cell = cellScanner.current();
//使用CellUtil调用相应的方法获取想用的数据,并利用Bytes.toString方法将结果转换为string输出
String family = Bytes.toString(CellUtil.cloneFamily(cell));
String qualify = Bytes.toString(CellUtil.cloneQualifier(cell));
String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
String value = Bytes.toString(CellUtil.cloneValue(cell));
System.err.println(family + "_" + qualify + "_" + rowkey + "_" + value);
}
}
} public void getData1() throws Exception {
TableName tbname = TableName.valueOf("bd14:fromJava");
Table table = connection.getTable(tbname);
List<Get> gets = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Get get = new Get(Bytes.toBytes("rowkey_" + i));
gets.add(get);
}
Result[] results = table.get(gets);
for (Result result : results) {
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = result.getMap();
for (byte[] cf : map.keySet()) {
NavigableMap<byte[], NavigableMap<Long, byte[]>> valueWithColumnQualify = map.get(cf);
for (byte[] columnQualify : valueWithColumnQualify.keySet()) {
NavigableMap<Long, byte[]> valueWithTimestamp = valueWithColumnQualify.get(columnQualify);
for (Long ts : valueWithTimestamp.keySet()) {
byte[] value = valueWithTimestamp.get(ts);
String rowKey = Bytes.toString(result.getRow());
String columnFamily = Bytes.toString(cf);
String columnqualify = Bytes.toString(columnQualify);
String timestamp = new Date(ts) + "";
String values = Bytes.toString(columnQualify);
System.out.println(rowKey + "-" + columnFamily + "-" + columnqualify + "-" + timestamp + "-" + values);
}
}
}
}
} public void getData2() throws Exception {
TableName tbname = TableName.valueOf("bd14:fromJava");
Table table = connection.getTable(tbname);
List<Get> gets = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Get get = new Get(Bytes.toBytes("rowkey_" + i));
gets.add(get);
}
Result[] results = table.get(gets);
//遍历结果对象results
for (Result result : results) {
//嵌套遍历result获取cell
for (Cell cell : result.listCells()) {
//使用CellUtil工具类直接获取cell中的数据
String family = Bytes.toString(CellUtil.cloneFamily(cell));
String qualify = Bytes.toString(CellUtil.cloneQualifier(cell));
String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
String value = Bytes.toString(CellUtil.cloneValue(cell));
System.err.println(family + "_" + qualify + "_" + rowkey + "_" + value);
}
} } public void updateData(String tableName, String rowKey, String family, String columkey, String updatedata) throws Exception {
//hbase中更新数据同样采用put方法,在相同的位置put数据,则在查询时只会返回时间戳较新的数据
//且在文件合并时会将时间戳较旧的数据舍弃
Put put = new Put(Bytes.toBytes(rowKey));
//将新数据添加到put中
put.addImmutable(Bytes.toBytes(family), Bytes.toBytes(columkey), Bytes.toBytes(updatedata));
Table table = connection.getTable(TableName.valueOf(tableName));
//将put写入HBase
table.put(put);
} //删除某条记录
public void deleteData(String tableName,String rowKey,String family, String columkey) throws Exception{
Table table = connection.getTable(TableName.valueOf(tableName));
//创建delete对象
Delete deletData= new Delete(Bytes.toBytes(rowKey));
//将要删除的数据的准确坐标添加到对象中
deletData.addColumn(Bytes.toBytes(family), Bytes.toBytes(columkey));
//删除表中数据
table.delete(deletData);
} //删除一行数据
public void deleteRow(String tableName,String rowKey) throws Exception{
Table table = connection.getTable(TableName.valueOf(tableName));
//通过行键删除一整行的数据
Delete deletRow= new Delete(Bytes.toBytes(rowKey));
table.delete(deletRow);
} public static void main(String[] args) {
try {
Test test = new Test();
test.createTable("t1", "f1");
// test.putData();
} catch (Exception e) {
e.printStackTrace();
}
}
}

java操作Hbase的更多相关文章

  1. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  2. Java操作hbase总结

    用过以后,总得写个总结,不然,就忘喽. 一.寻找操作的jar包. java操作hbase,首先要考虑到使用hbase的jar包. 因为咱装的是CDH5,比较方便,使用SecureCRT工具,远程连接到 ...

  3. java操作Hbase实例

    所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.u ...

  4. 错误: 找不到或无法加载主类 java操作hbase出错

    用java操作hbase 利用maven引入hbase包后发现无法启动程序,然后网上说是包的冲突. 我引入了下面三个包然后程序就不能运行了. <dependency> <groupI ...

  5. Java 操作 HBase 教程

    Java 操作 HBase 教程 一.简介 二.hbase-client 引入 三.连接操作 四.表操作 五.运行测试 相关博文原文地址: 博客园:美码师:HBase(2) Java 操作 HBase ...

  6. 【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  7. (转)Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  8. Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  9. HBase篇--HBase操作Api和Java操作Hbase相关Api

    一.前述. Hbase shell启动命令窗口,然后再Hbase shell中对应的api命令如下. 二.说明 Hbase shell中删除键是空格+Ctrl键. 三.代码 1.封装所有的API pa ...

  10. HBASE学习d端口master:16010(java操作hbase)https://www.cnblogs.com/junrong624/p/7323483.html

    HBase提示已创建表,但是list查询时,却显示表不存在. https://blog.csdn.net/liu16659/article/details/80216085 下载网址 http://a ...

随机推荐

  1. PSP(5.11——5.17)以及周记录

    1.PSP 5.11 14:30 20:00 130 200 Cordova A Y min 5.12 9:00 14:00 100 200 Cordova A Y min 5.13 13:30 15 ...

  2. ubuntu 程序后台运行几个方法

    51 1. 程序后加上“&” ,即 “./myjob &”, 将命令放入到一个作业队列中,可以用命令“jobs” 查看 2. 将1中的命令放在 “()”中, 即 “(./myjob & ...

  3. BZOJ2553[BeiJing2011]禁忌——AC自动机+概率DP+矩阵乘法

    题目描述 Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传 ...

  4. BZOJ4946 NOI2017蔬菜(贪心+堆)

    容易想到一个费用流做法:将每种蔬菜拆成p种,对应p个过期时间,每一种向可以卖的时间连边,第一次卖的奖励算在最晚过期的一种里.对于天数动态加点.不过这样边数太多了,因为第i天能卖的第i-1天一定能卖,可 ...

  5. Bash Game 巴什博弈

    巴什博弈(Bash Game,同余理论):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先 ...

  6. bzoj 2202 [HNOI2010] Bounce 弹飞绵羊(分块)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 思路:和之前那道树分块的题很像,只不过那道是在树上,这道简单些在序列上 还是维护两个数 ...

  7. Sublime text3 插件LiveReload 实现实时预览

    1.首先要安装插件LiveReload Sublime text3. 菜单 preferences->packages control,输入install.. 回车,输入LiveReload回车 ...

  8. 【题解】 bzoj1076: [SCOI2008]奖励关 (装压+期望dp)

    题面戳我 Solution 并不会做,看了下题解大概了解了.期望这个东西好难搞啊qwq 我们定义\(dp[i][j]\)表示第\(i\)步,拿到宝物前的状态为\(j\). 正着来会有很多不合法的情况, ...

  9. 【Code Chef】April Challenge 2019

    Subtree Removal 很显然不可能选择砍掉一对有祖先关系的子树.令$f_i$表示$i$子树的答案,如果$i$不被砍,那就是$a_i + \sum\limits_j f_j$:如果$i$被砍, ...

  10. hdu 2845 Beans(最大不连续子序列和)

    Problem Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled ...