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. Vue 计算属性 && 监视属性

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...

  2. 在DELL服务器上安装windows2012 r2服务器系统

    主要过程: 1.准备安装光盘,开启服务器,当出现画面按F10进入服务器自带光盘系统安装向导.(若没有系统光盘,可以用软蝶通刻一个服务系统到+R的光盘).进入后选择设置和安装系统. 2.开始安装前,提示 ...

  3. Dubbo源码(八) - 负载均衡

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡.分摊到多个 ...

  4. hotspot算法实现 <<深入理解Java虚拟机>>

    1.枚举根节点 解决何时枚举,不需要实时的枚举,oopMap数据结构对象存储枚举信息 对象引用发生变化,需要存储每一条指令到OOPMap吗,,几百M的对象耗时需要很大的内存.GC空间成本 2.安全点: ...

  5. Centroids (换根DP)

    题面 题解 删一条边.加一条边,相当于把一个子树折下来,然后嫁接在一个点上, 那么最优的情况肯定是接在根上,对吧,很好理解吧 那么这个拆下来的子树大小就不能超过n/2. 我们用son[]来表示每个点为 ...

  6. 记一次血淋淋的MySQL崩溃修复案例

    摘要:今天给大家带来一篇MySQL数据库崩溃的修复案例 本文分享自华为云社区<记一次MySQL崩溃修复案例,再也不用删库跑路了>,作者: 冰 河. 问题描述 研究MySQL源代码,调试并压 ...

  7. rh358 001 Linux网络与systemd设置

    358 rhel7 ce ansible 部署服务 dhcp nginx vanish haproxy 打印机服务 服务管理自动化 systemd与systemctl systemctl 来管理sys ...

  8. Cluster table 与性能

    用户数据行存储在文件系统中的堆文件中,而这些行以不确定的顺序存储.如果表最初以插入/复制的顺序加载,那么以后的插入.更新和删除将导致在堆文件中以不可预测的顺序添加行.创建索引创建一个指向堆行的辅助文件 ...

  9. docker-compose入门--翻译

    在这一页,你将学习到如何构建一个简单的python的web应用,并通过Docker compose来运行.这个应用程序使用的是Flask框架,并维护着一个存储在reids里的点击计数器.由于这个案例使 ...

  10. JavaScript 之 原型对象、对象原型 —— { }

    JavaScript -- 构造函数 // 构造函数 function Player(name, age) { this.name = name; this.age = age; } JavaScri ...