基于HBase的工业大数据存储实战物品总线实现

基于HBase的工业大数据存储实战物品总线实现

随着工业4.0时代的到来,工业互联网和企业的智能化、信息化都将不断推进,传统的工业实时数据库和关系数据库已经难以完全胜任工业大数据的存储,以HBase为代表的NoSQL数据库正在蓬勃发展,其完全分布式特征、高性能、多副本和灵活的动态扩展等特点,使得HBase在工业大数据的存储上拥有强大的优势,打破了流程工业生产中的数据壁垒效应,促进了生产水平和管理水平的大幅提升。本期格物汇,就来给大家介绍HBase数据库及格创东智相关实战案例。

了解HBase

HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。它利用普通硬件配置就能处理由成千上万行和列组成的大型数据。与Google Bigtable有很多不同之处,比如使用的是Hadoop HDFS而不是GFS,以及通过MapReduce来处理海量数据,而不是Chubby协同服务。

与传统数据库相比,HBASE具备多重优势:

线性扩展,可以根据需求增加节点。

数据存储在hdfs上,有健全备份机制。

通过zookeeper协调访问速度快。

HBase实战案例

为了更好地展示如何利用HBase在人工智能场景下进行应用,我们将以某半导体显示企业为例,分析格创东智大数据团队是如何设计一个快速查找面板特征系统的。

案例背景

该公司业务场景中含有大量面板相关特征,每张面板约3.2k字节,这些面板又被分组,每个面板属于某一组。现有的业务需求主要包括两个方面:

根据组id查找该组下的所有面板;

根据组id+面板id查找具体面的数据;

原有方案:MySQL+OSS

之前由于业务量较小,用MySQL+OSS作为主要存储解决方案,但这导致查询过程复杂且时间长(10秒左右),无法满足快速增长需求。

HBase解决方案

针对原方案的问题,格创东智团队选择使用Hbase,因为它支持动态列,无需像MySQL那样拆分表结构;同时支持多版本记录,并引入MOB(Medium-Sized Object)功能,对于文件大小介于1k~10MB之间,如图片或短视频等提供低延迟读写能力及检索能力强度易扩展等关键能力。

表设计与优化

结合两大查询需求,将face_id作为Rowkey,在创建表时打开MOB功能:

create 'glass', {NAME=>'c', IS_MOB=>true, MOB_THRESHOLD=>2048}

这样我们只需要一张表替换掉原来三张表,同时启用了MOB功能对小文件进行优化。此外,对于对象类型的小文件直接使用对象存储云会出现一些问题,如前缀查找性能不佳以及成本计费模式限制其高并发、高吞吐场景下的应用,因此选择直接采用HBASE MOB技术进行优化,以达到更好的查询性能及成本效益。在实际操作中,只需要简单修改插入方法即可正常使用:

Put put = new Put(groupId.getBytes());

put.addColumn(CF_DEFAULT.getBytes(), glassId1.getBytes(), feature1.getBytes());

put.addColumn(CF_DEFAULT.getBytes(), glassId2.getBytes(), feature2.GetBytes());

// ...

table.put(put);

用户可以通过以下方式获取指定group_id下的所有face_data:

Get get = new Get(groupId.getByte())

Scan scan = table.getConfiguration().getScan();

scan.addFamily(Bytes.toBytes("c"));

ResultScanner scanner = table.getConfiguration().getTable(get).getScanner(scan);

for (Result result : scanner) {

String faceId = Bytes.toString(result.getValue(Bytes.toBytes("c"), Bytes.toBytes(faceId)));

// 处理结果...

}

scanner.close();

以上就是基于Hbase实现的一系列优化策略,它极大地提高了系统响应速度,为企业提供了一套更加高效、大规模集成的人工智能平台,从而助力行业内各类创新项目取得成功。