操作环境:

   java版本:    jdk 1.7以上

   hbase 版本:1.2.x

   hadoop版本:2.6.0以上

实现功能: 1,创建指定表

       2,删除指定表

      3,根据表名,行键,列族,列描述符,值插入数据

      4,根据指定表获取指定行键rowkey和列族family的数据 并以字符串的形式返回查询到的结果

      5,根据table查询表中的所有数据 无返回值,直接在控制台打印结果

      7,根据指定表获取指定行键rowKey和列族family的数据 并以Map集合的形式返回查询到的结果

      8,根据指定表获取指定行键rowKey的所有数据 并以Map集合的形式返回查询到的结果

      9,根据表名获取所有的数据

package com.hbase.util;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry; import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
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.client.Table;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.util.Bytes; public class HBaseUtil{ /**
* 连接池对象
*/
protected static Connection connection;
private static final String ZK_QUORUM = "hbase.zookeeper.quorum";
private static final String ZK_CLIENT_PORT = "hbase.zookeeper.property.clientPort";
/**
* HBase位置
*/
private static final String HBASE_POS = "192.168.1.104"; /**
* ZooKeeper位置
*/
private static final String ZK_POS = "localhost"; /**
* zookeeper服务端口
*/
private final static String ZK_PORT_VALUE = "2181"; /**
* 静态构造,在调用静态方法时前进行运行
* 初始化连接对象.
* */
static{
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir", "hdfs://" + HBASE_POS
+ ":9000/hbase");
configuration.set(ZK_QUORUM, ZK_POS);
configuration.set(ZK_CLIENT_PORT, ZK_PORT_VALUE);
try {
connection = ConnectionFactory.createConnection(configuration);
} catch (IOException e) {
e.printStackTrace();
}// 创建连接池
}
/**
* 构造函数,用于初始化内置对象
*/
public HBaseUtil() {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir", "hdfs://" + HBASE_POS
+ ":9000/hbase");
configuration.set(ZK_QUORUM, ZK_POS);
configuration.set(ZK_CLIENT_PORT, ZK_PORT_VALUE);
try {
connection = ConnectionFactory.createConnection(configuration);
} catch (IOException e) {
e.printStackTrace();
}// 创建连接池
} /**
* @param tableName
* 创建一个表 tableName 指定的表名  seriesStr
* @param seriesStr
* 以字符串的形式指定表的列族,每个列族以逗号的形式隔开,(例如:"f1,f2"两个列族,分别为f1和f2)
**/
public boolean createTable(String tableName, String seriesStr) {
boolean isSuccess = false;// 判断是否创建成功!初始值为false
Admin admin = null;
TableName table = TableName.valueOf(tableName);
try {
admin = connection.getAdmin();
if (!admin.tableExists(table)) {
System.out.println("INFO:Hbase:: " + tableName + "原数据库中表不存在!开始创建...");
HTableDescriptor descriptor = new HTableDescriptor(table);
String[] series = seriesStr.split(",");
for (String s : series) {
descriptor.addFamily(new HColumnDescriptor(s.getBytes()));
}
admin.createTable(descriptor);
System.out.println("INFO:Hbase:: "+tableName + "新的" + tableName + "表创建成功!");
isSuccess = true;
} else {
System.out.println("INFO:Hbase:: 该表已经存在,不需要在创建!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(admin);
}
return isSuccess;
} /**
* 删除指定表名的表
* @param tableName  表名
* @throws IOException
* */
public boolean dropTable(String tableName) throws IOException {
boolean isSuccess = false;// 判断是否创建成功!初始值为false
Admin admin = null;
TableName table = TableName.valueOf(tableName);
try {
admin = connection.getAdmin();
if (admin.tableExists(table)) {
admin.disableTable(table);
admin.deleteTable(table);
isSuccess = true;
}
} finally {
IOUtils.closeQuietly(admin);
}
return isSuccess;
} /**
* 向指定表中插入数据
*
* @param tableName
* 要插入数据的表名
* @param rowkey
* 指定要插入数据的表的行键
* @param family
* 指定要插入数据的表的列族family
* @param qualifier
* 要插入数据的qualifier
* @param value
* 要插入数据的值value
* */
protected static void putDataH(String tableName, String rowkey, String family,
String qualifier, Object value) throws IOException {
Admin admin = null;
TableName tN = TableName.valueOf(tableName);
admin = connection.getAdmin();
if (admin.tableExists(tN)) {
try (Table table = connection.getTable(TableName.valueOf(tableName
.getBytes()))) {
Put put = new Put(rowkey.getBytes());
put.addColumn(family.getBytes(), qualifier.getBytes(),
value.toString().getBytes());
table.put(put);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("插入数据的表不存在,请指定正确的tableName ! ");
}
}
/**
* 根据指定表获取指定行键rowkey和列族family的数据 并以字符串的形式返回查询到的结果
*
* @param tableName
* 要获取表 tableName 的表名
* @param rowKey
* 指定要获取数据的行键
* @param family
* 指定要获取数据的列族元素
* @param qualifier
* 指定要获取数据的qualifier
*
* */
protected static String getValueBySeriesH(String tableName, String rowKey,
String family,String qualifier) throws IllegalArgumentException, IOException {
Table table = null;
String resultStr = null;
try {
table = connection
.getTable(TableName.valueOf(tableName.getBytes()));
Get get = new Get(Bytes.toBytes(rowKey));
if( !get.isCheckExistenceOnly()){
get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
Result res = table.get(get);
byte[] result = res.getValue(Bytes.toBytes(family),
Bytes.toBytes(qualifier));
resultStr = Bytes.toString(result);
}else{
resultStr = null;
}
} finally {
IOUtils.closeQuietly(table);
}
return resultStr;
} /**
* 根据table查询表中的所有数据 无返回值,直接在控制台打印结果
* */
@SuppressWarnings("deprecation")
public void getValueByTable(String tableName) throws Exception {
Table table = null;
try {
table = connection.getTable(TableName.valueOf(tableName));
ResultScanner rs = table.getScanner(new Scan());
for (Result r : rs) {
System.out.println("获得到rowkey:" + new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("列:" + new String(keyValue.getFamily())
+ ":" + new String(keyValue.getQualifier())
+ "====值:" + new String(keyValue.getValue()));
}
}
} finally {
IOUtils.closeQuietly(table);
}
} /**
* 根据指定表获取指定行键rowKey和列族family的数据 并以Map集合的形式返回查询到的结果
*
* @param tableName
* 要获取表 tableName 的表名
* @param rowKey
* 指定的行键rowKey
* @param family
* 指定列族family
* */ protected static Map<String, String> getAllValueH(String tableName,
String rowKey, String family) throws IllegalArgumentException, IOException {
Table table = null;
Map<String, String> resultMap = null;
try {
table = connection.getTable(TableName.valueOf(tableName));
Get get = new Get(Bytes.toBytes(rowKey));
if(get.isCheckExistenceOnly()){
Result res = table.get(get);
Map<byte[], byte[]> result = res.getFamilyMap(family.getBytes());
Iterator<Entry<byte[], byte[]>> it = result.entrySet().iterator();
resultMap = new HashMap<String, String>();
while (it.hasNext()) {
Entry<byte[], byte[]> entry = it.next();
resultMap.put(Bytes.toString(entry.getKey()),
Bytes.toString(entry.getValue()));
}
}
} finally {
IOUtils.closeQuietly(table);
}
return resultMap;
} /**
* 根据指定表获取指定行键rowKey的所有数据 并以Map集合的形式返回查询到的结果
* 每条数据之间用&&&将Qualifier和Value进行区分
* @param tableName
* 要获取表 tableName 的表名
* @param rowkey
* 指定的行键rowKey
* */
public ArrayList<String> getFromRowkeyValues(String tableName, String rowkey){
Table table =null;
ArrayList<String> Resultlist = new ArrayList<>();
Get get = new Get(Bytes. toBytes ( rowkey ));
try {
table = connection.getTable(TableName.valueOf(tableName));
Result r = table.get(get);
for (Cell cell : r.rawCells()) {
//每条数据之间用&&&将Qualifier和Value进行区分
String reString = Bytes. toString (CellUtil. cloneQualifier (cell))+"&&&"+Bytes. toString (CellUtil. cloneValue (cell));
Resultlist.add(reString);
}
table.close();
} catch (IOException e1) {
e1.printStackTrace();
}
return Resultlist;
}
/**
* 根据表名获取所有的数据
* */
@SuppressWarnings("unused")
private void getAllValues(String tableName){
try {
Table table= connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
ResultScanner resutScanner = table.getScanner(scan);
for(Result result: resutScanner){
System.out.println("scan: " + result);
}
} catch (IOException e) {
e.printStackTrace();
}
} public static void getTestDate(String tableName) throws IOException{
Table table = null;
table = connection.getTable(TableName.valueOf(tableName));
int count = 0;
Scan scan = new Scan();
scan.addFamily("f".getBytes()); Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,
new RegexStringComparator("112213.*"));
scan.setFilter(filter);
ResultScanner resultScanner = table.getScanner(scan);
for(Result result : resultScanner){
System.out.println(result);
count++;
}
System.out.println("INFO:Hbase:: 测试结束!共有 " + count + "条数据");
} }

java实现hbase数据库的增删改查操作(新API)的更多相关文章

  1. 通过jdbc连接MySql数据库的增删改查操作

    一.获取数据库连接 要对MySql数据库内的数据进行增删改查等操作,首先要获取数据库连接 JDBC:Java中连接数据库方式 具体操作如下: 获取数据库连接的步骤: 1.先定义好四个参数 String ...

  2. PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

    PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

  3. python web.py操作mysql数据库,实现对数据库的增删改查操作

    使用web.py框架,实现对mysql数据库的增删改查操作: 该示例代码中连接的是本地数据库testdb,user表,表结构比较简单,只有两个字段:mobile和passwd,类型均为字符型 实际应用 ...

  4. TP5.1:数据库的增删改查操作(基于面向对象操作)

    我们现实中对数据库的增删改查操作,都是使用模型类进行操作的(表名::),也就是面向对象操作,只有底层的代码用的是数据库操作(Db::table('表名')) 下面我将贴出模型类进行的增删改查操作,通过 ...

  5. TP5.1:数据库的增删改查操作(基于数据库操作)

    1.在app/index/controller文件夹下创建一个文件,名为:Operation 注意:起名一定要避开关键字,例如:mysql,curd等等,如果使用关键字起名,会造成报错! 在Opera ...

  6. greendao对SQLite数据库的增删改查操作

    利用greendao操作数据库时,都是以对象或者对象的list来进行增删改查的操作,操作的结果都是用一个list来接收的!!! 1.增加一条记录 Stu stu01=new Stu();stu01.s ...

  7. Django中ORM对数据库的增删改查操作

         前言 什么是ORM?  ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作. 简而言之,就是将数据库的一张表当作一个类,数据库中的每一条记录当作一个对象.在 ...

  8. nodejs对mongodb数据库的增删改查操作(转载)

    首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...

  9. 69.nodejs对mongodb数据库的增删改查操作

    转自:https://www.cnblogs.com/sexintercourse/p/6485381.html 首先要确保mongodb的正确安装,安装参照:http://docs.mongodb. ...

随机推荐

  1. mysql事务_事务隔离级别详解

    使用事务语法 1. 开启事务start transaction,可以简写为 begin 2. 然后记录之后需要执行的一组sql 3. 提交commit 4. 如果所有的sql都执行成功,则提交,将sq ...

  2. Linux操作系统的文件目录结构

    一 --- 导读 首先记住一句经典的话:"linux世界中,万事万物皆为文件" 二---linux的目录结构示意图和windows下的目录结构示意图(本图需要背诵) 三---各目录 ...

  3. 加薪攻略之UI组件库实践—storybook

    目录 加薪攻略之UI组件库实践-storybook 一.业务背景 二.选用方案 三.引入分析 项目结构 项目效果 四.实现步骤 1.添加依赖 2.添加npm执行脚本 3.添加配置文件 4.添加必要的w ...

  4. MySQL 中的WAL机制

    本文主要概括的是 WAL 机制涉及的三种日志,具体与其他组件的联系.执行可查看 一条 sql 的执行过程详解 .MySQL中的事务原理和锁机制 . 是什么 WAL,全称是Write-Ahead Log ...

  5. post请求下载文件,获取Content-Disposition文件名

    1.post下载文件代码,doload方法 import request from "../../src/utils/request"; import { API } from & ...

  6. 解决github下载速度慢问题

    众所周知,GitHub是一个巨大的开源宝库,以及程序员和编程爱好者的聚集地,包括我之前推荐的诸多优秀的开源项目全部都是位于GitHub上.但是每当我们看到优秀的开源项目,准备去 下(bai)载(pia ...

  7. M43 第一阶段考试

    一.解答题 1.统计当前主机的TCP协议网络各种连接状态出现的次数 netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a ...

  8. Linux SSH , SCP 建立信任关系(免密传输)

    最近有个需求,Jenkins需要将war传输到各个项目节点中,所以需要远程执行各个节点的shell脚本.但是中间有个输入密码的过程,在自动化部署中是行不通的,故需要增加免密登录.具体如下: 如果想在  ...

  9. 如何跑通第一个 SQL 作业

    简介: 本文由阿里巴巴技术专家周凯波(宝牛)分享,主要介绍如何跑通第一个SQL. 一.SQL的基本概念 1.SQL 分类 SQL分为四类,分别是数据查询语言(DQL).数据操纵语言(DML).数据定义 ...

  10. 用其他主机docker login登录Harbor仓库报错

    做微服务的时候,我准备把编译好的jar包,部署到我的Harbor仓库上,却登录不上去,出现以下报错: [root@k8s-master ~]# docker login 192.168.30.24Us ...