hbase查询速度优化

有些话、适合烂在心里 提交于 2020-04-08 10:50:06

优化思路

1.构建良好的索引

2.查询时只查需要的字段

3.java使用habse原生方式链接hbase

spring集成的hbase链接和查询方式

@Configuration
public class HbaseConfig {

    @Bean
    public HbaseTemplate hbaseTemplate(@Value("${hbase.zookeeper.quorum}") String quorum,
                                       @Value("${hbase.zookeeper.port}") String port,
                                       @Value("${hbase.zookeeper.znode.parent}") String znodeParent) {
        HbaseTemplate hbaseTemplate = new HbaseTemplate();
        org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", quorum);
        conf.set("hbase.zookeeper.port", port);
        conf.set("zookeeper.znode.parent", znodeParent);
        hbaseTemplate.setConfiguration(conf);
        hbaseTemplate.setAutoFlush(true);
        return hbaseTemplate;
    }
}

查询
private final HbaseTemplate hbaseTemplate;

public HbaseQuesDynamic getById(String quesId) {
    return hbaseTemplate.get(HbaseQuesDynamic.TABLE_NAME, quesId,
            (result, i) -> HbaseResultUtils.get(result, HbaseQuesDynamic.class));
}

hbase原生链接方式

@org.springframework.context.annotation.Configuration
public class HbaseNativeConfig {

    private static final Logger logger = LoggerFactory.getLogger(HbaseNativeConfig.class);
    @Value("${hbase.zookeeper.quorum}")
    private String quorum;
    @Value("${hbase.zookeeper.port}")
    private String port;
    @Value("${hbase.zookeeper.znode.parent}")
    private String znodeParent;
    private Map<String, String> config;

    @Bean
    public Configuration configuration() {
        Configuration configuration = HBaseConfiguration.create();
        logger.info("zookeeper node : {}", quorum);
        logger.info("znodeParent is : {}", znodeParent);
        configuration.set("hbase.zookeeper.quorum", quorum);
        configuration.set("hbase.zookeeper.port", port);
        configuration.set("zookeeper.znode.parent", znodeParent);

        // 将config中的配置加入到configuration中
        if (config != null && !config.isEmpty()) {
            config.forEach(configuration::set);
        }
        return configuration;
    }

    @Bean
    public Connection getConnection() {
        Connection connection = null;
        try {
            connection = ConnectionFactory.createConnection(configuration());
        } catch (IOException e) {
            logger.info("get baseAdmin exception {}", e.getMessage());
            e.printStackTrace();
        }
        return connection;
    }

    @Bean
    public HBaseAdmin getHBaseAdmin() {
        try {
            Connection connection = getConnection();
            return (HBaseAdmin) connection.getAdmin();
        } catch (IOException e) {
            logger.info("get baseAdmin exception {}", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    public String getQuorum() {
        return quorum;
    }

    public void setQuorum(String quorum) {
        this.quorum = quorum;
    }

    public String getZnodeParent() {
        return znodeParent;
    }

    public void setZnodeParent(String znodeParent) {
        this.znodeParent = znodeParent;
    }

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

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

查询
@Autowired
private Connection connection;//原生连接方法

public HbaseQuesDynamic getById(String quesId) {
    if(null == quesId){
        return null;
    }
    Table table = null;
    byte[] rowKey = Bytes.toBytes((String) quesId);
    try {
        Result result = null;
        table = connection.getTable(TableName.valueOf(HbaseQuesDynamic.TABLE_NAME));
        Get get = new Get(rowKey);
        result = table.get(get);
        return HbaseResultUtils.get(result, HbaseQuesDynamic.class);
    } catch (IOException | IllegalAccessException | InstantiationException e) {
        LOGGER.error("query error , message:{}", e.getMessage());
        e.printStackTrace();
    } finally {
        closeTable(table);
    }
    return null;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!