HBase Shell API 操作

创建工程

本实验的环境实在ubuntu18.04下完成,首先在改虚拟机中安装开发工具eclipse。

然后创建Java项目名字叫hbase-test


配置运行环境

在src下创建HBaseDemo类

然后编写init方法和close方法,一个创建与HBASE的连接,一个关闭连接。

/**
* 创建连接返回admin
*/
public static void init() {
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir", "file:///usr/local/hbase/hbase-tmp");
// configuration.set("hbase.zookeeper.quorum", "hadoop02");
try {
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 连接关闭
*/
public static void close() {
try {
if (admin != null) {
admin.close();
}
if (null != connection) {
connection.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}

建表操作

	/**
* 创建表方法
*
* @param myTableName
* @param colFamily
* @throws IOException
*/
public static void createTable(String myTableName, String[] colFamily) throws IOException {
TableName tableName = TableName.valueOf(myTableName);
if (admin.tableExists(tableName)) {
System.out.println("talbe is exists!");
} else {
TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
for (String str : colFamily) {
ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();
tableDescriptor.setColumnFamily(family);
}
admin.createTable(tableDescriptor.build());
}
}

测试:创建student表,列族有score

	public static void main(String[] args) throws IOException {
init();
System.out.print("==================分割线===================");
//创建student表
createTable("student",new String[]{"score"}); close();
}

查看执行结果

查看现有表的名称

	 /**
* 查看已有表
* @throws IOException
*/
public static void listTables() throws IOException {
init();
HTableDescriptor hTableDescriptors[] = admin.listTables();
for(HTableDescriptor hTableDescriptor :hTableDescriptors){
System.out.println(hTableDescriptor.getNameAsString());
}
close();
}

测试:

public static void main(String[] args) throws IOException {
init();
System.out.println("==================分割线===================");
listTables();
System.out.println("==================分割线===================");
close();
}

删除表操作

代码:

	/**
* 删除指定表
* @param tableName 表名
* @throws IOException
*/
public static void deleteTable(String tableName) throws IOException {
init();
TableName tn = TableName.valueOf(tableName);
if (admin.tableExists(tn)) {
admin.disableTable(tn);
admin.deleteTable(tn);
}
close();
}

测试:

public static void main(String[] args) throws IOException {
init();
System.out.println("==================分割线===================");
deleteTable("student");
System.out.println("==================分割线===================");
close();
}

结果

删除指定列操作

代码

    /**
* 删除指定列数据
* @param tableName 表名
* @param rowKey 行键
* @param colFamily 列族名
* @param col 列名
* @throws IOException
*/
public static void deleteRow(String tableName,String rowKey,String colFamily,String col) throws IOException {
init();
Table table = connection.getTable(TableName.valueOf(tableName));
Delete delete = new Delete(rowKey.getBytes());
//删除指定列族的所有数据
//delete.addFamily(colFamily.getBytes());
//删除指定列的数据
delete.addColumn(colFamily.getBytes(), col.getBytes()); table.delete(delete);
table.close();
close();
}

测试

public static void main(String[] args) throws IOException {
init();
System.out.println("==================分割线===================");
deleteRow("student", "zhangsan", "score", "Math");
System.out.println("==================分割线===================");
close();
}

结果 zhangsan行,score列族中的Math列被删除

添加数据

	/**
* 向指定表中插入数据
*
* @param tableName
* @param rowKey
* @param colFamily
* @param col
* @param val
* @throws IOException
*/
public static void insertData(String tableName, String rowKey, String colFamily, String col, String val)
throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Put put = new Put(rowKey.getBytes());
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
table.put(put);
table.close();
}

向student表中添加三条数据,分别是zhangsan的英语成绩,数学成绩和计算机成绩。

	public static void main(String[] args) throws IOException {
init();
System.out.print("==================分割线==================="); //插入三条数据
insertData("student","zhangsan","score","English","69");
insertData("student","zhangsan","score","Math","86");
insertData("student","zhangsan","score","Computer","77"); close();
}

测试结果

查看数据

/**
* 获取指定表中ceil数据
*
* @param tableName
* @param rowKey
* @param colFamily
* @param col
* @throws IOException
*/
public static void getData(String tableName, String rowKey, String colFamily, String col) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Get get = new Get(rowKey.getBytes());
get.addColumn(colFamily.getBytes(), col.getBytes());
Result result = table.get(get);
System.out.println(tableName+"表,"+colFamily+"列族,"+col+"的值是:"+new String(result.getValue(colFamily.getBytes(), col == null ? null : col.getBytes())));
table.close();
}

查看张三英语的 成绩

	public static void main(String[] args) throws IOException {
init();
System.out.println("==================分割线==================="); getData("student","zhangsan", "score","English"); close();
}

控制台输出结果:

Java API 操作HBase Shell的更多相关文章

  1. HBase 6、用Phoenix Java api操作HBase

    开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hb ...

  2. Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结

    转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbas ...

  3. linux 下通过过 hbase 的Java api 操作hbase

    hbase版本:0.98.5 hadoop版本:1.2.1 使用自带的zk 本文的内容是在集群中创建java项目调用api来操作hbase,主要涉及对hbase的创建表格,删除表格,插入数据,删除数据 ...

  4. hadoop2-HBase的Java API操作

    Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase. 项目结构如下: 我使用的Hbase的版本是 hbase-0.98.9-hadoop ...

  5. 使用Java API操作HDFS文件系统

    使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...

  6. 【Hbase三】Java,python操作Hbase

    Java,python操作Hbase 操作Hbase python操作Hbase 安装Thrift之前所需准备 安装Thrift 产生针对Python的Hbase的API 启动Thrift服务 执行p ...

  7. java api操作

    java api操作 导入开发包 将hbase安装包中lib下包导入java项目   创建表   Configuration conf = HBaseConfiguration.create(); c ...

  8. hive-通过Java API操作

    通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 package org.admln.hive; import java.sql.SQLException; i ...

  9. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

随机推荐

  1. JApiDocs(自动生成接口文档神器)

    JApiDocs教程 前言 作为一名优秀的程序员来说,由于涉及到要与前端进行对接,所以避免不了的就是写接口文档.写完接口文档,一旦代码返回结果,参数等出现变动,接口文档还得随之改动,十分麻烦,违背了我 ...

  2. SpringBoot 拦截器和自定义注解判断请求是否合法

    应用场景举例: 当不同身份的用户请求一个接口时,用来校验用户某些身份,这样可以对单个字段数据进行精确权限控制,具体看代码注释 自定义注解 /** * 对比请求的用户身份是否符合 * @author l ...

  3. 【原创】WPF TreeView带连接线样式的优化(WinFrom风格)

    一.前言 之前查找WPF相关资料的时候,发现国外网站有一个TreeView控件的样式,是WinFrom风格的,样式如下,文章链接:https://www.codeproject.com/tips/67 ...

  4. Greenplum 性能优化之路 --(一)分区表

    一.什么是分区表 分区表就是将一个大表在物理上分割成若干小表,并且整个过程对用户是透明的,也就是用户的所有操作仍然是作用在大表上,不需要关心数据实际上落在哪张小表里面.Greenplum 中分区表的原 ...

  5. Ajax相关基础知识总结

    URL:统一资源定位符 网络的七层协议:网卡 驱动  网络层(ip)  传输层(tcp udp) 会话层( )  应用层(http.) restful表征状态转移(一种表征架构) CURD 增删改查 ...

  6. Eureka系列(二) 服务注册Server端具体实现

    服务注册 Server端流程   我们先看下面这张图片,这张图片简单描述了下我们EurekaClient 在调用EurekaServer 提供的服务注册Http接口,Server端实现接口执行的大致流 ...

  7. PHP 直接使用html输出excel

    1 <?php 2 header("Cache-Control:public"); 3 header("Pragma:public"); 4 5 head ...

  8. LightningChart -XY 2D图表特性

    LightningChart -XY 2D图表--2D图表 系列类型:抽样数据(离散数据).点线.任意形式的点线.面积.高低.多边形.股票系列(蜡烛图).条.带.恒定线.强度网格和强度网强度系列能够渲 ...

  9. Python开发的面试准备

    1.is和==的区别: is比较的是id,对象的内存地址 = =比较的是值 2.按字典中的value值进行排序 sorted(dict.items(), key = lambda x: x[1]) 3 ...

  10. JavaScript实现自定义右键菜单

    JavaScript实现自定义右键菜单,思路如下: 1. 屏蔽默认右键事件: 2. 隐藏自定义的菜单模块(如div.ul等): 3. 右键点击特定或非特定区域,显示菜单模块: 4. 再次点击,隐藏菜单 ...