Hbase基础操作Demo(Java版)

一、前置条件

  • HBase服务:【快捷部署】023_HBase(2.3.6)
  • 开发环境:Java(1.8)、Maven(3)、IDE(Idea 或 Eclipse)

HBase-Java代码示例.png



二、相关代码

代码结构如上图中①和②

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.huawei</groupId><artifactId>HbaseAPI</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><repositories><repository><id>huaweicloud2</id><name>huaweicloud2</name><url>https://mirrors.huaweicloud.com/repository/maven/</url></repository><repository><id>huaweicloud1</id><name>huaweicloud1</name><url>https://repo.huaweicloud.com/repository/maven/huaweicloudsdk/</url></repository></repositories><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.8.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.8.3</version></dependency><!--hbase--><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>1.4.13</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.4.13</version></dependency></dependencies><build><finalName>HbaseAPI</finalName><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>assembly</goal></goals></execution></executions></plugin></plugins></build>
</project>

Config4HBaseDemo(公共配置类)
package com.toc.demo.hbase;
/*** 公共配置类* @author cxy@toc* @date  2024-05-07**/public class Config4HBaseDemo {public static String zkQuorum = "127.0.0.1";public static String getZkQuorum(String[] args) {if (args!=null && args.length > 0) {System.out.println("接收参数:" + args[0]);zkQuorum = args[0];}return zkQuorum;}
}

CreateTable(创建Hbase表)
package com.toc.demo.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;import java.io.IOException;/*** 创建Hbase表* @author cxy@toc* @date  2024-05-07**/public class CreateTable {public static void main(String[] args) throws IOException {//链接hbaseConfiguration conf = HBaseConfiguration.create();//这里的zookeeper地址要改为自己集群的zookeeper地址conf.set("hbase.zookeeper.quorum",Config4HBaseDemo.getZkQuorum(args));conf.set("hbase.zookeeper.property.clientPort", "2181");Connection connection = ConnectionFactory.createConnection(conf);Admin admin = connection.getAdmin();TableName tableName = TableName.valueOf("users");if (!admin.tableExists(tableName)){//创建表描述器HTableDescriptor htd = new HTableDescriptor(tableName);htd.addFamily(new HColumnDescriptor("f"));admin.createTable(htd);System.out.println(tableName+"表创建成功");}else {System.out.println(tableName+"表已经存在");}}
}

DeleteData(删除数据)
package com.toc.demo.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;/*** 删除数据* @author cxy@toc* @date  2024-05-07**/public class DeleteData {public static void main(String[] args) throws IOException {//链接hbaseConfiguration conf = HBaseConfiguration.create();//这里的zookeeper地址要改为自己集群的zookeeper地址conf.set("hbase.zookeeper.quorum",Config4HBaseDemo.getZkQuorum(args));conf.set("hbase.zookeeper.property.clientPort", "2181");Connection connection = ConnectionFactory.createConnection(conf);Table hTable = connection.getTable(TableName.valueOf("users"));Delete delete = new Delete(Bytes.toBytes("row5"));delete.addColumn(Bytes.toBytes("f"),Bytes.toBytes("id"));//直接删除family,将所有row5的信息全部删除delete.addFamily(Bytes.toBytes("f"));hTable.delete(delete);System.out.println("删除成功");}
}

DeleteTable(删除表)
package com.toc.demo.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;import java.io.IOException;/*** 删除表* @author cxy@toc* @date  2024-05-07**/public class DeleteTable {public static void main(String[] args) throws IOException {//链接hbaseConfiguration conf = HBaseConfiguration.create();//这里的zookeeper地址要改为自己集群的zookeeper地址conf.set("hbase.zookeeper.quorum",Config4HBaseDemo.getZkQuorum(args));conf.set("hbase.zookeeper.property.clientPort", "2181");Connection connection = ConnectionFactory.createConnection(conf);Admin hBaseAdmin = connection.getAdmin();TableName tableName = TableName.valueOf("users");if (hBaseAdmin.tableExists(tableName)) {//判断表的状态if(hBaseAdmin.isTableAvailable(tableName)) {hBaseAdmin.disableTable(tableName);}hBaseAdmin.deleteTable(tableName);System.out.println("删除表"+tableName+"成功");}else {System.out.println(tableName+"表不存在");}}
}

DescTable(查看表结构)
package com.toc.demo.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;import java.io.IOException;/*** 查看表结构* @author cxy@toc* @date  2024-05-07**/
public class DescTable {public static void main(String[] args) throws IOException {//链接hbaseConfiguration conf = HBaseConfiguration.create();//这里的zookeeper地址要改为自己集群的zookeeper地址conf.set("hbase.zookeeper.quorum",Config4HBaseDemo.getZkQuorum(args));conf.set("hbase.zookeeper.property.clientPort", "2181");Connection connection = ConnectionFactory.createConnection(conf);Admin hBaseAdmin = connection.getAdmin();TableName tableName = TableName.valueOf("users");if(hBaseAdmin.tableExists(tableName)) {HTableDescriptor htd = hBaseAdmin.getTableDescriptor(tableName);System.out.println("查看"+tableName+"表结构");System.out.println(htd);}else {System.out.println(tableName+"表不存在");}}
}

GetData(获取数据)
package com.toc.demo.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;/*** 获取数据* @author cxy@toc* @date  2024-05-07**/public class GetData {public static void main(String[] args) throws IOException {//链接hbaseConfiguration conf = HBaseConfiguration.create();//这里的zookeeper地址要改为自己集群的zookeeper地址conf.set("hbase.zookeeper.quorum",Config4HBaseDemo.getZkQuorum(args));conf.set("hbase.zookeeper.property.clientPort", "2181");Connection connection = ConnectionFactory.createConnection(conf);Table hTable = connection.getTable(TableName.valueOf("users"));Get get = new Get(Bytes.toBytes("row1"));Result result = hTable.get(get);byte[] family = Bytes.toBytes("f");byte[] buf = result.getValue(family,Bytes.toBytes("id"));System.out.println("id="+Bytes.toString(buf));buf = result.getValue(family,Bytes.toBytes("age"));System.out.println("age="+Bytes.toInt(buf));buf = result.getValue(family,Bytes.toBytes("name"));System.out.println("name="+Bytes.toString(buf));buf = result.getRow();System.out.println("rowkey="+Bytes.toString(buf));}
}

PutData(插入数据)
package com.toc.demo.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
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;/*** 插入数据* @author cxy@toc* @date  2024-05-07**/public class PutData {public static void main(String[] args) throws IOException {//链接hbaseConfiguration conf = HBaseConfiguration.create();//这里的zookeeper地址要改为自己集群的zookeeper地址conf.set("hbase.zookeeper.quorum",Config4HBaseDemo.getZkQuorum(args));conf.set("hbase.zookeeper.property.clientPort", "2181");Connection connection = ConnectionFactory.createConnection(conf);Table hTable = connection.getTable(TableName.valueOf("users"));//插入一条Put put= new Put(Bytes.toBytes("row1"));put.addColumn(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("1"));put.addColumn(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("张三"));put.addColumn(Bytes.toBytes("f"),Bytes.toBytes("age"),Bytes.toBytes(27));put.addColumn(Bytes.toBytes("f"),Bytes.toBytes("phone"),Bytes.toBytes("18600000000"));put.addColumn(Bytes.toBytes("f"),Bytes.toBytes("emil"),Bytes.toBytes("123654@163.com"));hTable.put(put);//插入多个Put put1= new Put(Bytes.toBytes("row2"));put1.addColumn(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("2"));put1.addColumn(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("李四"));Put put2= new Put(Bytes.toBytes("row3"));put2.addColumn(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("3"));put2.addColumn(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("王五"));Put put3= new Put(Bytes.toBytes("row4"));put3.addColumn(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("4"));put3.addColumn(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("赵六"));List<Put> list = new ArrayList<Put>();list.add(put1);list.add(put2);list.add(put3);hTable.put(list);//检测put,条件成功就插入,要求RowKey是一样的Put put4 = new Put(Bytes.toBytes("row5"));put4.addColumn(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("5"));hTable.checkAndPut(Bytes.toBytes("row5"),Bytes.toBytes("f"),Bytes.toBytes("id"),null,put4);System.out.println("插入成功");}
}

ScanData(扫描遍历数据)
package com.toc.demo.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.NavigableMap;/*** 扫描遍历数据* @author cxy@toc* @date  2024-05-07**/public class ScanData {public static void main(String[] args) throws IOException {//链接hbaseConfiguration conf = HBaseConfiguration.create();//这里的zookeeper地址要改为自己集群的zookeeper地址conf.set("hbase.zookeeper.quorum",Config4HBaseDemo.getZkQuorum(args));conf.set("hbase.zookeeper.property.clientPort", "2181");Connection connection = ConnectionFactory.createConnection(conf);Table hTable = connection.getTable(TableName.valueOf("users"));Scan scan = new Scan();//增加起始rowkeyscan.withStartRow(Bytes.toBytes("row1"));scan.withStopRow(Bytes.toBytes("row5"));//增加过滤filterFilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);byte[][] prefixes = new byte[2][];prefixes[0] = Bytes.toBytes("id");prefixes[1] = Bytes.toBytes("name");MultipleColumnPrefixFilter mcpf = new MultipleColumnPrefixFilter(prefixes);list.addFilter(mcpf);scan.setFilter(list);ResultScanner rs = hTable.getScanner(scan);Iterator<Result> iter = rs.iterator();while (iter.hasNext()){Result result = iter.next();printResult(result);}}/*打印Result对象*/static void printResult(Result result){System.out.println("***********"+Bytes.toString(result.getRow()));NavigableMap<byte[],NavigableMap<byte[], NavigableMap<Long,byte[]>>> map = result.getMap();for(Map.Entry<byte[],NavigableMap<byte[],NavigableMap<Long,byte[]>>> entry: map.entrySet()){String family = Bytes.toString(entry.getKey());for(Map.Entry<byte[],NavigableMap<Long,byte[]>> columnEntry :entry.getValue().entrySet()){String column = Bytes.toString(columnEntry.getKey());String value = "";if("age".equals(column)){value=""+Bytes.toInt(columnEntry.getValue().firstEntry().getValue());}else {value=""+Bytes.toString(columnEntry.getValue().firstEntry().getValue());}System.out.println(family+":"+column+":"+value);}}}
}



三、如何使用

  1. Maven打包
    Eclipse:项目上右键 Run As -> Maven Install进行打包
    Idea:Maven工具栏 -> 生命周期 -> install
    打包好的jar如上图中的③

  2. 上传jar到Hadoop(yarn)服务器
    scp 你的target/HbaseAPI-jar-with-dependencies.jar root@xxx.xxx.xxx.xxx:/root

  3. 登录到服务器,并查看上传的文件

ssh root@xxx.xxx.xxx.xxx
ls
  1. 执行命令,查看效果
# 将{ZK的内网IP}改为zookeeper的ip,如过就是本机可以不写,默认是127.0.0.1
yarn jar HbaseAPI-jar-with-dependencies.jar com.toc.demo.hbase.CreateTable {ZK的内网IP}
yarn jar HbaseAPI-jar-with-dependencies.jar com.toc.demo.hbase.DescTable {ZK的内网IP}
yarn jar HbaseAPI-jar-with-dependencies.jar com.toc.demo.hbase.PutData {ZK的内网IP}
yarn jar HbaseAPI-jar-with-dependencies.jar com.toc.demo.hbase.GetData {ZK的内网IP}
yarn jar HbaseAPI-jar-with-dependencies.jar com.toc.demo.hbase.ScanData {ZK的内网IP}
yarn jar HbaseAPI-jar-with-dependencies.jar com.toc.demo.hbase.DeleteData {ZK的内网IP}
yarn jar HbaseAPI-jar-with-dependencies.jar com.toc.demo.hbase.DeleteTable {ZK的内网IP}

更多详细操作可参见华为云沙箱实验:https://lab.huaweicloud.com/experiment-detail_1779


往期精彩内容推荐

云原生:10分钟了解一下Kubernetes架构
云原生:5分钟了解一下Kubernetes是什么
「快速部署」第二期清单
「快速部署」第一期清单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IO—消息队列+管道

使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式: 当键盘按ctrlc的时候&#xff0c;切换消息读取方式&#xff0c;一般情况为读取指定编号的消息&#xff0c;按ctr1c之后&#xff0c;指定的编号不读取&#xff0c;读取其他所有编号的消息 wftok.c …

vue项目中使用websocke即时通讯实现系统公告实时获取并提醒

一、使用场景 发布者设置需要发布的公告内容、公告接收用户和发布时间&#xff0c;到达发布时间时及时通知提醒已登录系统用户&#xff0c;使用websocke来实现前端与服务器保持长连接&#xff0c;以便实时过去公告信息。 WebSocket是一种在单个TCP连接上进行全双工通信的协议…

调用Mertc的接口

概述 metaRTC5.0版本 API进行了重构&#xff0c;本篇文章将介绍webrtc传输调用流程和例子。 metaRTC5.0版本提供了C和纯C两种接口。 ICE设置 iceCandidateType参数可以在配置文件yang_config.ini中配置&#xff0c;也可以在程序中赋值。 iceCandidateType0 //0:host 1:stun 2…

2024最新大厂C++面试真题合集,大厂面试百日冲刺 bay9

腾讯实习 指针常量和常量指针 常量指针&#xff08;const Type* ptr&#xff09;&#xff1a;指针指向的内容不能被改变&#xff0c;但指针本身可以改变指向。 指针常量&#xff08;Type* const ptr&#xff09;&#xff1a;指针自身的值即内存地址不能改变&#xff0c;但指向…

draw.io 网页版二次开发(1):源码下载和环境搭建

目录 一 说明 二 源码地址以及下载 三 开发环境搭建 1. 前端工程地址 2. 配置开发环境 &#xff08;1&#xff09;安装 node.js &#xff08;2&#xff09;安装 serve 服务器 3. 运行 四 最后 一 说明 应公司项目要求&#xff0c;需要对draw.io进行二次开发&…

电商后台的秘密:通过API接口提取商品信息

在电子商务的运营中&#xff0c;后台管理是核心环节&#xff0c;而API接口则是高效管理商品信息的关键。API允许商家直接与电商平台的数据库进行交互&#xff0c;实现数据的自动化提取和更新。 一、电商后台管理的核心作用 电商后台管理系统是商家进行商品展示、订单处理、库…

存储过程、触发器和函数

存储过程、触发器和函数在数据库中具有重要的作用&#xff0c;它们可以带来以下几个方面的重要性&#xff1a; 数据一致性和完整性&#xff1a; 触发器和存储过程可以用于实现数据一致性和完整性约束。通过在数据库操作&#xff08;如插入、更新、删除&#xff09;发生时自动执…

盛最多水的容器(双指针)

解题思路&#xff1a; 1&#xff0c;暴力解法&#xff08;超时&#xff09; 我们可以使用两层for循环进行遍历。找到那个最大的面积即可&#xff0c;这里我就不写代码了&#xff0c;因为写了也是超时。 2&#xff0c;双指针法 先定义两个指针一个在最左端&#xff0c;一个在…

C++ 派生类的引入与特性

一 继承与派生 从上面的例子可以看出&#xff1a; 继承&#xff1a;一旦指定了某种事物父代的本质特征&#xff0c;那么它的子代将会自动具有哪些性质。这就是一种朴素的可重用的概念。 派生&#xff1a;而且子代可以拥有父代没有的特性&#xff0c;这是可扩充的概念。 1 C 的…

Today At Apple 2024.04.15 Phone15 入门

官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载 Apple Store&#xff08;不是app store&#xff09;&#xff0c;点击课程预约笔记&#xff1a;Today At Apple Notes果粉加群 &am…

Mybatis进阶详细用法

目录 条件构造器 案例 自定义SQL 案例 Service接口 案例 综合案例 条件构造器 案例 Testvoid testQueryMapper() {// 创建 QueryWrapper 实例QueryWrapper<User> queryWrapper new QueryWrapper<>();queryWrapper.select("id," "username,&…

uniapp经验

uniapp-ts模版在前端/vue文件夹下 npx dcloudio/uvmlatest 安装依赖 之后tsconfig.json会报错&#xff0c;可以在tsconfig.json文件中"compilerOptions"配置项内添加"ignoreDeprecations": "5.0"&#xff0c;解决。 ### 编译和运行 uni-app 项目…

Postman基础功能-变量设置与使用

如果你因失去太阳而流泪&#xff0c;那你也将失去群星了。大家好&#xff0c;在 API 测试的广袤世界中&#xff0c;Postman 犹如一座闪耀的灯塔&#xff0c;为我们指引着前行的方向。而其中的全局变量、集合变量和环境变量&#xff0c;更是如同隐藏的宝藏&#xff0c;蕴含着巨大…

以太网网络变压器型号

Hqst华强盛导读&#xff1a;以太网网络变压器的型号通常由一系列数字和字母组成&#xff0c;其中包括以下信息&#xff1a; 额定电压&#xff1a;表示变压器的额定输入和输出电压&#xff0c;通常以伏特&#xff08;V&#xff09;为单位。 额定电流&#xff1a;表示变压器的额定…

0513_IO7

练习1&#xff1a; 使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式&#xff1a; 当键盘按ctrlc的时候&#xff0c;切换消息读取方式&#xff0c;一般情况为读取指定编号的消息&#xff0c;按ctrlc之后&#xff0c;指定的编号不读取&#xff0c;读取…

孩子多大可以接触python?学习python的好处

孩子接触Python的年龄并没有明确的界限&#xff0c;一般来说&#xff0c;6岁以上的孩子可以开始学习Python编程。虽然Python是一门高级编程语言&#xff0c;但它的语法简单易懂&#xff0c;适合初学者入门。通过学习Python编程&#xff0c;孩子可以培养逻辑思维、创造力和解决问…

电商秒杀系统设计

业务流程 系统架构 系统挑战 高并发:秒杀活动会在短时间内吸引大量用户,系统需要能够处理高峰时期的大量并发请求 库存同步:在秒杀中,面临的一个严重系统挑战是如何确保在数以万计的用户同时抢购有限的商品时,如何正确、实时地扣减库存,以防止超卖现象。 防止恶意抢购和…

前端 JS 经典:JS 基础类型和 typeof

前言&#xff1a;JS 基础类型就 8 种&#xff0c;这是官方确定的&#xff0c;毋庸置疑。其中原始类型 7 种&#xff0c;对象类型 1 种。而 typeof 关键字是用来判断数据是属于什么类型的。 1. 原始类型 Number、Boolean、String、BigInt、symbol、Undefined、null typeof 18…

猫头虎分享已解决Error || ERROR: Failed building wheel for XXX

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

python设计模式---观察者模式

观察者模式是一种行为设计模式&#xff0c;用于定义对象之间的一对多依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;所有依赖它的对象都会得到通知并自动更新。 from abc import ABC, abstractmethod from typing import Listclass Observable:def __init__(sel…