热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HBase系列4常用API

@二.JavaAPI实操备注:我使用的CDH6.3.1版本,Hbase版本2.1.0cdh6.3.12.1pom文件配置org.apache.hbasehbaseclient2.1

Table of Contents

  • 一. Hbase常用API介绍
  • 二. Java API实操
    • 2.1 pom文件配置
    • 2.2 API类
    • 2.3 测试类
  • FAQ
    • 1. HBaseAdmin 调用错误
    • 2. 类的问题
    • 3. 创建HTable失败
  • 参考:


一. Hbase常用API介绍

image.png


二. Java API实操

备注:

我使用的CDH 6.3.1版本,Hbase版本 2.1.0-cdh6.3.1


2.1 pom文件配置


org.apache.hbase
hbase-client
2.1.0


org.apache.hbase
hbase-server
2.1.0


2.2 API类

hbase_demo1

package com.bigdata.study.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class hbase_demo1 {
HBaseAdmin hBaseAdmin = null;
Connection cOnnection= null;
Configuration cOnfiguration= null;
HTable hTable = null;
hbase_demo1() {
cOnfiguration= HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "10.31.1.124,10.31.1.125,10.31.1.126");
configuration.set("hbase.zookeeper.property.clientPort", "2181");
try {
cOnnection= ConnectionFactory.createConnection(configuration);
hBaseAdmin = (HBaseAdmin) connection.getAdmin();
//HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
} catch (IOException e) {
e.printStackTrace();
}
}
private static hbase_demo1 instance = null;
public static synchronized hbase_demo1 getInstance(){
if (instance == null){
instance = new hbase_demo1();
}
return instance;
}
public boolean isTableExist(String tableName) throws IOException {
try {
HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
} catch (IOException e) {
e.printStackTrace();
}
return hBaseAdmin.tableExists(TableName.valueOf(tableName));
}
// 创建表
public void createTable(String tableName, String... columnFamily) throws IOException {
// 判断表是否存在
if ( isTableExist(tableName) ){
System.out.println("表" + tableName + "已存在");
// System.exit(0);
} else {
// 创建表属性对象,表名需要转字节
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
// 创建多个列族
for(String f: columnFamily){
tableDescriptor.addFamily(new HColumnDescriptor(f));
}
// 创建表
hBaseAdmin.createTable(tableDescriptor );
System.out.println("创建" + tableName + "表成功");
}
}
// 删除表
public void dropTable(String tableName) throws IOException {
if (isTableExist(tableName)){
hBaseAdmin.disableTable(TableName.valueOf(tableName));
hBaseAdmin.deleteTable(TableName.valueOf(tableName));
System.out.println("表" + tableName + "删除成功");
} else {
System.out.println("表" + tableName + "不存在!");
}
}
// 向表中插入数据
public void addRowData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException {
try {
HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
// 向表中插入数据
// 像Put 对象中封装数据
Put put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
hTable.put(put);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("插入数据成功");
}
// 删除多行数据
public void deleteMultiRow(String tableName, String... rows) throws IOException {
//HTable hTable = new HTable(configuration, tableName);
List deleteList = new ArrayList();
for (String row : rows) {
Delete delete = new Delete(Bytes.toBytes(row));
deleteList.add(delete);
}
try {
HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
hTable.delete(deleteList);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取所有数据
public void getAllRows(String tableName) throws IOException{
//HTable hTable = new HTable(configuration, tableName);
// 得到用于扫描region的对象
Scan scan = new Scan();
// 使用HTable 得到 resultcanner实现类的对象
try {
HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
ResultScanner resultScanner = hTable.getScanner(scan);
for (Result result : resultScanner) {
Cell[] cells = result.rawCells();
for (Cell cell : cells){
// 得到rowkey
System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell)));
// 得到列族
System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取某一行数据
public void getRow(String tableName, String rowKey) throws IOException{
//HTable table = new HTable(configuration, tableName);
Get get = new Get(Bytes.toBytes(rowKey));
// get.setMaxVersions(); 显示所有版本
// get.setTimeStamp(); 显示指定时间的版本
try {
HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
Result result = hTable.get(get);
for (Cell cell : result.rawCells()) {
System.out.println("行键:" + Bytes.toString(result.getRow()));
System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println("时间戳:" + cell.getTimestamp());
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取某一行指定 "列族:列" 的数据
public void getRowQualifier(String tableName, String rowKey, String family, String qualifier) throws IOException{
//HTable table = new HTable(configuration, tableName);
Get get = new Get(Bytes.toBytes(rowKey));
get.setMaxVersions();
//get.setTimestamp();
get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
try {
HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
Result result = hTable.get(get);
for (Cell cell : result.rawCells()) {
System.out.println("行键:" + Bytes.toString(result.getRow()));
System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
//System.out.println("时间戳:" + cell.getTimestamp());
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void closeConn(){
if (connection!=null){
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

2.3 测试类

hbase_test1

package com.bigdata.study.hbase;
import java.io.IOException;
public class hbase_test1 {
public static void main(String[] args) throws IOException {
hbase_demo1 hd1 = new hbase_demo1();
// 删除表
hd1.dropTable("java_test1");
// 创建表
hd1.createTable("java_test1","info1","info2");
// 像表中插入数据
hd1.addRowData("java_test1","1001","info1","name","詹姆斯");
hd1.addRowData("java_test1","1001","info1","sex","男");
hd1.addRowData("java_test1","1001","info1","age","33");
hd1.addRowData("java_test1","1001","info2","job","BasketBall");
hd1.addRowData("java_test1","1002","info1","name","杜兰特");
hd1.addRowData("java_test1","1002","info1","sex","男");
hd1.addRowData("java_test1","1002","info1","age","32");
hd1.addRowData("java_test1","1002","info2","job","BasketBall");
// 获取所有数据
hd1.getAllRows("java_test1");
// 获取某一行数据
hd1.getRow("java_test1","1001");
// 获取某一行指定 “列族:列” 的数据
hd1.getRowQualifier("java_test1","1001","info1","name");
// 删除多行数据
hd1.deleteMultiRow("java_test1","1001","1002");
// 删除表
hd1.dropTable("java_test1");
// 关闭连接
hd1.closeConn();
}
}

测试记录:

image.png

image.png


FAQ

1. HBaseAdmin 调用错误

报错如下:

‘HBaseAdmin(org.apache.hadoop.hbase.client.ClusterConnection)’ is not public in ‘org.apache.hadoop.hbase.client.HBaseAdmin’. Cannot be accessed from outside package

参考博客:

https://blog.csdn.net/weixin_40126236/article/details/106715357

之前写的是HBase的老版本的代码,需要同步修改。


2. 类的问题

运行程序报错如下:

java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberos

参考博客:

https://blog.csdn.net/yuyinghua0302/article/details/93755774

原来是Hbase已经集成有hadoop-comm的jar包,pom文件无需配置hadoop-comm,删除即可


3. 创建HTable失败

老版本写法:

HTable hTable = new HTable(configuration, tableName);

新版本写法:

try {
HTable hTable=(HTable) connection.getTable(TableName.valueOf(tableName));
} catch (IOException e) {
e.printStackTrace();
}

参考:


  1. https://blog.csdn.net/weixin_40126236/article/details/106715357

  2. https://blog.csdn.net/zhangshk_/article/details/83690790

  3. https://blog.csdn.net/yuyinghua0302/article/details/93755774



推荐阅读
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
author-avatar
mobiledu2502857723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有