SpringBoot操作hbase

1,添加依赖(客户端版本和 HBase 版本需要保持一致,否则可能会遇到不兼容的问题。)

	<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-shaded-client</artifactId><version>1.2.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>

2,yml配置

spring:application:name: sbhbase
server:port: 9090
hbase:zookeeper:quorum: 192.168.88.180:2181

3,代码段(配置类,获取配置)

package com.qjc.sbhbase.config;import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;import java.io.IOException;
import java.util.function.Supplier;@Configuration
public class CustomerHbaseConfiguration {@Value("${hbase.zookeeper.quorum}")private String quorum;@Beanpublic org.apache.hadoop.conf.Configuration getConfig(){org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();conf.set(HConstants.ZOOKEEPER_QUORUM,quorum);return conf;}//每次用户调用get方法获得一个新的数据库连接  可以考虑并发@Beanpublic Supplier<Connection> hbaseConnSupplier(){return ()->{return hbaseConnect();};}//获取数据库连接@Bean@Scope("prototype")public Connection hbaseConnect(){Connection connection = null;try {connection = ConnectionFactory.createConnection(getConfig());} catch (IOException e) {e.printStackTrace();}return connection;}
}

4,实体类

package com.qjc.sbhbase.model;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Scope("prototype")
public class Userinfos {private String userid;private String username;private String birthday;
}

5,操作(service)

package com.qjc.sbhbase.services;import com.qjc.sbhbase.model.Userinfos;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;@Service
public class HbaseService {@Autowiredprivate Connection hbaseConnection;//插入数据public void insert(Userinfos user){try {//获取数据库中的表Table table = null;table = hbaseConnection.getTable(TableName.valueOf("mydemo:userinfos"));//准备一行数据Put line = new Put(user.getUserid().getBytes());line.addColumn("base".getBytes(),"username".getBytes(),user.getUsername().getBytes());line.addColumn("base".getBytes(),"birthday".getBytes(),user.getBirthday().getBytes());//将数据插入数据库table.put(line);} catch (IOException e) {e.printStackTrace();}}//根据rowkey获取数据public Userinfos findByRowkey(String rowkey){Table table = null;Result result = null;Userinfos us = null;//获取hbase中的表try {table = hbaseConnection.getTable(TableName.valueOf("mydemo:userinfos"));//按照rowkey获取数据Get get = new Get(rowkey.getBytes());result = table.get(get);us = Userinfos.builder().username(new String(result.getValue("base".getBytes(),"username".getBytes()))).build();} catch (IOException e) {e.printStackTrace();}finally {try {table.close();} catch (IOException e) {e.printStackTrace();}}return us;}//代码逻辑没问题  在海量数据下此方法不能使用 内存不足 会花费大量时间下载数据public List<Userinfos> findAll(){List<Userinfos> list = new ArrayList<Userinfos>();Table table = null;try {table = hbaseConnection.getTable(TableName.valueOf("mydemo:userinfos"));Scan scan = new Scan();ResultScanner rs = table.getScanner(scan);Result result = null;while ((result =rs.next())!= null){list.add(Userinfos.builder().username(new String(result.getValue("base".getBytes(),"username".getBytes()))).build());}} catch (IOException e) {e.printStackTrace();}finally {try {table.close();} catch (IOException e) {e.printStackTrace();}}return list;}//根据username包含某字查询信息public List<Userinfos> findUserByPrefixName(String prefixName){Table table = null;List<Userinfos> list = new ArrayList<>();try {table = hbaseConnection.getTable(TableName.valueOf("mydemo:userinfos"));Scan scan = new Scan();//hbase中操纵命令:scan 'mydemo:userinfos',{FILTER=>"SingleColumnValueFilter('base','username',=,'substring:zhang')"}SingleColumnValueFilter vf = new SingleColumnValueFilter("base".getBytes(),"username".getBytes(),CompareFilter.CompareOp.EQUAL,new SubstringComparator(prefixName));scan.setFilter(vf);ResultScanner scanner = table.getScanner(scan);Result rs = null;while ((rs=scanner.next()) != null){list.add(Userinfos.builder().username(new String(rs.getValue("base".getBytes(),"username".getBytes()))).build());}} catch (IOException e) {e.printStackTrace();} finally {try {table.close();} catch (IOException e) {e.printStackTrace();}}return list;}
}

6,controller层(这里只是简单调用查看)

package com.qjc.sbhbase.controller;import com.qjc.sbhbase.model.Userinfos;
import com.qjc.sbhbase.services.HbaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;@RestController
public class InitCtrl {@Resourceprivate HbaseService hbaseService;@RequestMapping("/add")public String add(@ModelAttribute Userinfos user){hbaseService.insert(user);return "ok";}@RequestMapping("/single/{rowkey}")public Userinfos select(@PathVariable("rowkey") String rowkey){return hbaseService.findByRowkey(rowkey);}@RequestMapping("/getAll")public List<Userinfos> getAll(){return hbaseService.findAll();}@RequestMapping("/findByName/{name}")public List<Userinfos> findByName(@PathVariable("name") String name){return hbaseService.findUserByPrefixName(name);}
}

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

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

相关文章

php 域名白名单,域名白名单验证

验证域名是否在白名单中是编程时常用到的功能&#xff0c;对安全性有要求的项目中都有该功能。常见的使用场景有登录后回跳&#xff0c;跳转到外站时弹出安全提示等。知乎登录后回跳&#xff1b;只要有登录的地方就需要用到来源回跳。我们在一个页面www.baidu.com 调用知乎的登…

Java Socket与Html5 websocket通信

一、Mysocket.java文件 import org.springframework.stereotype.Component;import javax.websocket.*; import javax.websocket.server.*;// ws://localhost:8080/ws/Tom ServerEndpoint("/ws/{user}") Component public class MySocket {private String currentUse…

matlab 由移相角如何产生移相脉冲,整流电路控制角移相范围是怎么确定的?

整流电路控制角移相范围是怎么确定的&#xff1f;2019-03-14【FrancisQu的回答(28票)】:谢邀^^一言以蔽之&#xff0c;整流电路控制角的范围取决于整流电路直流输出电压平均值时所得的控制角&#xff0c;详细分析如下。基本概念&#xff1a;触发延迟角(控制角)——从晶闸管开始…

php编程对联,形容程序员的对联大全

程序员&#xff0c;是从事程序开发、维护的专业人员。现在有一些形容程序员的对联&#xff0c;学习啦小编为大家整理了一些&#xff0c;感兴趣的&#xff0c;欢迎大家阅读。形容程序员的对联摘抄上联&#xff1a;莫道运维无姝丽&#xff0c;下联&#xff1a;谁言开发不风情?横…

SpringBoot 实现SSE 服务器发送事件

SSE 全称Server Sent Event&#xff0c;直译一下就是服务器发送事件&#xff0c;一般的项目开发中&#xff0c;用到的机会不多&#xff0c;可能很多小伙伴不太清楚这个东西&#xff0c;到底是干啥的&#xff0c;有啥用 本文主要知识点如下&#xff1a; SSE 扫盲&#xff0c;应…

php多表递归查询,使用公用表表达式的递归查询

微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。公用表表达式 (CTE) 具有一个重要的优点&#xff0c;那就是能够引用其自身&#xff0c;从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。当某个查询引用递…

php如何把图片存入oracle,在PHP中将图片存放ORACLE中

我这里提供一个用PHP操纵blob字段的例子给你&#xff0c;希望能有所帮助&#xff01;这个例子是把用户上传的图片文件存放到BLOB中。假设有一个表&#xff0c;结构如下&#xff1a;CREATE TABLE PICTURES (ID NUMBER,DESCRIPTION VARCHAR2(100),PICTURE BLOB);然后是用来处理数…

Springboot之整合SSE实现消息推送

Springboot之整合SSE实现消息推送 前言 项目中涉及到部分请求&#xff0c;后端处理时间较长&#xff0c;使用常规Http请求&#xff0c;页面等待时间太长&#xff0c;对用户不友好&#xff0c;故考虑使用长链接进行消息推送&#xff0c;可选方案有WebSocket、SSE&#xff0c;We…

SQL按某字段去重 保留按某个字段排序最大值

select * from tablename as a where not exists ( select 1 from tablename as bwhere b.namea.name and b.id>a.id)talename&#xff1a;要去重复的表 name:需要去重复的字段&#xff0c;可以有多个字段 ID&#xff1a;取id字段最大 例子&#xff1a; create table ta…

oracle将字符串的日期格式化,oracle格式化字符串 oracle 怎么把字符串转换成日期...

Oracle数据库中如何将字符串格式化为日期可以用 to_date(日期类型字符串,要转化的日期类型)函数进行日期格式转换 sql&#xff1a;select to_date(1990-12-12 12:12:32,yyyy-MM-dd hh24:mi:ss) from dual; 解释&#xff1a;此语句的输出结果就是 “1990-12-12 12:12:32”(日期类…

SQL中只要用到聚合函数就一定要用到group by 吗?

SQL中只要用到聚合函数就一定要用到group by 吗? 今天记录一个弱智问题&#xff0c;一直没发现这个问题。 答&#xff1a;看情况 1、当聚集函数和非聚集函数出现在一起时&#xff0c;需要将非聚集函数进行group by 2、当只做聚集函数查询时候&#xff0c;就不需要进行分组了…

oracle排名怎么去除空值影响,Oracle排序中常用的NULL值处理方法

1、缺省处理Oracle在Order by 时缺省认为null是最大值&#xff0c;所以如果是ASC升序则排在最后&#xff0c;DESC降序则排在最前2、使用nvl函数nvl函数可以将输入参数为空时转换为一特定值&#xff0c;如nvl(employee_name,’张三’)表示当employee_name为空时则返回’张三’&a…

Vue中npm run dev 和 npm run serve区别

在运行vue文件时&#xff0c;需要进行npm操作&#xff0c;但我们发现&#xff0c;有时候用的是npm run serve&#xff0c;而有的时候用的是npm run dev&#xff0c;二者有什么区别 在我们运行一些 vue 项目的时候&#xff0c;输入npm run serve或者 npm run dev的其中一个时&a…

SpringBoot导出数据为PDF

一、SpringBoot导出数据为PDF 1、添加所需依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version> </dependency> <dependency><groupId>com.itextpdf.…

php安装mem+cache扩展,安装memcached及php扩展

用的是centos系统1、安装memcachedyum -y install memcached安装完成后&#xff0c;memcached -h应该会出现memcached 参数说明2、memcached配置文件vi /etc/sysconfig/memcachedPORT"11210"USER"memcached"MAXCONN"1024"CACHESIZE"64"…

Springboot集成支付宝沙箱支付(完整版)

开发前准备 easy支付官方文档&#xff1a;https://opendocs.alipay.com/open/009ys9 通用版文档&#xff1a;https://opendocs.alipay.com/open/02np94 支付宝沙箱的配置 注册支付宝开发者账户&#xff0c;进入开发者控制台 https://openhome.alipay.com/platform/developer…

mongodb 数组查询 php,关于PHP,查询mongodb里的数组的问题

这一个记录{ “_id” : ObjectId(“56bb7aafa1164ef44e000029”), “qishu” : 21, “shuzi” : [ 69, 15, 86, 40, 20, 67, 46, 13, 36, 23, 33, 26, 9, 49, 81, 96, 65, 31, 52, 75, 99, 6, 39, 74, 47, 42, 1, 94, 82, 91, 5, 27, 30, 28, 7, 90, 34, 37, 79, 70, 18, 87, 5…

Springboot集成支付宝沙箱支付(退款功能)

包括&#xff1a; 支付宝沙箱 支付 异步通知 退款功能 正式版本的sdk 通用版本SDK文档&#xff1a;https://opendocs.alipay.com/open/02np94 <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><…

oracle 数据库日期定义,Oracle数据库实现日期遍历功能

遍历开始日期到结束日期的每一天&#xff0c;若有查询某段日期下有什么业务或者事件发生时&#xff0c;可用到此函数。 Oracle SQL Developer create or replace type class_date as object( year varchar2(10), month varchar2(10), day varchar2(20))--定义所需要的日期类---…

linux tomcat php配置文件在哪个文件夹下,tomcat下,怎么安配备置php ?(linux系统)

(一)、JDK安装tar.gz为解压后就可使用的版本&#xff0c;这里我们将jdk-8u45-linux-i586.tar.gz解压到/usr/local/下。1、解压[rootTomcat~]#tar-zxvfjdk-8u45-linux-i586.tar.gz2、环境配置[rootTomcat~]#sudovi/etc/profile#setjavaenvironmentJAVA_HOME/usr/local/jdk1.8.0C…