优化思路
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;
}
来源:oschina
链接:https://my.oschina.net/u/3740959/blog/3224492