SpringBoot整合HBase

    本文演示SpringBoot整合HBase。
一、项目搭建
    新建一个SpringBoot项目,引入依赖:

<properties>
            <java.version>1.8</java.version>
            <hbase.version>2.1.0</hbase.version>
        </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--swagger配置-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.8.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--hbase配置-->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>${hbase.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>${hbase.version}</version>
        </dependency>
        <!--lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--swagger配置-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.8.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
    </dependencies>


二、配置文件
    配置项目端口号及Hbase配置:

hbase:
  config:
    hbase:
      master: 127.0.0.1:16010
      zookeeper:
        property:
          clientPort: 2181
        quorum: 127.0.0.1
server:
  port: 8989


三、配置类
①Swagger配置类

@Configuration
@EnableSwagger2
public class Swagger2Configure {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any()).build();
    }

    /**
    定义展示的信息,例如标题、描述、版本等
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("api文档").description("api文档").version("1.0").build();
    }
}


②Hbase配置类

@org.springframework.context.annotation.Configuration
@EnableConfigurationProperties(HbaseProperties.class)
public class HbaseConfig {
    
    private final HbaseProperties prop;

    public HbaseConfig(HbaseProperties properties) {
        this.prop = properties;
    }

    @Bean
    public Configuration configuration() {
        Configuration configuration = HBaseConfiguration.create();
        Map<String, String> config = prop.getConfig();
        config.forEach(configuration::set);
        return configuration;
    }
    
    @Bean
    public Connection getConnection() throws IOException{
        return ConnectionFactory.createConnection(configuration());
    }
}

③Hbase属性配置类

@ConfigurationProperties(prefix = "hbase")
public class HbaseProperties {

    private Map<String, String> config;

    public Map<String, String> getConfig() {
        return config;
    }

    public void setConfig(Map<String, String> config) {
        this.config = config;
    }
}

④Hbase客户端工具类

@Component
@Slf4j
public class HbaseClientUtils {

    private final Connection connection;

    public HbaseClientUtils(Connection connection) {
        this.connection = connection;
    }

    /**
     * 创建表
     * - 只有一个列族
     * @param tableName 表名
     * @param colFamily 列族
     * @throws IOException
     */
    public void createTable(String tableName, String colFamily) throws IOException {
        TableName table = TableName.valueOf(tableName);
        try (HBaseAdmin admin = (HBaseAdmin) connection.getAdmin()) {
            if (admin.tableExists(table)) {
                log.warn("表[{}]已存在!", tableName);
                return;
            }
            ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(colFamily))
                    // 设置数据版本数量
                    .setMaxVersions(1)
                    // 设置副本数,默认是3
                    .setDFSReplication((short) 2)
                    .build();
            TableDescriptor tableDes = TableDescriptorBuilder.newBuilder(table).setColumnFamily(cfd).build();
            admin.createTable(tableDes);
        }
    }

    /**
     * 列出hbase中所有的表
     */
    public List<String> listTables() throws IOException {
        List<String> tables = new ArrayList<>(8);
        try (HBaseAdmin admin = (HBaseAdmin) connection.getAdmin()) {
            TableName[] tableNames = admin.listTableNames();
            for (TableName tableName : tableNames) {
                tables.add(tableName.getNameAsString());
            }
        }
        return tables;
    }
}


    
四、编码实现
    ①编写Controller类及测试请求方法:

@RestController
@RequestMapping(value = "/")
@RequiredArgsConstructor
@Api(tags = "HBase Api")
public class HbaseController {

    private final HbaseClientUtils hbaseClientUtils;

    @GetMapping("list")
    @ApiOperation("列出hbase中所有的表")
    public List<String> list() throws Exception{
        List<String> list = hbaseClientUtils.listTables();
        return list;
    }

    @PostMapping("create")
    @ApiOperation("创建表")
    public void create() throws Exception{
        hbaseClientUtils.createTable("wx666","wx666");
    }
}

    ②启动类

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}


    ③本地Docker启动Hbase后,启动项目并访问http://localhost:8989/swagger-ui.html:


测试验证OK。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合HBase,你可以按照以下步骤进行操作: 1. 添加HBase依赖:在`pom.xml`文件中添加HBase的依赖。 ```xml <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>版本号</version> </dependency> ``` 2. 配置HBase连接:在`application.properties`(或`application.yml`)文件中添加HBase的连接配置。 ```properties # HBase连接配置 hbase.zookeeper.quorum=ZooKeeper地址 hbase.zookeeper.property.clientPort=ZooKeeper端口号 ``` 3. 创建HBase连接配置类:创建一个Java类,用于配置HBase连接。 ```java @Configuration public class HBaseConfiguration { @Value("${hbase.zookeeper.quorum}") private String quorum; @Value("${hbase.zookeeper.property.clientPort}") private String clientPort; @Bean public Configuration configuration() { Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", quorum); config.set("hbase.zookeeper.property.clientPort", clientPort); return config; } @Bean public Connection connection() throws IOException { return ConnectionFactory.createConnection(configuration()); } } ``` 4. 创建HBase操作类:创建一个Java类,用于封装HBase的操作方法。 ```java @Repository public class HBaseRepository { @Autowired private Connection connection; public void putData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException { TableName tName = TableName.valueOf(tableName); Table table = connection.getTable(tName); Put put = new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value)); table.put(put); table.close(); } public String getData(String tableName, String rowKey, String columnFamily, String column) throws IOException { TableName tName = TableName.valueOf(tableName); Table table = connection.getTable(tName); Get get = new Get(Bytes.toBytes(rowKey)); Result result = table.get(get); byte[] valueBytes = result.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes(column)); String value = Bytes.toString(valueBytes); table.close(); return value; } } ``` 这里只提供了示例的插入和查询操作方法,你可以根据实际需求扩展其他操作。 现在,你可以在Spring Boot应用程序中使用`HBaseRepository`类来执行HBase的操作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值