当前位置: 首页 > news >正文

HBase Java基础操作

Apache HBase 是一个开源的、分布式的、可扩展的大数据存储系统,它基于 Google 的 Bigtable 模型。使用 Java 操作 HBase 通常需要借助 HBase 提供的 Java API。以下是一个基本的示例,展示了如何在 Java 中连接到 HBase 并执行一些基本的操作,如创建表、插入数据、扫描表以及删除数据。

一、前提条件

HBase 安装和配置:确保 HBase 已经在你的环境中正确安装和配置。
Hadoop 环境:HBase 依赖于 Hadoop,因此 Hadoop 也需要正确安装和配置。
HBase Java 客户端库:你需要将 HBase 的客户端库添加到你的 Java 项目中。通常,这可以通过 Maven 或 Gradle 来完成。

二、Maven 依赖

使用 Maven 来管理项目依赖,可以在 pom.xml 文件中添加以下依赖:

<dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.4.9</version> <!-- 请根据你的 HBase 版本选择合适的版本 --></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.1</version> <!-- 请根据你的 Hadoop 版本选择合适的版本 --></dependency>
</dependencies>

三、建立连接

在使用HBase Java API之前,首先需要建立与HBase的连接。这通常涉及到配置HBase的连接信息,如Zookeeper的地址和端口等。

Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "your_zookeeper_quorum"); // 设置Zookeeper的地址
configuration.set("hbase.zookeeper.property.clientPort", "your_zookeeper_port"); // 设置Zookeeper的端口
Connection connection = ConnectionFactory.createConnection(configuration);

四、对表的操作

  1. 创建表
    创建表需要指定表名和列族。HBase中的表是由列族构成的,每个列族下可以包含多个列。
Admin admin = connection.getAdmin();
if (!admin.tableExists(TableName.valueOf("your_table_name"))) {HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("your_table_name"));tableDescriptor.addFamily(new HColumnDescriptor("your_column_family"));admin.createTable(tableDescriptor);
}
  1. 删除表
    在删除表之前,需要先禁用该表。
if (admin.tableExists(TableName.valueOf("your_table_name"))) {admin.disableTable(TableName.valueOf("your_table_name"));admin.deleteTable(TableName.valueOf("your_table_name"));
}
  1. 判断表是否存在
boolean exists = admin.tableExists(TableName.valueOf("your_table_name"));
  1. 列出所有表
HTableDescriptor[] tables = admin.listTables();
for (HTableDescriptor table : tables) {System.out.println(table.getNameAsString());
}

五、对数据的操作

  1. 添加数据
    添加数据需要指定表名、行键、列族、列名以及对应的值。
Table table = connection.getTable(TableName.valueOf("your_table_name"));
Put put = new Put(Bytes.toBytes("your_row_key"));
put.addColumn(Bytes.toBytes("your_column_family"), Bytes.toBytes("your_column"), Bytes.toBytes("your_value"));
table.put(put);
table.close();
  1. 获取数据
    获取数据可以使用Get类来指定要获取的行键和列。
Table table = connection.getTable(TableName.valueOf("your_table_name"));
Get get = new Get(Bytes.toBytes("your_row_key"));
get.addColumn(Bytes.toBytes("your_column_family"), Bytes.toBytes("your_column"));
Result result = table.get(get);
byte[] value = result.getValue(Bytes.toBytes("your_column_family"), Bytes.toBytes("your_column"));
String valueStr = Bytes.toString(value);
table.close();
  1. 扫描数据
    扫描数据可以使用Scan类来指定要扫描的表、列族、列等条件。
Scan scan = new Scan();
scan.setCaching(500); // 设置每次扫描的缓存大小
scan.setCacheBlocks(false); // 设置是否缓存数据块
scan.addFamily(Bytes.toBytes("your_column_family")); // 添加要扫描的列族ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {// 处理扫描结果byte[] rowKey = result.getRow();String rowKeyStr = Bytes.toString(rowKey);// 获取指定列的值byte[] value = result.getValue(Bytes.toBytes("your_column_family"), Bytes.toBytes("your_column"));String valueStr = Bytes.toString(value);// 输出结果System.out.println("RowKey: " + rowKeyStr + ", Value: " + valueStr);
}
scanner.close();
table.close();
  1. 删除数据
    删除数据需要指定表名、行键以及要删除的列(可选)。
Table table = connection.getTable(TableName.valueOf("your_table_name"));
Delete delete = new Delete(Bytes.toBytes("your_row_key"));
delete.addColumn(Bytes.toBytes("your_column_family"), Bytes.toBytes("your_column")); // 可选,指定要删除的列
table.delete(delete);
table.close();

六、关闭连接

在完成所有操作后,需要关闭与HBase的连接以释放资源。

connection.close();

七、示例代码

以下是一个完整的 Java 示例代码,展示了如何连接到 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;public class HBaseExample {public static void main(String[] args) {// 创建 HBase 配置对象Configuration config = HBaseConfiguration.create();config.set("hbase.zookeeper.quorum", "localhost"); // 设置 Zookeeper 地址config.set("hbase.zookeeper.property.clientPort", "2181"); // 设置 Zookeeper 端口// 创建连接对象try (Connection connection = ConnectionFactory.createConnection(config);Admin admin = connection.getAdmin()) {// 创建表createTable(admin, "my_table", "my_column_family");// 插入数据insertData(connection, "my_table", "row1", "my_column_family", "column1", "value1");// 扫描表scanTable(connection, "my_table");// 删除数据deleteData(connection, "my_table", "row1", "my_column_family", "column1");// 删除表(可选)// deleteTable(admin, "my_table");} catch (IOException e) {e.printStackTrace();}}private static void createTable(Admin admin, String tableName, String columnFamily) throws IOException {TableName table = TableName.valueOf(tableName);if (!admin.tableExists(table)) {HTableDescriptor tableDescriptor = new HTableDescriptor(table);HColumnDescriptor columnDescriptor = new HColumnDescriptor(columnFamily);tableDescriptor.addFamily(columnDescriptor);admin.createTable(tableDescriptor);System.out.println("Table created: " + tableName);} else {System.out.println("Table already exists: " + tableName);}}private static void insertData(Connection connection, String tableName, String rowKey, String columnFamily, String column, String value) throws IOException {TableName table = TableName.valueOf(tableName);try (Table table = connection.getTable(table)) {Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));table.put(put);System.out.println("Data inserted: " + rowKey + ", " + column + " = " + value);}}private static void scanTable(Connection connection, String tableName) throws IOException {TableName table = TableName.valueOf(tableName);try (Table table = connection.getTable(table);ResultScanner scanner = table.getScanner(new Scan())) {for (Result result : scanner) {System.out.println("Scanned row: " + Bytes.toString(result.getRow()));result.getNoVersionMap().forEach((family, familyMap) -> {familyMap.forEach((qualifier, value) -> {System.out.println("Family: " + Bytes.toString(family) + ", Qualifier: " + Bytes.toString(qualifier) + ", Value: " + Bytes.toString(value.get()));});});}}}private static void deleteData(Connection connection, String tableName, String rowKey, String columnFamily, String column) throws IOException {TableName table = TableName.valueOf(tableName);try (Table table = connection.getTable(table)) {Delete delete = new Delete(Bytes.toBytes(rowKey));delete.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column));table.delete(delete);System.out.println("Data deleted: " + rowKey + ", " + column);}}private static void deleteTable(Admin admin, String tableName) throws IOException {TableName table = TableName.valueOf(tableName);if (admin.tableExists(table)) {admin.disableTable(table);admin.deleteTable(table);System.out.println("Table deleted: " + tableName);} else {System.out.println("Table does not exist: " + tableName);}}
}

说明

  1. 创建配置对象:使用 HBaseConfiguration.create() 创建 HBase 配置对象,并设置 Zookeeper 的地址和端口。
  2. 创建连接对象:使用 ConnectionFactory.createConnection(config) 创建 HBase 连接对象。
  3. 创建表:通过 Admin 接口的 createTable 方法创建表。
  4. 插入数据:使用 Put 对象将数据插入到指定的表中。
  5. 扫描表:使用 Scan 对象扫描表并获取数据。
  6. 删除数据:使用 Delete 对象删除指定的数据。
  7. 删除表:如果需要删除表,可以先禁用表,然后删除表(此操作在示例中是注释掉的,以防止意外删除)。

注意事项

  • 确保 HBase 和 Zookeeper 正在运行,并且配置正确。
  • 根据你的 HBase 和 Hadoop 版本调整依赖版本。
  • 在生产环境中,务必进行充分的错误处理和资源管理(如关闭连接和释放资源)。

相关文章:

HBase Java基础操作

Apache HBase 是一个开源的、分布式的、可扩展的大数据存储系统&#xff0c;它基于 Google 的 Bigtable 模型。使用 Java 操作 HBase 通常需要借助 HBase 提供的 Java API。以下是一个基本的示例&#xff0c;展示了如何在 Java 中连接到 HBase 并执行一些基本的操作&#xff0c…...

关于一次开源java spring快速开发平台项目RuoYi部署的记录

关于一次开源java spring快速开发平台项目RuoYi部署的记录 本次因为需要一些练习环境&#xff0c;想要快速搭建一个javaweb 项目作为练习环境&#xff0c;经过查询和实验找到一个文档详细&#xff0c;搭建简单&#xff0c;架构也相对比较新的开源项目RuoYi。 项目介绍&#xf…...

【AI编程实战】安装Cursor并3分钟实现Chrome插件(保姆级)

Cursor介绍 https://www.cursor.com/ 一句话介绍&#xff1a;AI代码编辑器&#xff0c;当前最火的AI编程器 软件下载与安装 下载 打开Cursor官网下载&#xff0c;会根据操作系统的差别进行选择 https://www.cursor.com/ 这里下载的内容很小&#xff0c;是个安装器&#x…...

【Chatgpt】如何通过分层Prompt生成更加细致的图文内容

如何通过分层Prompt生成更加细致的图文内容 利用ChatGPT和类似的生成式AI模型&#xff0c;通过分层Prompt设计可以生成更具层次感和细节的图文内容。分层Prompt的核心在于将需求分解成多层次的指令&#xff0c;从宏观到微观逐步细化&#xff0c;最终形成高质量的内容输出。 一…...

中间件--laravel进阶篇

laravel版本11.31,这中间件只有3种,分别是全局中间件,路由中间件,控制器中间件。相比thinkphp8,少了一个应用中间件。 一、创建中间件 laravel创建中间件可以使用命令的方式创建,非常方便。比如php artisan make:middleware EnsureTokenIsValid。EnsureTokenIsValid是中间…...

【vue】vue中.sync修饰符如何使用--详细代码对比

.sync修饰符作用 .sync修饰符是一个语法糖&#xff0c;可以简化父子组件通信操作&#xff0c;当子组件想改变父组件数值时&#xff0c;父组件只需要使用.sync修饰符&#xff0c;子组件使用props接收属性&#xff0c;再使用this.$emit(update:属性, 值);就可以实现子组件更新父…...

repmgr安装及常用运维指令

简介 repmgr 由 EDB 与其他个人和组织的贡献一起开发&#xff0c;安装部署相对较为简单 安装 repmgr官网上传对应的安装到服务器上 安装前/etc/hosts IP映射、始终同步、免密通信本文忽略 repmgr的安装相对较为简单,目前repmgr-5仅仅支持到postgresql-15 postgresql必要参数…...

RedHat系统配置静态IP

1、执行nmtui命令进入字符配置界面如下图所示 2、选择编辑连接进入 3、选择编辑进入后&#xff0c;将IPv4设置为手动模式后&#xff0c;选择显示后进行ip地址、网关、DNS的配置&#xff0c;配置完成后选择确定退出编辑 4、进入主界面后选择启用连接进入后&#xff0c;选择启用&…...

nvm和nrm的安装与使用

NVM相关请跳转&#xff1a; Node版本管理器nvm的安装与使用 nrm 的安装与使用 nrm&#xff08;NPM Registry Manager&#xff09;是一个用于管理和切换 NPM 源的工具。它允许你在多个 NPM 源之间快速切换&#xff0c;以提高包管理的速度和效率。以下是 nrm 的安装和使用方法&…...

10大核心应用场景,解锁AI检测系统的智能安全之道

随着工业化和自动化的快速推进&#xff0c;高风险作业场景的安全管理需求日益增加。思通数科AI检测系统以深度学习、计算机视觉和多模态数据融合技术为基础&#xff0c;通过智能化监控和实时反馈&#xff0c;为企业提供全面的作业安全和流程管理解决方案。本文将详细解读该系统…...

香豆烤馍:传统美食中的烟火记忆

食家巷香豆烤馍&#xff0c;承载着甘肃人的乡愁与记忆。它那朴实的外表下&#xff0c;蕴含着丰富的口感和深厚的文化底蕴。烤馍的制作过程充满了烟火气息。选用优质的面粉&#xff0c;经过发酵、揉制等多道工序&#xff0c;再放入传统的烤炉中慢慢烘烤。这个过程需要经验丰富的…...

金融量化交易模型的探索与发展

随着全球金融市场的不断变化与技术进步&#xff0c;量化交易逐渐成为机构和个人投资者的重要选择。作为数据驱动的交易方式&#xff0c;量化交易通过科学建模和技术手段&#xff0c;有效提升了交易效率与决策精准度。本文将探讨金融量化交易模型的创新探索与未来发展方向。 量化…...

灾难恢复计划 (DRP)

灾难恢复计划 (DRP)   目录 灾难恢复计划 (DRP) 1 1. 简介 2 2. 目的 2 3. 范围 3 4. 风险评估 3 5. 容灾方案 3 6. 关键系统恢复优先级 4 7. 恢复流程 4 8. 测试与维护 5 9. 联系信息 5 10. 批准与分发 5 11. 附录 5 1. 简介 灾难恢复计…...

Makefile 之 wordlist

wordlist $(wordlist <s>,<e>,<text> ) 名称&#xff1a;取单词串函数——wordlist。 功能&#xff1a;从字符串<text>中取从<s>开始到<e>的单词串。<s>和<e>是一个数字。 返回&#xff1a;返回字符串<text>中从…...

半导体工艺与制造篇1 绪论

我们为什么要研究半导体&#xff1f;半导体凭什么可以成为电子信息行业的基础呢&#xff1f; 这就要说到半导体的一个重要特点&#xff1a;可以通过控制掺杂率来控制它的导电性 集成电路IC的生产 集成电路IC的生产包括&#xff1a; #mermaid-svg-rWB59zU4pI2cGloo {font-fami…...

接雨水

接雨水 1、 题目描述2、解题思路 1、 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 2、解题思路 本题使用了双指针&#xff0c;根据下图可以得出&#xff0c;下标 i 处能接的雨水量由左边…...

Python蓝桥杯刷题1

1.确定字符串是否包含唯一字符 题解&#xff1a;调用count函数计算每一个字符出现的次数&#xff0c;如果不等于1就输出no&#xff0c;并且结束循环&#xff0c;如果等于1就一直循环直到计算到最后一个字符&#xff0c;若最后一个字符也满足条件&#xff0c;则输出yes import…...

实习冲刺第二十七天

3.无重复字符的最长字串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbb…...

el-table-column自动生成序号在序号前插入图标

实现效果&#xff1a; 代码如下&#xff1a; 在el-table里加入这个就可以了&#xff0c;需要拿到值可以用scope.$index ​​​​​​​<el-table-column type"index" label"序号" show-overflow-tooltip"true" min-width"40">…...

前端工程化-node/npm/babel/polyfill/webpack 一文速通

文章主要介绍了前端工程化的相关内容&#xff0c;包括 Node 环境、npm 包管理器及其命令、配置和镜像&#xff0c;package.json 文件&#xff0c;babel 和 polyfill 用于解决 JavaScript 兼容性问题&#xff0c;以及 webpack 这一前端构建工具的作用、核心概念、构建流程、安装…...

Spring Security PasswordEncoder接口(密码编码)

密码编码&#xff08;通常称为哈希&#xff09;是一种安全措施&#xff0c;它将明文密码转换为独特的字符字符串。 主要目的是确保即使数据存储遭到破坏&#xff0c;存储的密码也不会轻易被破解。 与加密不同&#xff0c;哈希是一个单向过程——这意味着无法从哈希值中恢复原…...

C# 数据结构之【树】C#树

以二叉树为例进行演示。二叉树每个节点最多有两个子节点。 1. 新建二叉树节点模型 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace DataStructure {class TreeNode{public int Data { get;…...

树莓派2装FreeBSD14.1 Raspberry Pi2 install FreeBSD14.1 00000121:error:0A000086:SSL

树莓派2代的Model B采用Broadcom BCM2836 900MHz的四核SoC&#xff0c;1GB内存&#xff0c;是新一代开拓者&#xff0c;兼容1代B。相比之下&#xff0c;树莓派2的性能比1代提升6倍&#xff0c;内存翻了一番。Raspberry Pi 2不仅能跑全系列ARM GNU/Linux发行版&#xff0c;而且支…...

探索C/C++的奥秘之stack和queue

1. stack的介绍和使用 1.1 stack的介绍 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。具体什么是适配器呢&#xff1f;其实就是由现有的东西进行转换&#xff0c;转化出我要的东…...

[开源]1.2K star!中后台方向的低代码可视化平台,超赞!

大家好&#xff0c;我是JavaCodexPro&#xff01; “时间就是金钱&#xff0c;效率就是生命”&#xff0c;快速搭建高质量中后台的低代码可视化搭建平台尤为重要&#xff01; 今天JavaCodexPro给大家分享一款超赞的低代码可视化搭建平台 - Marsview &#xff0c;旨在简化开发…...

算法编程题-排序

算法编程题-排序 比较型排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序归并排序 非比较型排序算法计数排序基数排序 本文将对七中经典比较型排序算法进行介绍&#xff0c;并且给出golang语言的实现&#xff0c;还包括基数排序、计数排序等非比较型的算法的介绍和实现…...

【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 &#x1f4af;前言&#x1f4af;准确引导ChatGPT创建爆款小红书文案GPTs指令案例&#x1f4af; 高效开发GPTs应用的核心原则明确应用场景和目标受众构建多样化风格模板提问与引导技巧持续优…...

【Axure高保真原型】或和且条件

今天和大家分享或和且条件案例的原型模板&#xff0c;效果包括&#xff1a; 可以选择指标、等式和填写对应值构成条件等式&#xff1b; 点击添加条件按钮&#xff0c;可以增加一行新的条件&#xff1b; 点击所在行的号按钮&#xff0c;可以在该行下方添加一行新的条件&#x…...

KubeVirt下gpu operator实践(GPU直通)

KubeVirt下gpu operator实践(GPU直通) 参考《在 KubeVirt 中使用 GPU Operator》&#xff0c;记录gpu operator在KubeVirt下实践的过程&#xff0c;包括虚拟机配置GPU直通&#xff0c;容器挂载GPU设备等。 KubeVirt 提供了一种将主机设备分配给虚拟机的机制。该机制具有通用性…...

Vue通过file控件上传文件到Node服务器

功能&#xff1a; 1.多文件同时上传、2.拖动上传、3.实时上传进度条、4.中断上传和删除文件、5.原生file控件的美化 搁置的功能: 上传文件夹、大文件切片上传、以及其他限制条件未处理 Node服务器的前置准备: 新建文件夹: file_upload_serve初始化npm: npm …...

香港免费永久网站/营销手段和营销方式

eclipse安装svn 菜单栏help-->eclipse marketspace-->find中搜索subclipse&#xff0c;安装-->ok windows-->show view-->other-->搜索svn--svn资源库&#xff0c;在下方会有资源库&#xff0c;选择需要检出的项目右键检出 a二. 提交代码...

绍兴做网站建设/口碑营销的定义

android 连接蓝牙打印机 BluetoothAdapter  源码下载地址&#xff1a;https://github.com/yylxy/BluetoothText.git public class PrintActivity extends AppCompatActivity { //设备列表 private ListView listView; private ArrayList<PrintBean> mBluetoothDe…...

浦口区建设局网站/博客seo优化技术

重置表单输入值为原始&#xff08;空&#xff09;状态。 参数:name1,name2,name3...NAME属性&#xff0c;可以多个。 function resetForm(){   for(var i 0; i < arguments.length; i){     var tagMz document.getElementsByName(arguments[i])[0]; //tag object  …...

安徽省住建厅网站官网/郑州疫情最新消息

首先 double mean[4]]{0.}; const double *& haha mean;//error 这种情况是非法的.原因是&#xff0c;这里的const限定的是double&#xff0c;也就是这是一个 “指向const double 的指针变量的引用“&#xff0c;所以&#xff0c;即使这个指针可以被改变&#xff0c;但是指…...

洛阳网站开发/seo技术培训教程视频

xpath 省略中间路径在我的职业生涯的大部分时间里&#xff0c;我一直在从事软件开发工作&#xff0c;因此&#xff0c;即使我不止一次涉足解决方案工程&#xff0c;我还是把自己视为软件开发人员&#xff08;或软件架构师&#xff09;。 这肯定会对我如何看待架构景观产生影响&…...

cms 网站后台/搜索引擎营销的概念

物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术&#xff0c;实时采集任何需要监控、 连接、互动的物体或过程&#xff0c;采集其声、光、热、电、力学、化…...