千家信息网

Hbase如何使用

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍了Hbase如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。与mysql 对比:1 创建表 只需要指定famli
千家信息网最后更新 2025年02月02日Hbase如何使用

这篇文章主要介绍了Hbase如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

与mysql 对比:

1 创建表 只需要指定famliy 列族,不需要指定具体的列以及类型

@PostConstruct

public boolean createTable() {

log.info("create table start");

TableName tableName = TableName.valueOf(this.getTableName());

try {

Admin admin = connection.getAdmin();

if (!admin.tableExists(tableName)) {

log.info(tableName.toString() + "is not exist,create it");

HTableDescriptor tdesc = new HTableDescriptor(tableName);

HColumnDescriptor colDesc = new HColumnDescriptor(FAMILY);

tdesc.addFamily(colDesc);

admin.createTable(tdesc);

admin.close();

}

log.info("create table end");

return true;

} catch ( IOException e) {

log.error("create table error {} {}", tableName, e.getLocalizedMessage());

return false;

}

}

2 存储数据格式 HBASE value全部采用byte[] 字节数据形式存储

优势:1 不需要提前处理数据类型 统一采用 Bytes.toByte() so 存储速度更高

2 与原始数据类型相比,序列化后的byte[] 形式存储可以节省字节

3 可以根据rowKey 进行范围查找,这个需要将rowKey设计得当。

@Override

public List getByRange(String start, String end) {

try {

Table table = connection.getTable(TableName.valueOf(getTableName()));

Scan scan = new Scan();

scan.withStartRow(start.getBytes(), true)

.withStopRow(end.getBytes(), true);

ResultScanner scanner = table.getScanner(scan);

List list = new ArrayList<>();

for (Result result : scanner) {

list.add(getObj(result));

}

return list;

} catch (Exception e) {

log.error("HBase批量获取数据失败", e);

}

return Collections.emptyList();}

感谢你能够认真阅读完这篇文章,希望小编分享的"Hbase如何使用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0