自定义spring-boot-starter-hbase

项目背景

  1. 公司越来越多的项目采用spring-boot+hbase的查询,由于公司的hbase版本为1.x的CDH版本,本身没有spring-boot的starter,故写出一个spring-boot-starter-hbase提供给各方项目使用。
  2. 自定义的spring-boot的hbase starter,为hbase的query和更新等操作提供简易的api并集成spring-boot的auto configuration。

代码

代码较多,见github,参考了spring-data-hadoop中hbase的api设计

github地址

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

打包

修改相关的maven私服地址

gradle clean install uploadArchives

使用方式

依赖

compile "jthink:spring-boot-starter-hbase:0.0.1"

集成

在spring-boot项目的application.properties文件中加入spring.data.hbase.quorum配置项,并赋予正确的值

使用

query

  1. 将上述配置项赋予正确的值
  2. 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;
  }
}
  1. 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);
  }
}
  1. query操作
import com.jthink.skyeye.data.hbase.api.HbaseTemplate;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

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;
  }
}

update等

  1. 将上述配置项赋予正确的值
  2. update、delete、put操作
import com.jthink.skyeye.data.hbase.api.HbaseTemplate;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@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);
  }
}

其他

不可以满足需求的可以使用hbaseTemplate暴露出来的getConnection()方法

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值