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. Windows环境安装Hadoop环境

    1,下载Hadoop,解压 2,配置Hadoop环境变量 右键此电脑--属性 高级系统设置 环境变量 新建一个HADOOP_HOME 添加到path 3,cmd窗口查看安装情况:hadoop vers ...

  2. C#委托的最简单入门和理解

      委托是.net语言中非常重要的一个概念,初学不太好理解也没有关系的,在一次一次的攻关后会领会到委托的精妙,可以说 .net 没有委托就没有后面更高级的事件,异步多线程等等特性的形成可能.所以一定要 ...

  3. MyBatis ognl.NoSuchPropertyException 或者 Invalid bound statement (not found)

    描述 SpringBoot + Mybatis-plus 项目,运行时出现如下错误: ognl.NoSuchPropertyException:没有对应属性异常 Invalid bound state ...

  4. Canvas 非线性图形(一):文本

    基础 画布除了绘制图形以外还可以绘制文本,画布中的文本可以设置字体大小.字体格式.对齐方式(横向和纵向对齐方式),并且还可以制作很炫酷的文本,比如渐变文字. 文本有以下三个属性,控制文本的字体大小.字 ...

  5. 【BZOJ2658】[Zjoi2012]小蓝的好友(mrx) (扫描线,平衡树,模拟)

    题面 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事,为了回馈各位比赛选手,此题的主角是贯穿这次比赛的关键人物--小蓝的好友. 在帮小蓝确定了旅游路线后,小蓝的好友也不会浪费这个难得 ...

  6. Spring 10: AspectJ框架 + @Before前置通知

    AspectJ框架 概述 AspectJ是一个优秀的面向切面编程的框架,他扩展了java语言,提供了强大的切面实现 本身是java语言开发的,可以对java语言面向切面编程进行无缝扩展 AOP常见术语 ...

  7. 【mido】python的midi处理库

    安装mido库:pip install mido pipy地址:https://pypi.org/project/mido/ mido官方文档:https://mido.readthedocs.io/ ...

  8. Stringboot中@Autowired加了static就属性值就为null

    //错误 @Autowired private static DepartmentDao departmentDao; @Autowired注入,将bean注入进来 @Autowired通过sprin ...

  9. 使用.Net对图片进行裁剪、缩放、与加水印

    图片的裁剪.缩放.与加水印,是任何系统经常要用到的功能,它们现已集成到IUtility工具中,使用十分简便.(具体代码将在文末给出,支持.NET/.NET Framework/.NET Core) 现 ...

  10. 【Traefik二次开发】服务 Service 开发

    Service 定义 https://doc.traefik.io/traefik/routing/services/ The Services are responsible for configu ...