API之框架

private static Admin admin = null;
private static Connection connection = null;
private static Configuration conf = null; static {
// hbase的配置文件
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "192.168.11.11");
conf.set("hbase.zookeeper.property.clientPort", "2181"); // 获取hbase的管理员
try {
connection = ConnectionFactory.createConnection(conf);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
} // 进行核心代码编写 // 释放hbase的资源
private void close(Connection connection, Admin admin) {
if (connection != null) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (admin != null) {
try {
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

判断表是否存在

// 判断表是否存在
public static boolean tableExists(String tableName) throws IOException {
// 执行操作
boolean tableExists = admin.tableExists(TableName.valueOf(tableName));
return tableExists;
} public static void main(String[] args) throws IOException {
// 查看表是否存在
System.out.println(tableExists("student"));
}

创建表

// 创建表
public static void createTable(String tableName, String... cfs) throws IOException {
if (tableExists(tableName)) {
System.out.println(tableName + "已存在");
return;
}
// 表需要表描述器
HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName)); // 添加列族,列族可以有多个,so for{ }
for (String cf : cfs) {
// 列族需要列描述器
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);
hColumnDescriptor.setMaxVersions(1);// 添加版本号
hTableDescriptor.addFamily(hColumnDescriptor);
}
//创建表
admin.createTable(hTableDescriptor);
System.out.println(tableName + "创建成功!!!");
} public static void main(String[] args) throws IOException {
/*// 创建表*/
createTable("student1", "info");
System.out.println(tableExists("student1"));
}

删除表

// 删除表
public static void deleteTable(String tableName) throws IOException {
if (tableExists(tableName)) {
// 使得表下线(使表不可用)
admin.disableTable(TableName.valueOf(tableName));
// 删除表
admin.deleteTable(TableName.valueOf(tableName));
System.out.println(tableName + "删除成功!!!");
} else System.out.println(tableName + "不存在!!!");
} public static void main(String[] args) throws IOException {
/*// 删除表*/
deleteTable("student1");
System.out.println(tableExists("student1"));
}

添加数据

// 增加数据//修改数据
public static void putData(String tableName, String rowKey, String cf, String cn, String value) throws IOException {
if (tableExists(tableName)) {
// 获取table对象
Table table = connection.getTable(TableName.valueOf(tableName));
ArrayList<Put> list = new ArrayList<Put>();
Put put = null;
for (int i = 0; i <= rowKey.length(); i++) {
put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value));
list.add(put);
if (i % 100 == 0) {
// 开始执行添加数据操作
table.put(list);
list.clear();
}
}
// 关闭table
table.close();
} else System.out.println(tableName + "不存在!!!");
} public static void main(String[] args) throws IOException {
/*// 添加数据*/
for (int i = 0; i <= 1000; i++) {
putData("student", "100" + i, "info", "email", "tao" + i + "qq.com");
} }

删除数据

 // 删除表
public static void delete(String tableName, String rowkey, String cf, String cn) throws IOException {
if (tableExists(tableName)) {
// 获取table对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 创建delete对象
Delete delete = new Delete(Bytes.toBytes(rowkey)); // 删除所有版本的数据,公司常用的
delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(cn));
/**
* 如果是多个版本的数据,删除最新版本的数据,之前的版本会出来顶替值
* 在公司慎用
* 可以更细粒度是控制版本 timestamp
*/
// delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); // 开始执行删除操作
table.delete(delete);
// 关闭table
table.close();
} else System.out.println(tableName + "不存在!!!");
} public static void main(String[] args) throws IOException {
/*// 删除数据*/
delete("student", "1001", "info", "name");
}

全表扫描

// 全表扫描
public static void scan(String tableName, String startRow) throws IOException {
// 创建表对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 创建scan对象 可以设置多条件 eg:startRow,stopRow
Scan scan = new Scan();
// scan.getStartRow(Bytes.toBytes(startRow));
// scan.getStopRow(); // 开始扫描数据
ResultScanner resultScanner = table.getScanner(scan);
// 表有多个rowkey
for (Result result : resultScanner) {
Cell[] cells = result.rawCells();
// 每个rowkey有多个单元格数据
for (Cell cell : cells) {
System.out.println("RK-->" + Bytes.toString(CellUtil.cloneRow(cell))
+ ",CF-->" + Bytes.toString(CellUtil.cloneFamily(cell))
+ ",CN-->" + Bytes.toString(CellUtil.cloneQualifier(cell))
+ ",VALUE-->" + Bytes.toString(CellUtil.cloneValue(cell)));
}
}
} public static void main(String[] args) throws IOException {
/*// 全表扫描数据*/
scan("student", "1002");
}

根据rowkey获取数据

// 获取指定数据  可以指定cf  cn
public static void getData(String tableName, String rowkey, String cf, String cn) throws IOException {
// 获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 获取get对象
Get get = new Get(Bytes.toBytes(rowkey));
get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
get.addFamily(Bytes.toBytes(cf));
get.setMaxVersions();// 默认是1版本
// 执行查找数据操作
Result result = table.get(get); // 开始遍历操作
Cell[] cells = result.rawCells(); // 每个rowkey下都有很多数据
for (Cell cell : cells) {
System.out.println("RK-->" + Bytes.toString(CellUtil.cloneRow(cell))
+ ",CF-->" + Bytes.toString(CellUtil.cloneFamily(cell))
+ ",CN-->" + Bytes.toString(CellUtil.cloneQualifier(cell))
+ ",VALUE-->" + Bytes.toString(CellUtil.cloneValue(cell)));
}
} public static void main(String[] args) throws IOException {
// 根据rowkey获取数据
getData("student", "1002", "info", "name");
}

Hbase之API基本操作的更多相关文章

  1. Hbase客户端API基础小结笔记(未完)

    客户端API:基础 HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供的,通过这个类,用户可以完成向HBase存储和检索数据,以及删除无 ...

  2. HBase伪分布式环境下,HBase的API操作,遇到的问题

    在hadoop2.5.2伪分布式上,安装了hbase1.0.1.1的伪分布式 利用HBase的API创建个testapi的表时,提示  Exception in thread "main&q ...

  3. 使用hbase的api创建表时出现的异常

    /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Didea.launcher.port=7538 -Didea.launcher.bin.path=/usr/l ...

  4. hbase rest api接口链接管理【golang语言版】

    # go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...

  5. HBase Python API

    HBase Python API HBase通过thrift机制可以实现多语言编程,信息通过端口传递,因此Python是个不错的选择 吐槽 博主在Mac上配置HBase,奈何Zoomkeeper一直报 ...

  6. Hadoop生态圈-Hbase的API常见操作

    Hadoop生态圈-Hbase的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  7. HBase编程 API入门系列之create(管理端而言)(8)

    大家,若是看过我前期的这篇博客的话,则 HBase编程 API入门系列之put(客户端而言)(1) 就知道,在这篇博文里,我是在HBase Shell里创建HBase表的. 这里,我带领大家,学习更高 ...

  8. HDFS API基本操作

    对HDFS API基本操作都是通过 org.apache.hadoop.fs.FileSystem类进行的,以下是一些常见的操作: package HdfsAPI; import java.io.Bu ...

  9. hbase java api样例(版本1.3.1,新API)

    hbase版本:1.3.1 目的:HBase新API的使用方法. 尝试并验证了如下几种java api的使用方法. 1.创建表 2.创建表(预分区) 3.单条插入 4.批量插入 5.批量插入(客户端缓 ...

随机推荐

  1. wdos centos64位通过yum来升级PHP

    通过yum list installed | grep php可以查看所有已安装的php软件 使用yum remove php -- 将所有的包删除 通过yum list php*查看是否有自己需要安 ...

  2. 举重若轻流水行云,前端纯CSS3实现质感非凡的图片Logo鼠标悬停(hover)光泽一闪而过的光影特效

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_197 喜欢看电影的朋友肯定会注意到一个有趣的细节,就是电影出品方一定会在片头的Logo环节做一个小特效:暗影流动之间光泽一闪而过, ...

  3. Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化

    1 # 一.Vue3不常用的Composition API 2 # 1.shallowReactive与shallowRef 3 .shallowReactive: 只处理对象最外层属性的响应式(浅响 ...

  4. ubuntu 下获取Let's Encrypt免费ssl证书

    # ubuntu 下获取Let's Encrypt免费ssl证书 # 一.安装Nginx https://www.cnblogs.com/watermeloncode/p/15476317.html ...

  5. if条件控制语句和switch语句

    if条件控制语句(判断范围,在一定区间内容进行判断) if 如果(第一个条件) else if 如果(第二个条件 可以无限加) else 否则(只能有一个 上面都不满足的情况下进入) if和else ...

  6. 【原创】Python 网易易盾滑块验证

    本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.PIL.numpy.scipy.matplotlib 分析 ...

  7. 万答17,AWS RDS怎么搭建本地同步库

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 背景说明 AWS RDS 权限受限,使用 mysqldump 的时候无法添加 - ...

  8. Redis安装及常用配置

    Redis安装说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包.因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本 ...

  9. C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>

    作者: 目录 一.缘由 二.使用向量类型 2.1 基本算法 2.2 使用大小固定的向量(如 Vector4) 2.2.1 介绍 2.2.2 用Vector4编写浮点数组求和函数 2.3 使用大小与硬件 ...

  10. SpringBoot项目搭建 + Jwt登录

    临时接了一个小项目,有需要搭一个小项目,简单记录一下项目搭建过程以及整合登录功能. 1.首先拿到的是一个码云地址,里面是一个空的文件夹,只有一个 2. 拿到HTTPS码云项目地址链接,在IDEA中cl ...