Spring Boot 整合 HBase
一、HBase 介绍
HBase是一个分布式的、面向列的开源数据库,Hadoop 数据库。搭建基于 Hadoop 和 ZK 。
历史是基于 Google 的 Bigtable 、Google 文件系统等论文。HBase 在Hadoop 之上提供了类似于 Bigtable 的能力。 HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase 特性:
大:一个表可以有数十亿行,上百万列, PB级别的水平扩展能力
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要- - 动态的增加,同一张表中不同的行可以有截然不同的列
稀疏:空列不占用存储空间,表可以很稀疏
可靠性高:系统无单点,容忍任意两台物理节点故障,数据无风险
数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
HBase 适用场景:
海量数据场景,天然支持数据水平扩展,处理 TB 到 PB 数据
写性能突出,轻松打满网卡,增量数据抓取、批处理
源于Hadoop生态,和hadoop生态各个大数据系统天然集成
HBase 运行模式
单机
伪分布式
分布式
实战小提示:如果 DB 数据大,想要同步到 HBase 怎么做?用数据同步工具:DataX、binlog 等
二、HBase 安装
brew 一键安装即可:
brew install hbase
等安装好后,安装目录如下:
/usr/local/Cellar/hbase/1.2.6
/libexec/conf 是目录,在配置目录配置 JDK 环境如下:
vim libexec/conf/hbase-env.sh
配置 JAVA_HOME 到本机的 JDK 安装目录。
然后打开 hbase-site.xml 文件,里面是对应的两个文件目录:
// HBase 存储文件地方 file:///usr/local/var/hbase // ZooKeeper 存储文件地方 /usr/local/var/zookeeper
进入 bin ,里面是运行和关闭的 sh 脚本。 启动 HBase ,简单如下:
sudo ./start-hbase.sh
控制台中出现如下信息,说明启动 HBase 成功:
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. starting master, logging to /usr/local/var/log/hbase/hbase-root-master-BYSocketdeMacBook-Pro-2.local.out Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option PermSize; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0
三、Spring Boot 整合 HBase
在 pom.xml 文件中加入对应的依赖:
<dependency> <groupId>com.spring4all</groupId> <artifactId>spring-boot-starter-hbase</artifactId> <version>${spring-boot-habse}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
需要解决日志包依赖冲突,所以排除日志相关依赖包
在 application.properties 添加对应的 HBase 配置:
## HBase 数据源配置 spring.data.hbase.quorum=127.0.0.1:2181 spring.data.hbase.rootDir=/hbase spring.data.hbase.nodeParent=
nodeParent 适用于集群,目前是单机模式,不需要配置。
创建一个 Dto 对象:
public class PeopleDto { private String name; private int age; public String getName() { return name; } public PeopleDto setName(String name) { this.name = name; return this; } public int getAge() { return age; } public PeopleDto setAge(int age) { this.age = age; return this; } }
定义该对象的 RowMapper:
import com.jthink.skyeye.data.hbase.api.RowMapper; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; public class PeopleRowMapper implements RowMapper<PeopleDto> { private static byte[] COLUMNFAMILY = "f".getBytes(); private static byte[] NAME = "name".getBytes(); private static byte[] AGE = "age".getBytes(); @Override public PeopleDto mapRow(Result result, int rowNum) throws Exception { PeopleDto dto = new PeopleDto(); // TODO: 设置相关的属性值 String name = Bytes.toString(result.getValue(COLUMNFAMILY, NAME)); int age = Bytes.toInt(result.getValue(COLUMNFAMILY, AGE)); return dto.setName(name).setAge(age); } }
CRUD 服务层操作:
@Service public class QueryService { @Autowired private HbaseTemplate hbaseTemplate; public List<PeopleDto> query(String startRow, String stopRow) { Scan scan = new Scan(Bytes.toBytes(startRow), Bytes.toBytes(stopRow)); scan.setCaching(5000); List<PeopleDto> dtos = this.hbaseTemplate.find("people_table", scan, new PeopleRowMapper()); return dtos; } public PeopleDto query(String row) { PeopleDto dto = this.hbaseTemplate.get("people_table", row, new PeopleRowMapper()); return dto; } public void saveOrUpdates() { List<Mutation> puts = new ArrayList<>(); // 设值 this.hbaseTemplate.saveOrUpdates("people_table", puts); } public void saveOrUpdate() { Mutation delete = new Delete(Bytes.toBytes("")); this.hbaseTemplate.saveOrUpdate("people_table", delete); } public void saveOrUpdate() { List<Mutation> saveOrUpdates = new ArrayList<>(); Put put = new Put(Bytes.toBytes("135xxxxxx")); put.addColumn(Bytes.toBytes("people"), Bytes.toBytes("name"), Bytes.toBytes("JThink")); saveOrUpdates.add(put); Delete delete = new Delete(Bytes.toBytes("136xxxxxx")); saveOrUpdates.add(delete); // 继续add this.hbaseTemplate.saveOrUpdates("people_table", saveOrUpdates); } }
四、小结
在实践演进中,不可能一下次就用上高大上的 HBase。所以,同步数据这块强烈推荐 DataX。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
redis架构演变与redis-cluster群集读写方案
redis架构演变与redis-cluster群集读写方案 导言 redis-cluster是近年来redis架构不断改进中的相对较好的redis高可用方案。本文涉及到近年来redis多实例架构的演变过程,包括普通主从架构(Master、slave可进行写读分离)、哨兵模式下的主从架构、redis-cluster高可用架构(redis官方默认cluster下不进行读写分离)的简介。同时还介绍使用Java的两大redis客户端:Jedis与Lettuce用于读写redis-cluster的数据的一般方法。再通过官方文档以及互联网的相关技术文档,给出redis-cluster架构下的读写能力的优化方案,包括官方的推荐的扩展redis-cluster下的Master数量以及非官方默认的redis-cluster的读写分离方案,案例中使用Lettuce的特定方法进行redis-cluster架构下的数据读写分离。 近年来redis多实例用架构的演变过程 redis是基于内存的高性能key-value数据库,若要让redis的数据更稳定安全,需要引入多实例以及相关的高可用架构。而近年来redis...
- 下一篇
结构化搜索_在案例中实战使用terms搜索多个值以及多值搜索结果优化
课程大纲 term:{"field":"value"} terms:{"field":["value1","value2"]} sql中的in select*fromtblwherecolin("value1","value2") 1、为帖子数据增加tag字段 POST/forum/article/_bulk {"update":{"_id":"1"}} {"doc":{"tag":["java","hadoop"]}} {"update":{"_id":"2"}} {"doc":{"tag":["java"]}} {"update":{"_id":"3"}} {"doc":{"tag":["hadoop"]}} {"update":{"_id":"4"}} {"doc":{"tag":["java","elasticsearch"]}} 2、搜索articleID为KDKE-B-9947-#kL5或QQPX-R-3956-#aD8的帖子,搜索tag中包含java的帖子 GET/forum/article/_search { "query":{ "constant_score":{ "...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装