Spring Boot 2.x :通过 spring

  • 时间:
  • 浏览:3
  • 来源:大发时时彩_时时彩彩神8app_大发时时彩彩神8app

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!

本文内容

  • HBase 简介和应用场景
  • spring-boot-starter-hbase 开源简介
  • 集成 HBase 实战
  • 小结

摘录:Many a Man thinks he is buying Pleasure,when he is really sellinghimself a Slave to it.

大伙儿儿认为个人花钱买了快乐,虽然是花钱做了快乐的奴隶。

一、HBase 简介和应用场景

1.1 HBase 是那此?

HBase 是那此?HBase 是在 Hadoop 分布式文件系统(简称:HDFS)之上的分布式面向列的数据库。有刚刚是 10007 最初原型,历史悠久。

那追根究底,Hadoop 是那此?Hadoop是有一4个多分布式环境存储并避免大数据。Hadoop 使用 MapReduce 算法统计分析大数据。这以前不得不说下 Google 的著名的三篇大数据的论文,分别讲述 GFS、MapReduce、BigTable,详见 https://www.bysocket.com/archives/2051。

那回到 HBase,HBase 在 Hadoop 之上提供了相似于 BigTable 的能力,它不同于一般的关系数据库,是有一4个多适合非形态学 化数据存储的数据库。它有刚刚同于行式数据库,是基于列的模式。

HBase 有一4个多面向列的数据库,排序由行决定。简而言之:

  • 表是行的集合。
  • 行是列族的集合。列族,有刚刚键值对。每个列族以 key 为列命名,还须就说 否数的列。
  • 列族有刚刚列的集合。列连续存储,有刚刚每个单元会有对应的时间戳
  • 列的存储也是键值对。

与行式数据库最大的区别有刚刚,还须要面向列设计巨大表,适用于在线分析避免 OLAP。

与关系型数据库 RDBMS 完整篇 都是些区别如下:

  • HBase 宽表,横向扩展。RDBMS 小表,难成规模
  • HBase 那么事务
  • HBase 无规范化数据,完整篇 都是键值对 key value
1.2 HBase 应用场景

官网上 hbase.apache.org,形态学 那么多:

Features:

Linear and modular scalability.

Strictly consistent reads and writes.

Automatic and configurable sharding of tables

Automatic failover support between RegionServers.

Convenient base classes for backing Hadoop MapReduce jobs with Apache HBase tables.

Easy to use Java API for client access.

Block cache and Bloom Filters for real-time queries.

Query predicate push down via server side Filters

Thrift gateway and a REST-ful Web service that supports XML, Protobuf, and binary data encoding options

Extensible jruby-based (JIRB) shell

Support for exporting metrics via the Hadoop metrics subsystem to files or Ganglia; or via JMX

最主要的还是形态学 能有那此应用场景?大致搜集了下业界的:

  • 监控数据的日志详情
  • 交易订单的详情数据(淘宝、有赞)
  • facebook 的消息详情

二、spring-boot-starter-hbase 开源简介

spring-boot-starter-hbase 是自定义的spring-boot 的 hbase starter,为 hbase 的 query 和更新等操作提供简易的 api 并集成spring-boot 的 auto configuration。

具体地址:

https://github.com/SpringForAll/spring-boot-starter-hbase

三、集成 HBase 实战

具体代码地址:https://github.com/JeffLi1993/springboot-learning-example

工程名:springboot-hbase

3.1 安装 spring-boot-starter-hbase 组件依赖

有刚刚找不到公共仓库,必须自行安装。有刚刚有 maven 私库,还须要考虑安装到 私库。

下载项目到本地:

git clone https://github.com/SpringForAll/spring-boot-starter-hbase.git

安装依赖:

cd spring-boot-starter-hbase
mvn clean install

等待英文安装完毕即可。

3.2 工程集成依赖

目录形态学 如下:

springboot-hbase git:(master)
├── pom.xml
└── src
    └── main
        ├── java
        │   └── org
        │       └── spring
        │           └── springboot
        │               ├── Application.java
        │               ├── controller
        │               │   └── CityRestController.java
        │               ├── dao
        │               │   └── CityRowMapper.java
        │               ├── domain
        │               │   └── City.java
        │               └── service
        │                   ├── CityService.java
        │                   └── impl
        │                       └── CityServiceImpl.java
        └── resources
            └── application.properties

先在 pom.xml 加入 spring-boot-starter-hbase 组件依赖,也有刚刚后面 安装的依赖,核心加入代码如下:

    <properties>
        <hbase-spring-boot>1.0.0.RELEASE</hbase-spring-boot>
    </properties>

    <!-- Spring Boot HBase 依赖 -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>spring-boot-starter-hbase</artifactId>
            <version>${hbase-spring-boot}</version>
        </dependency>

有刚刚配置相关 HBase 连接信息,具体 HBase 安装,网上文章一大堆。在 spring-boot 项目的 application.properties 文件中加入对应的配置项目,并检查配置是是否是正确:

## HBase 配置
spring.data.hbase.quorum=xxx
spring.data.hbase.rootDir=xxx
spring.data.hbase.nodeParent=xxx

具体配置项信息如下:

  • spring.data.hbase.quorum 指定 HBase 的 zk 地址
  • spring.data.hbase.rootDir 指定 HBase 在 HDFS 上存储的路径
  • spring.data.hbase.nodeParent 指定 ZK 中 HBase 的根 ZNode
3.3 HBase 保存查询操作

定义 DTO ,即 domain 包下的 City 对象:

public class City {

    

有刚刚定义该对象的 RowMapper,是用来和 HBase 存储作为映射:

public class CityRowMapper implements RowMapper<City> {

    private static byte[] COLUMN_FAMILY = "f".getBytes();
    private static byte[] NAME = "name".getBytes();
    private static byte[] AGE = "age".getBytes();

    @Override
    public City mapRow(Result result, int rowNum) throws Exception {
        String name = Bytes.toString(result.getValue(COLUMN_FAMILY, NAME));
        int age = Bytes.toInt(result.getValue(COLUMN_FAMILY, AGE));

        City dto = new City();
        dto.setCityName(name);
        dto.setAge(age);
        return dto;
    }
}

有刚刚还须要用 spring-boot-starter-hbase 组件的 HbaseTemplate 操作 HBase API 。具体操作逻辑写在 CityServiceImpl 业务逻辑实现:

@Service
public class CityServiceImpl implements CityService {

    @Autowired private HbaseTemplate hbaseTemplate;

    public List<City> query(String startRow, String stopRow) {
        Scan scan = new Scan(Bytes.toBytes(startRow), Bytes.toBytes(stopRow));
        scan.setCaching(100000);
        List<City> dtos = this.hbaseTemplate.find("people_table", scan, new CityRowMapper());
        return dtos;
    }

    public City query(String row) {
        City dto = this.hbaseTemplate.get("people_table", row, new CityRowMapper());
        return dto;
    }

    public void saveOrUpdate() {
        List<Mutation> saveOrUpdates = new ArrayList<Mutation>();
        Put            put           = new Put(Bytes.toBytes("135xxxxxx"));
        put.addColumn(Bytes.toBytes("people"), Bytes.toBytes("name"), Bytes.toBytes("test"));
        saveOrUpdates.add(put);

        this.hbaseTemplate.saveOrUpdates("people_table", saveOrUpdates);
    }
}

HbaseTemplate 提供常见的操作接口如下:

  • hbaseTemplate.find 返回 HBase 映射的 City 列表
  • hbaseTemplate.get 返回 row 对应的 City 信息
  • hbaseTemplate.saveOrUpdates 保存有刚刚更新

有刚刚 HbaseTemplate 操作不满足需求,完整篇 还须要使用 hbaseTemplate 的getConnection() 最好的法律办法,获取连接。进而相似于 HbaseTemplate 实现的逻辑,实现更简化的需求查询等功能

具体代码地址:https://github.com/JeffLi1993/springboot-learning-example

工程名:springboot-hbase

四、小结

虽然 starter 五种 好处,大伙儿儿也都知道。低耦合高内聚,相似于 JDBCTemplate,将操作 HBase、ES 也好的 Client 封装到 。有刚刚每个业务工程拿来即用,不然肯定会有重复代码突然出现。

另外还是强调你你你这个,相当于的业务场景选择 HBase,常见如下:

  • 监控数据的日志详情
  • 交易订单的详情数据(淘宝、有赞)
  • facebook 的消息详情

(关注微信公众号,领取 Java 精选干货学习资料)