美文网首页hbaseMybatisspringboot
Hbase——Springboot集成mybatis+phoen

Hbase——Springboot集成mybatis+phoen

作者: 小波同学 | 来源:发表于2023-03-21 11:06 被阅读0次

前言

Phoenix 最早是 saleforce 的一个开源项目,后来成为 Apache 的顶级项目。
Phoenix 构建在 HBase 之上的开源 SQL 层。能够让我们使用标准的 JDBC API 去建表,插入数据和查询 HBase 中的数据,从而可以避免使用 HBase 的客户端 API。

Apache Phoenix 通过结合两个方面的优点,在Hadoop中为低延迟应用提供了OLTP和运营分析:

  • 具有完全ACID事务功能的标准SQL和JDBC api的强大功能
  • 通过利用HBase作为后台存储,从NoSQL获得后期绑定的、读时模式功能的灵活性
  • Phoenix通过协处理器在服务器端执行操作,最小化客户机/服务器数据传输

Apache Phoenix与Spark、Hive、Pig、Flume、Map Reduce等Hadoop产品完全集成。

通过定义良好的行业标准api,成为OLTP和Hadoop操作分析的可信数据平台。

在我们的应用和 HBase 之间添加了 Phoenix,并不会降低性能,而且我们也少写了很多代码。

phoenix 特点

  • 将 SQL 查询编译为 HBase 扫描
  • 完美支持 HBase 二级索引创建
  • 支持完整的ACID事务、UDF、分页查询
  • 确定扫描 Rowkey 的最佳开始和结束位置、扫描并行执行
  • 将 where 子句推送到服务器端的过滤器
  • 通过协处理器进行聚合操作
  • DML 命令以及通过 DDL 命令创建和操作表和版本化增量更改。
  • 容易集成:如Spark,Hive,Pig,Flume 和 Map Reduce。
  • 支持java、python的Driver

一、Springboot集成mybatis+phoenix操作Hbase

引入依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>

    <!-- hbaseClient依赖 -->
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>2.4.8</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <!-- phoenix依赖 -->
    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-core</artifactId>
        <version>5.1.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

配置application.yml

spring:
  datasource:
    driverClassName: org.apache.phoenix.jdbc.PhoenixDriver
    # zookeeper 地址
    url: jdbc:phoenix:node1,node2,node3:2181
    # 如果不想配置对数据库连接池做特殊配置的话,以下关于连接池的配置就不是必须的
    # spring-boot 2.X 默认采用高性能的 Hikari 作为连接池 更多配置可以参考 https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      # 池中维护的最小空闲连接数
      minimum-idle: 10
      # 池中最大连接数,包括闲置和使用中的连接
      maximum-pool-size: 20
      # 此属性控制从池返回的连接的默认自动提交行为。默认为 true
      auto-commit: true
      # 允许最长空闲时间
      idle-timeout: 30000
      # 此属性表示连接池的用户定义名称,主要显示在日志记录和 JMX 管理控制台中,以标识池和池配置。 默认值:自动生成
      pool-name: custom-hikari
      #此属性控制池中连接的最长生命周期,值 0 表示无限生命周期,默认 1800000 即 30 分钟
      max-lifetime: 1800000
      # 数据库连接超时时间,默认 30 秒,即 30000
      connection-timeout: 30000
      # 连接测试 sql 这个地方需要根据数据库方言差异而配置 例如 oracle 就应该写成  select 1 from dual
      connection-test-query: SELECT 1

mybatis:
  mapper-locations: classpath:mappers/*.xml

hbase-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->
<configuration>
    <property>
        <name>hbase.regionserver.wal.codec</name>
        <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
    </property>
 
 
    <!-- 注意:为了开启hbase的namespace和phoenix的schema的映射,在程序中需要加这个配置文件,另外在linux服务上,也需要在hbase以及phoenix的hbase-site.xml配置文件中,加上以上两个配置,并使用xsync进行同步-->
    <property>
        <name>phoenix.schema.isNamespaceMappingEnabled</name>
        <value>true</value>
    </property>
 
    <property>
        <name>phoenix.schema.mapSystemTablesToNamespace</name>
        <value>true</value>
    </property>
</configuration>

StudentMapper.xml

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="com.hbase.phoenix.mapper.StudentMapper">
    <select id="queryAll" resultType="com.hbase.phoenix.pojo.Student">
        SELECT * FROM "school"."stu"
    </select>
 
    <insert id="save">
        UPSERT INTO "school"."stu" VALUES( #{id}, #{name}, #{age} )
    </insert>
 
    <select id="queryById" resultType="com.hbase.phoenix.pojo.Student">
        SELECT * FROM "school"."stu" WHERE id=#{id}
    </select>
 
    <delete id="deleteById">
        DELETE FROM "school"."stu" WHERE id=#{id}
    </delete>
</mapper>

PhoeinxApplication

mport org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
@MapperScan("com.hbase.phoenix.mapper")
public class PhoeinxApplication {
    public static void main(String[] args) {
        SpringApplication.run(PhoeinxApplication.class);
    }
}

Student


package com.hbase.phoenix.pojo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private String id;
 
    private String name;
 
    private String age;
}

StudentMapper

import com.hbase.phoenix.pojo.Student;
import org.apache.ibatis.annotations.Mapper;
 
import java.util.List;
@Mapper
public interface StudentMapper {
    List<Student> queryAll();
 
    void save(Student student);
 
    Student queryById(String id);
 
    void deleteById(String id);
}

PhoenixTest

import com.hbase.phoenix.mapper.StudentMapper;
import com.hbase.phoenix.pojo.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import java.util.List;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class PhoenixTest {
    @Autowired
    private StudentMapper studentMapper;
 
    @Test
    public void nihao(){
        System.out.println("fjaidsfj");
    }
 
    @Test
    public void queryAll() {
        List<Student> StudentList = studentMapper.queryAll();
        if (StudentList != null) {
            for (Student student : StudentList) {
                System.out.println(student);
            }
        }
    }
 
    @Test
    public void save() {
        studentMapper.save(new Student("1003", "Dallas", "6666"));
        Student Student = studentMapper.queryById("1003");
        System.out.println(Student);
    }
 
    @Test
    public void update() {
        studentMapper.save(new Student("1001", "小五", "99999"));
        Student Student = studentMapper.queryById("1001");
        System.out.println(Student);
    }
 
 
    @Test
    public void delete() {
        studentMapper.deleteById("1003");
        Student Student = studentMapper.queryById("1001");
        System.out.println(Student);
    }
}

二、安装使用DBeaver操作HBase

DBeaver下载:https://dbeaver.io/download/

  • 1、下载DBeaver安装包dbeaver-ce-7.1.3-win32.win32.x86_64.zip,解压后进入目录,在配置文件dbeaver.ini中增加以下配置指定jdk
-vm
C:\Program Files\jdk1.8.0_66\bin
  • 2、运行dbeaver.exe,选择创建新连接,选中“Hadoop/BigData”栏的“Apache Phoenix”点击下一步,编辑驱动设置中添加驱动文件phoenix-5.0.0-HBase-2.0-client.jar,点选“找到类”即可搜索到对应的驱动类,如图所示;

参考:
https://blog.csdn.net/S1124654/article/details/125586358

https://www.jianshu.com/p/18e09c184865

https://blog.csdn.net/dndndnnffj/article/details/121801897

https://www.jianshu.com/p/d4327f420169

https://blog.csdn.net/qq_21299835/article/details/123010250

相关文章

网友评论

    本文标题:Hbase——Springboot集成mybatis+phoen

    本文链接:https://www.haomeiwen.com/subject/ywcmrdtx.html