【问题标题】:Spring Boot REST with Hadoop HBASESpring Boot REST 与 Hadoop HBASE
【发布时间】:2018-04-25 23:19:44
【问题描述】:

我希望构建一个简单的 RESTFull API 来访问 HBase。 我查看了 Python HappyBase,但我的集群是 kerberized。现在我进入了春天

我曾经使用 Solr CloudSpring Boot 制作简单的 API REST。

是否可以对 Hbase 做同样的事情?
我不知道是否必须使用 Spring Boot 'Yarn App' => https://spring.io/guides/gs/yarn-basic/

Spring Hadoop。 => https://projects.spring.io/spring-hadoop/

只想要一个非常简单的 API。

感谢您的帮助。

【问题讨论】:

    标签: spring hadoop spring-boot hbase


    【解决方案1】:

    我写了一个简单的演示项目,在没有xml的spring boot restful应用程序中使用hbase。

    这个demo主要依赖spring-data-hadoop和hbase-client。

    gradle 依赖:

    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile 'org.springframework.data:spring-data-hadoop:2.5.0.RELEASE'
    compile('org.apache.hbase:hbase-client:1.3.1'){
        exclude group :'log4j',module:'log4j'
        exclude group :'org.slf4j',module:'slf4j-log4j12'
        exclude group: 'javax.servlet', module: 'servlet-api'
    }
    compile('org.springframework.boot:spring-boot-configuration-processor')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    

    在spring boot的application.properties中配置hbase连接参数(无XML!):

    spring.data.hbase.zkQuorum=192.168.0.109:2181
    spring.data.hbase.zkBasePath=/hbase
    spring.data.hbase.rootDir=file:///home/hbase-1.2.2
    

    类 HbaseProperties.java:

    @ConfigurationProperties(prefix = "spring.data.hbase")
    public class HbaseProperties {
        // Addresses of all registered ZK servers.
        private String zkQuorum;
    
        // Location of HBase home directory
        private String rootDir;
    
        // Root node of this cluster in ZK.
        private String zkBasePath;
    
        // getters and setters...
    
    }
    

    HbaseConfig.java,将配置注入HbaseTemplate:

    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.hadoop.hbase.HbaseTemplate;
    
    @Configuration
    @EnableConfigurationProperties(HbaseProperties.class)
    public class HbaseConfig {
    
        @Autowired
        private HbaseProperties hbaseProperties;
    
        @Bean
        public HbaseTemplate hbaseTemplate() {
            org.apache.hadoop.conf.Configuration configuration = HBaseConfiguration.create();
            configuration.set("hbase.zookeeper.quorum", this.hbaseProperties.getZkQuorum());
            configuration.set("hbase.rootdir", this.hbaseProperties.getRootDir());
            configuration.set("zookeeper.znode.parent", this.hbaseProperties.getZkBasePath());
            return new HbaseTemplate(configuration);
        }
    
    }
    

    Service类,我们现在可以使用配置的HbaseTemplate了:

    import javax.annotation.PostConstruct;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.hadoop.hbase.HbaseTemplate;
    import org.springframework.stereotype.Service;
    
    import com.zql.hbasedemo.vo.Quote;
    
    @Service
    public class FeedService {
        @Autowired
        private HbaseTemplate hbaseTemplate;
    
        @PostConstruct
        public void test(){
            Quote quote = new Quote();
            quote.setEventType("ft");
            quote.setHandicap("4");
            quote.setMarket("OU");
            quote.setMatchId("27350208");
            quote.setSelection("OVER");
            quote.setPrice("1.93");
            saveQuote(quote);
        }
    
        public Quote saveQuote(Quote quote) {
            hbaseTemplate.put("quotes", quote.getMatchId(), "data", quote.getMarket() + ":" + quote.getSelection(),
                quote.getPrice().getBytes());
            return quote;
        }
    }
    

    休息控制器。

    @RestController
    public class FeedController {
        @Autowired
        private FeedService feedService;
    
        @SuppressWarnings({ "unchecked", "rawtypes" })
        @PostMapping(value = "/feed/quote", consumes = "application/json", produces = "application/json")
        public ResponseEntity<Quote> saveQuote(@RequestBody Quote quote) {
            Quote result = feedService.saveQuote(quote);
            return new ResponseEntity(result, new HttpHeaders(), HttpStatus.OK);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2012-09-02
      • 2017-02-12
      • 2019-01-24
      • 2020-10-24
      相关资源
      最近更新 更多