hbase学习——创建springboot+hbase项目

news/2025/9/22 21:44:14/文章来源:https://www.cnblogs.com/zhanglijian/p/19106111
  1. 在IDEA中创建项目
    项目类型: Spring Initializr

项目名: HbaseTest

包名: com.example.demo

Java版本: 8

依赖: Spring Web, Spring Boot DevTools

  1. 添加Maven依赖 (pom.xml)
    xml
4.0.0org.springframework.bootspring-boot-starter-parent2.7.18
<groupId>com.example</groupId>
<artifactId>HbaseTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>HbaseTest</name><properties><java.version>1.8</java.version><hbase.version>2.4.18</hbase.version><hadoop.version>3.3.6</hadoop.version>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- HBase Client --><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>${hbase.version}</version></dependency><!-- Hadoop Common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency>
</dependencies>
3. 复制HBase配置文件 将虚拟机中的配置文件复制到 src/main/resources/:

/usr/local/hbase/conf/hbase-site.xml

/usr/local/hadoop/etc/hadoop/core-site.xml

  1. 创建HBase配置类
    java
    // src/main/java/com/example/demo/config/HBaseConfig.java
    package com.example.demo.config;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

@Configuration
public class HBaseConfig {

@Bean
public org.apache.hadoop.conf.Configuration configuration() {org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();// 配置文件已放在resources目录,会自动加载return config;
}@Bean
public Connection connection() throws IOException {return ConnectionFactory.createConnection(configuration());
}

}
5. 创建实体类
java
// src/main/java/com/example/demo/entity/User.java
package com.example.demo.entity;

public class User {
private String rowKey;
private String name;
private String age;
private String email;

// 构造方法、getter、setter
public User() {}public User(String rowKey, String name, String age, String email) {this.rowKey = rowKey;this.name = name;this.age = age;this.email = email;
}// getter和setter方法...

}
6. 创建Service层
java
// src/main/java/com/example/demo/service/HBaseService.java
package com.example.demo.service;

import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Service
public class HBaseService {

@Autowired
private Connection connection;// 创建表
public void createTable(String tableName, String... columnFamilies) throws IOException {try (Admin admin = connection.getAdmin()) {TableName tn = TableName.valueOf(tableName);if (admin.tableExists(tn)) {System.out.println("Table already exists: " + tableName);return;}TableDescriptorBuilder tableBuilder = TableDescriptorBuilder.newBuilder(tn);for (String cf : columnFamilies) {ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(cf));tableBuilder.setColumnFamily(cfBuilder.build());}admin.createTable(tableBuilder.build());System.out.println("Table created: " + tableName);}
}// 插入数据
public void putData(String tableName, String rowKey, String family, String qualifier, String value) throws IOException {try (Table table = connection.getTable(TableName.valueOf(tableName))) {Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));table.put(put);}
}// 查询数据
public String getData(String tableName, String rowKey, String family, String qualifier) throws IOException {try (Table table = connection.getTable(TableName.valueOf(tableName))) {Get get = new Get(Bytes.toBytes(rowKey));Result result = table.get(get);byte[] value = result.getValue(Bytes.toBytes(family), Bytes.toBytes(qualifier));return value != null ? Bytes.toString(value) : null;}
}// 扫描表
public List<String> scanTable(String tableName) throws IOException {List<String> results = new ArrayList<>();try (Table table = connection.getTable(TableName.valueOf(tableName))) {Scan scan = new Scan();ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {results.add(Bytes.toString(result.getRow()) + ": " + result.toString());}}return results;
}// 删除数据
public void deleteData(String tableName, String rowKey) throws IOException {try (Table table = connection.getTable(TableName.valueOf(tableName))) {Delete delete = new Delete(Bytes.toBytes(rowKey));table.delete(delete);}
}

}
7. 创建Controller层
java
// src/main/java/com/example/demo/controller/HBaseController.java
package com.example.demo.controller;

import com.example.demo.service.HBaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;

@RestController
@RequestMapping("/api/hbase")
@CrossOrigin(origins = "http://localhost:3000") // Vue3前端地址
public class HBaseController {

@Autowired
private HBaseService hBaseService;@PostMapping("/create-table")
public String createTable(@RequestParam String tableName) throws IOException {hBaseService.createTable(tableName, "info");return "Table created: " + tableName;
}@PostMapping("/add-data")
public String addData(@RequestParam String tableName,@RequestParam String rowKey,@RequestParam String family,@RequestParam String qualifier,@RequestParam String value) throws IOException {hBaseService.putData(tableName, rowKey, family, qualifier, value);return "Data added successfully";
}@GetMapping("/get-data")
public String getData(@RequestParam String tableName,@RequestParam String rowKey,@RequestParam String family,@RequestParam String qualifier) throws IOException {return hBaseService.getData(tableName, rowKey, family, qualifier);
}@GetMapping("/scan-table")
public List<String> scanTable(@RequestParam String tableName) throws IOException {return hBaseService.scanTable(tableName);
}@DeleteMapping("/delete-data")
public String deleteData(@RequestParam String tableName,@RequestParam String rowKey) throws IOException {hBaseService.deleteData(tableName, rowKey);return "Data deleted successfully";
}

}
8. 修改应用配置
java
// src/main/java/com/example/demo/HbaseTestApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HbaseTestApplication {
public static void main(String[] args) {
SpringApplication.run(HbaseTestApplication.class, args);
}
}
9. 应用配置文件
properties

src/main/resources/application.properties

server.port=8080
spring.application.name=HbaseTest
二、创建Vue3前端项目

  1. 创建Vue3项目
    bash
    npm create vue@latest frontend
    cd frontend
    npm install
  2. 安装依赖
    bash
    npm install axios
  3. 创建HBase操作组件
    vue
  1. 修改App.vue
    vue

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

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

相关文章

python_Day22笔记

今日内容大纲Python数据分析的优势 Python数据分析环境搭建 Jupyter Lab 和 Jupyter Notebook初体验 配置PyCharm连接Jupyter Numpy详解属性 创建 内置函数 运算1.Python数据处理分析简介Python作为当下最为流行的编程…

东阿网站建设产品wordpress后台英文

一、谷歌内置的审查工具(v17.0)。右键点击审查(CtrlShirtAlt)浏览器下方会出现审查框&#xff0c;刷新网页就会出现下图所示&#xff0c;先后点击“netword”-->在下方选中资源(如下图的1.php)-->点击headers二、httpwatch。ShirtF2打开httpwatch点击Record按钮&#xff…

黄南州网站建设公司做ppt常用的网站

随着使用时间的增长&#xff0c;我们会发现Mac电脑的存储空间越来越少&#xff0c;这时候我们就需要对Mac电脑进行清理&#xff0c;以释放更多的存储空间。那么&#xff0c;Mac空间不足怎么解决呢&#xff1f; 1.清理垃圾文件 Mac空间不足怎么解决&#xff1f;首先要做的就是…

网站建设是属于虚拟产品吗专门做折扣的网站有哪些

目录 无法加载响应数据解决 无法加载响应数据 上线项目时 改用服务器上的redis和MySQL 出现请求能请求到后端&#xff0c;后端也能正常返回数据&#xff0c;但是在前端页面会显示 以为是跨域问题&#xff0c;但是环境还在本地&#xff0c;排除跨域问题以为是服务器问题&#…

安装Wordpress的免费空间网站优化和提升网站排名怎么做

文章目录 Pre概述什么是非对称加密算法&#xff1f;如何工作&#xff1f;示例&#xff1a;RSA算法特点和优势ECC&#xff1a;另一种非对称加密算法 Code生成公钥和私钥私钥加密私钥加密私钥解密 ( 行不通 )私钥加密公钥解密公钥加密和公钥解密 &#xff08;行不通&#xff09;保…

衡阳县做淘宝网站建设网站托管服务协议

1.什么是RabbitMQ RabbitMQ是一个由erlang开发的AMQP&#xff08;Advanced Message Queue &#xff09;的开源实现。AMQP 的出现其实也是应了广大人民群众的需求&#xff0c;虽然在同步消息通讯的世界里有很多公开标准&#xff08;如 COBAR的 IIOP &#xff0c;或者是 SOAP 等&…

网站百度v认证网站栏目结构

链接&#xff1a;http://www.2cto.com/database/201207/139330.html转载于:https://www.cnblogs.com/nycj/p/5661151.html

.NET周刊【9月第1期 2025-09-07】

国内文章 关于.net9发布单体exe程序无法打开问题详解 https://www.cnblogs.com/sc-Free-Die/p/19075260 该文章探讨了使用.NET 9开发的Winform程序在发布为x64单文件exe后出现的异常。文章描述了在不同架构下(x64与x86…

第七章 Cesium 3D 粒子烟花效果案例解析:从原理到完整代码 - 详解

第七章 Cesium 3D 粒子烟花效果案例解析:从原理到完整代码 - 详解2025-09-22 21:37 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !i…

郑州专业网站制作的公司哪家好最大的免费网站建设

今年5月&#xff0c;Facebook AI研究院&#xff08;FAIR&#xff09;发表了他们的研究成果fairseq&#xff0c;在fairseq中&#xff0c;他们使用了一种新型的卷积神经网络来做语言翻译&#xff0c;比循环神经网络的速度快了9倍&#xff0c;而且准确性也是现有模型中最高的。此外…

SUDO提权

今天在NSS上刷题,写这道sudo提权时发现一个大佬wp质量很高,跟着思路记录一下,顺便向大佬致敬。Sudo 提权 向大佬致敬,太厉害了,四个月全勤,估计是写完题顺带写了wp[HZNUCTF 2023 final]ezgo 解题思路 Please POS…

2025.9.19 总结

这一场太逆天了,全靠部分分拿长郡榜二。 T1 逆序对这个东西很好搞,你只需要从前往后加就行了,然后你发现一个数只会和他最前面比它大的数产生贡献。 因为他前面比他大的数前面可能会有比它还大的,但是这样显然这个…

可以上传自己做的视频的网站吗网站建设公司星海网络

[TOC]为什么要有相对跳转和绝对跳转&#xff1f;顺序执行&#xff1a;指令一条一条按照顺序往下执行&#xff0c;比如变量的定义和赋值都是按照顺序执行的。跳转执行&#xff1a;当指令执行到当前位置后跳转到其他位置执行。比如&#xff0c;在主函数中调用其他函数就是典型的跳…

南京哪个网站做物业贷vue.js做静态网站

&#x1f3c6;作者&#xff1a;科技、互联网行业优质创作者 &#x1f3c6;专注领域&#xff1a;.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 &#x1f3c6;欢迎关注我&#xff08;Net数字智慧化基地&#xff09;&#xff0c;里面…

国外儿童社区网站模板网站建设的费用

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业在线辅导业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着…

东莞网站建设做网站dw可以做视频网站么

原文地址&#xff1a;http://www.goodfav.com/zh/app-development-tutorials-3559.html 移动应用程序开发是大企业和创意的个人和小团队开发&#xff0c;是一个有很多商业机会的领域之一。它可能需要多次尝试设计来实施一个出类拔萃的应用程序&#xff0c;但是&#xff0c;如果…

自媒体图片素材网站系统开发过程

我试图从Mathematica中获取一张图片.我尝试评估一些使用包中的方法生成图形的Mathematica代码.如果我将代码粘贴到Mathematica Notebook,则会正确生成图形.所以我的问题&#xff1a;如何将这些图形转换为Java ???这是我的示例代码&#xff1a;ml MathLinkFactory.createKer…

阿里云做的网站怎么样宁波网站建设公司哪里有

在Vue中&#xff0c;防抖和节流是两种常用的优化技术&#xff0c;用于限制事件的触发频率&#xff0c;以提高页面性能。 防抖&#xff08;Debounce&#xff09;是指在事件被触发后&#xff0c;等待一段时间后再执行回调函数。如果在这段等待时间内&#xff0c;事件又被触发&am…

建立一个网站大约要多少钱个人工作室和公司区别

前言 在上一篇文章中我们介绍了在计算机底层视角下的虚拟内存和操作系统在用户层所进行的各个分层&#xff0c;在这篇文章我们就要开始尝试书写多线程代码了,其实在c11后c就提供供了线程类给我们使用,c线程类其实主要是对c操作多线程的函数进行了封装&#xff0c;本质上其实是…

详细介绍:无公网 IP 访问群晖 NAS:神卓 N600 的安全解决方案(附其他方法风险对比)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …