分享知识-快乐自己:HBase编程
HBase编程:
-----------------------------------------------------------------
HBase JavaAPI概述:
1.HBase使用Java语言编写的,自然支持Java编程
2.支持CRUD操作:create read update delete
3.JavaAPI包含了所有HBase的shell,甚至更多
4.JavaAPI是访问HBase的最快方式
JavaAPI程序设计:
1、创建一个Configuration
Configuration conf = HbaseConfiguration.create();
Configuration对象包含了连接到HBase服务的信息:zookeeper的位置,连接时间等
HbaseConfiguration.create()内部逻辑:
从CLASSPATH下加载hbase-default.xml和hbase-site.xml文件需将hbase-site.xml放入到CLASSPATH下 hbase-site.xml将覆盖hbase-default.xml的同名属性
自定义配置文件,使用Configuration加载
Configuration newConf = Configuration.create(existingConf);
用户自定义的配置文件将在已有配置文件之后加载将覆盖hbase-default.xml和 hbase-site.xml中的配置
自定义参数值:
Configuration conf=HbaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "admin-01,admin-02");
通常不推荐这么做!
2、创建HTable句柄
提供Configuration对象和待访问Table名称 HTable table = new HTable(conf, tableName);
一个table对应一个HTbale句柄:
提供了CRUD操作
设计简单、使用方便
提供行级事务
不支持多行事务或者表级别的事务
严格的行一致性
并发读、顺序写
创建HTable句柄代价很大 扫描.META.表等;
创建一次,以后尽可能复用;
如果需要创建多个Htable句柄,使用 HTablePool;
HTable并非线程安全的 一个线程创建一个即可
Htable支持CRUD批处理
非线程安全,仅是为了提高性能
3、执行相应的CRUD操作
执行put、get、delete、scan等操作
table.getTableName();
4、关闭HTable句柄
将内存数据刷新到磁盘上 释放各种资源
table.close();
前期工作:
将虚拟主机当中的hbase-site.xml和hdfs-site.xml文件复制到项目下的classpath下
修改windows真机的hosts文件,添加三台机器的映射
导入POM文件:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.0</version>
</dependency> <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.8.0</version>
</dependency> <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.0</version>
</dependency> <dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency> <dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>1.3.1</version>
</dependency>
HBase_API 操作:
package com.gdbd; import java.io.IOException;
import java.util.Scanner; 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.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
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.util.Bytes; /**
* Hello world!
*
*/
public class App { public static void main(String[] args) throws IOException { do {
System.out.println("\n\n*********************HBase_API***神码操作平台*********************");
System.out.println("1、创建表");
System.out.println("2、向表中添加数据");
System.out.println("3、查询表中所有数据");
System.out.println("4、查询表中指定RowKey的所有数据");
System.out.println("5、删除指定列族的指定列");
System.out.println("6、删除指定列族");
System.out.println("7、删除表中指定RowKey的所有数据删除表中指定RowKey的所有数据");
System.out.println("8、删除表");
Scanner input = new Scanner(System.in);
System.out.println("请输入......");
int num = input.nextInt();
switch (num) {
case 1:
demo01();
break;
case 2:
demo02();
break;
case 3:
cat();
break;
case 4:
catRows();
break;
case 5:
delFamilyColumn();
break;
case 6:
delFamily();
break;
case 7:
delRow();
break;
case 8:
delTable();
break;
}
} while (true);
} /***
* 创建表
*
* @throws MasterNotRunningException
* @throws ZooKeeperConnectionException
* @throws IOException
*/
private static void demo01() throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
System.out.println("正在 创建表...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
/**
* 创建HBaseAdmin对象 此对象 提供了 建表,创建列族,检查表是否存在,修改表和列族结构,删除表等功能 HBaseAdmin实例的生命周期不宜太长
*/
HBaseAdmin admin = new HBaseAdmin(configuration);
if (admin.tableExists("hbase_demo")) {
System.out.println("表已经存在!!!");
} else { // 证明表不存在
HTableDescriptor table = new HTableDescriptor("hbase_demo"); // 创建表的描述对象
// new HColumnDescriptor对象:设置列族的特性
table.addFamily(new HColumnDescriptor("grade"));
table.addFamily(new HColumnDescriptor("course"));
// 定义好了表名和列族 可以创建表
admin.createTable(table);
System.out.println("表创建成功!!!");
}
} /***
* 向表中添加数据
*
* @throws IOException
*/
private static void demo02() throws IOException {
System.out.println("正在 向表中添加数据...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
// 创建HTable对象
HTable table = new HTable(configuration, "hbase_demo");
// 创建put对象
Put put = new Put("xiaohei".getBytes()); // xiaohei是 row key
put.addColumn("course".getBytes(), "java".getBytes(), "90".getBytes()); // course是列族
put.addColumn("course".getBytes(), "sql".getBytes(), "99".getBytes()); // java 和sql 都是列
put.addColumn("grade".getBytes(), "one".getBytes(), "1".getBytes());
// 向表中增加数据
table.put(put);
// 关闭table
table.close();
System.out.println("插入成功......");
} /***
* 查询表数据
*
* @throws IOException
*/
private static void cat() throws IOException {
System.out.println("正在 查询表数据...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
// 创建HTable对象
HTable table = new HTable(configuration, "hbase_demo");
// 创建ResultScanner对象
ResultScanner rs = table.getScanner(new Scan());
for (Result r : rs) {
System.out.println("***************************Result Start***************************");
for (Cell cell : r.rawCells()) {
System.out.println("=======================start============================");
System.out.println("RowKey(行键)===>" + Bytes.toString(r.getRow()));
System.out.println("family(列族)===>" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("column(列)===>" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("value(值)===>" + Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println("=========================END==========================");
}
System.out.println("****************************Result END****************************");
}
// 关闭table
table.close();
System.out.println("表数据查询成功...");
} /***
* 查询表中指定RowKey的所有数据
*
* @throws IOException
*/
private static void catRows() throws IOException {
System.out.println("正在 查询表中指定RowKey的所有数据...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
// 创建HTable对象
HTable table = new HTable(configuration, "hbase_demo");
// 创建get对象 获取所有rowkey是xiaohei的所有数据
Get get = new Get(Bytes.toBytes("xiaohei"));
Result result = table.get(get);
for (Cell cell : result.rawCells()) {
System.out.println("=======================start============================");
System.out.println("RowKey(行键)===>" + Bytes.toString(result.getRow()));
System.out.println("family(列族)===>" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("column(列)===>" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("value(值)===>" + Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println("=========================END==========================\n");
}
// 关闭table
table.close();
System.out.println("成功 查询表中指定RowKey的所有数据");
} /***
* 删除表中指定RowKey的所有数据
*
* @throws IOException
*/
private static void delRow() throws IOException {
System.out.println("正在删除表中指定RowKey的所有数据...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
// 创建HTable对象
HTable table = new HTable(configuration, "hbase_demo");
// 创建delete对象
Delete delete = new Delete(Bytes.toBytes("xiaohei"));
table.delete(delete);
// 关闭table
table.close();
System.out.println("成功删除表中指定RowKey的所有数据...");
} /***
* 删除指定列族的指定列
*
* @throws IOException
*/
private static void delFamilyColumn() throws IOException {
System.out.println("正在 删除指定列族的指定列...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
// 创建HTable对象
HTable table = new HTable(configuration, "hbase_demo");
// 创建delete对象
Delete delete = new Delete(Bytes.toBytes("xiaobaibai"));// 指定的
delete.addColumn(Bytes.toBytes("course"), Bytes.toBytes("java"));
table.delete(delete);
// 关闭table
table.close();
System.out.println("成功 删除指定列族的指定列...");
} /***
* 删除指定列族的
*
* @throws IOException
*/
private static void delFamily() throws IOException {
System.out.println("正在 删除指定列族...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
// 创建HTable对象
HTable table = new HTable(configuration, "hbase_demo");
// 创建delete对象
Delete delete = new Delete(Bytes.toBytes("xiaobaibai"));// 指定的
delete.addFamily("course".getBytes());
table.delete(delete);
// 关闭table
table.close();
System.out.println("成功 删除指定列族...");
} /***
* 删除表
*
* @throws MasterNotRunningException
* @throws ZooKeeperConnectionException
* @throws IOException
*/
private static void delTable() throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
System.out.println("正在 删除表...\n");
// 创建一个Configuration对象
Configuration configuration = HBaseConfiguration.create();
// 创建HAdmin对象
HBaseAdmin admin = new HBaseAdmin(configuration);
admin.disableTable("hbase_demo");// 禁用表
admin.deleteTable("hbase_demo");// 删除表
// 关闭admin对象
admin.close();
System.out.println("成功 删除表...");
} }
分享知识-快乐自己:HBase编程的更多相关文章
- 分享知识-快乐自己:揭秘HBase
揭秘HBase: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...
- HBase编程 API入门系列之create(管理端而言)(8)
大家,若是看过我前期的这篇博客的话,则 HBase编程 API入门系列之put(客户端而言)(1) 就知道,在这篇博文里,我是在HBase Shell里创建HBase表的. 这里,我带领大家,学习更高 ...
- 分享知识-快乐自己:揭秘HDFS
揭秘HDFS: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBas ...
- 分享知识-快乐自己:Liunx-大数据(Hadoop)初始化环境搭建
大数据初始化环境搭建: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘 ...
- 分享知识-快乐自己:运行(wordcount)案例
运行 wordcount 案例: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce ...
- 分享知识-快乐自己:大数据(hadoop)环境搭建
大数据 hadoop 环境搭建: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce ...
- HBase编程实例
摘要:在前文中安装了Hbase,通过Hbase shell能够进行一些操作.可是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例. 一.使用Eclipse开发HBase应用程序 1 ...
- HBase编程 API入门系列之delete(客户端而言)(3)
心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. 前面的基础,如下 HBase编程 API入门系列之put(客户端而言)(1) HBase编程 API入门系列之get(客户端而言) ...
- HBase编程 API入门系列之get(客户端而言)(2)
心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. 前面是基础,如下 HBase编程 API入门系列之put(客户端而言)(1) package zhouls.bigdata.Hba ...
随机推荐
- Maven项目Update Project...后JRE System Library会自动变回1.5解决办法
<build> <finalName>pay</finalName> <plugins> <plugin> <groupId>o ...
- 05 linux下编译Memcached
一: linux下编译Memcached(1)先在linux上安装gcc,cmake,autoconf,libtool工具,以后会使用到. 安装命令为:yum install gcc make aut ...
- java代码连接本地redis数据库
关于redis的介绍在这里就不说了.今天主要讲解,如何连接redis.连接之前.必须要做的几点: 一.安装redis.下载服务和客户端,然后 二.启动redis服务. 经过这两步的测通以后.我们只需要 ...
- volatile的含义及使用场景
volatile保证线程间的数据是可见的(共享的),但不保证数据同步 volatile相当于synchronized的弱实现,也就是说volatile实现了类似synchronized的语义,却又没有 ...
- 洛谷P1073 最优贸易==codevs1173 最优贸易
P1073 最优贸易 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一 ...
- 【BZOJ3991】[SDOI2015]寻宝游戏 树链的并+set
[BZOJ3991][SDOI2015]寻宝游戏 Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩 ...
- openCV图像形态学
#include <cv.h> #include <highgui.h> #include <stdio.h> //平滑处理 int main() { IplIma ...
- But what exactly do we mean by "gets closer to"?
https://rdipietro.github.io/friendly-intro-to-cross-entropy-loss/ [将输入转化为输出:概率分布] When we develop a ...
- MySQL合并多行
select id,group_concat(re_id order by re_id separator ",") as re_idfrom tablenamegroup by ...
- 洛谷 P3629 [APIO2010]巡逻
题目在这里 这是一个紫题,当然很难. 我们往简单的想,不建立新的道路时,从1号节点出发,把整棵树上的每条边遍历至少一次,再回到1号节点,会恰好经过每条边两次,路线总长度为$2(n-1)$,根据树的深度 ...