侵权投诉
搜索
更多>> 热门搜索:
订阅
纠错
加入自媒体

基于HBase的工业大数据存储实战

2018-12-25 10:05
格创东智
关注

HBase解决方案:

MySQL + OSS的设计方案有两个问题:第一,原本属于同一条数据的内容由于数据本身大小的原因无法存储到一行里面,导致后续查下需要访问两个存储系统;第二,由于MySQL不支持动态列的特性,所以属于同一个面板组的数据被拆成多行存储。

针对这两个问题,格创东智的大数据团队进行了分析,认为这是 HBase 的典型场景,原因如下:

——HBase 拥有动态列的特性,支持万亿行,百万列;

——HBase 支持多版本,所有的修改都会记录在 HBase 中;

——HBase 2.0 引入了MOB(Medium-Sized Object)特性,支持小文件存储。

HBase 的 MOB 特性针对文件大小在 1k~10MB 范围的,比如图片,短视频,文档等,具有低延迟,读写强一致,检索能力强,水平易扩展等关键能力。

格创东智的大数据团队使用这三个功能重新设计上面 MySQL + OSS 方案。结合应用场景的两大查询需求,将面板组 id 作为 HBase 的 Rowkey,在创建表的时候打开 MOB 功能,如下:

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

上面我们创建了名为 glass 的表,IS_MOB 属性说明列簇 c 将启用 MOB 特性,MOB_THRESHOLD 是 MOB 文件大小的阈值,单位是字节,这里的设置说明文件大于 2k 的列都当做小文件存储。大家可能注意到上面原始方案中采用了 OSS 对象存储,那我们为什么不直接使用 OSS 存储面板特征数据呢,如果有这个疑问,可以看看下面表的性能测试:

对比属性对象存储云 HBase建模能力KVKV、表格、稀疏表、SQL、全文索引、时空、时序、图查询查询能力前缀查找前缀查找、过滤器、索引性能优优,特别对小对象有更低的延迟;在复杂查询场景下,比对象存储有10倍以上的性能提升成本按流量,请求次数计费,托管式,在高并发,高吞吐场景有更低的成本适合访问频率低的场景扩展性优优适用对象范围通用<10MB

String CF_DEFAULT = "c";根据上面的对比,使用 HBase MOB特性来存储小于10MB的对象相比直接使用对象存储有一些优势。
我们现在来看看具体的表设计,使用面板id作为列名。我们只使用了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());
……
put.addColumn(CF_DEFAULT.getBytes(),glassIdn.getBytes(), featuren.getBytes());
table.put(put);

用户如果需要根据面板组id获取所有面板数据,可以使用下面方法:

Get get = new Get(groupId.getBytes());
Result re=table.get(get);

这样我们可以拿到某个组id对应的所有面板数据。如果需要根据组id+面板id查找某个面板的具体数据,看可以使用下面方法:

Get get = new Get(groupId.getBytes());
get.addColumn(CF_DEFAULT.getBytes(), glassId1.getBytes())
Result re=table.get(get);

经过上面的改造,在2台 HBaseWorker 节点内存为32GB,核数为8,每个节点挂载四块大小为 250GB 的 SSD 磁盘,并写入100W 行,每行有1W列,读取一行的时间在100ms-500毫秒左右。在每行有1000个face的情况下,读取一行的时间基本在20-50毫秒左右,相比之前的10秒提升200~500倍。

从下面这张对比表,我们可以清楚的看到HBase方案的巨大优势。

对比属性对象存储MySQL+对象存储HBase MOB读写强一致YNY查询能力弱强强查询响应时间高高低运维成本低高低水平扩展YYY

现在,我们已经将面板特征数据存储在Cloudera HBase 之中,这个只是数据应用的第一步,如何将隐藏在这些数据背后的价值发挥出来?这就得借助于数据分析,在这个场景就需要采用机器学习的方法进行操作。我们可以借助大数据分析工具Spark 对存储于 HBase 之中的数据进行分析,而且 Spark 本身支持机器学习的。最后,用户就可以通过访问 HBase 里面已经挖掘好的特征数据进行其他的应用了。

本文作者:格创东智大数据工程师王子超(转载请注明作者及来源)

<上一页  1  2  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号