您好,欢迎来到六九路网。
搜索
您的当前位置:首页电力大数据平台中HBase的实时性优化方案

电力大数据平台中HBase的实时性优化方案

来源:六九路网
技术方案|

2019.1数据通信

Technology Scheme I/

电力大数据平台中

HBase的实时性优化方案

方威胡晓勤(四川大学计算机学院610065)

摘要:近年来,随着大数据场景的兴起,RDBMS由于其自身的扩展性和可用性限制无法满足企业需求。 NoSQUt据库的出现弥补了传统关系型数据库在大数据领域的不足。NoSQL数据库本身具有良好的扩展性、容错 性以及实时访问、存储TB级别数据的特点。

HBase就是以HDFS和MapReduce为基础的开源NoSQL型分布式数据库,它不支持二级索引、事务和批量数 据处理时延长等⑴。本文以HBase和Spark为基础,增加插件使HBase支持SQL语句和二级索引,通过修改Spark 源码,提升对HBase数据的本地化计算级别。插件对HBase无侵入、低輕合,支持用户输入SQL语句,把输入字段 转化为HBase的列族和列限定符,根据不同的场景选取不同的执行方案。MapReduce计算框架具有计算效率低, 无法利用HBase的读写缓存的缺陷[1],原始Spark框架不能感知HBase数据分片。本文改进Spark能感知HBase 数据分片,对HBase中数据进行高级别本地化计算。最终,将本文设计的系统与业内常用的Hive +HBase方案对 比常用SQL消耗的时延[3]。通过实验得出,本文构建的优化方案在没有缺失HBase的优良特性的基础上加强了 部分应用场景的实时性。

关键词:HBase Coprocessor; Spark;二级索引

1绪论

电力系统的设备采集数据具有稀疏和写多读少的

RDBMS中麟的SQL语句、二^索引和事务。这些缺 失限制了 NoSQL数据库的实用性和部分使用场景的实 时性。HBase是目前最常用的NoSQL型数据库,其底 层文件系统是HDFS,能有效避免单点故障,同时辟 读写响应快、扩展性高等优点[2],可以满足大部分大数 据场景下的业务需求。但HBase也没有避免NoSQL 的常见贿。1.2研究内容

本文的研究目标:对HBase和Spark进行深入研 究。设计并实现一个HBase插件,将SQL语句按不同 场景转化为HBase的API、非主键索引或Spark Job,提 升HBase的实用性和实时性;设计并实现一^ Spark算 子,使其感知HBase的Region分区,充分利用 RegionServer的读缓存和写缓存,对HBase集群中的数 搬区进行高级别本地化计算。

1.1研究背景

特点,非常适合使用HBase进行存储。电力大数据系 统中,麵物联网对电力设备的各相电流、各相电压、 正向有功和反向有功等电位信息进行采集。采集频率 根据设备的重要程度而增加,例如变压器采集频率为1 嫌微照明设躲集频率为5嫌不同设备需要 采集的点位信息也不尽相同,因此数据是稀疏的。采 集数据随着时间推移需要不断推向数据存储层进行持 久化,需要存储系统具有髙扩展性和高写吞吐量。系

统中JS0N格式的采集数据包使用HTIP协议进行交 互,因此数据是半结构化的。

NoSQL _

库相比RDBMS更加适合这类应用场

景,但是为了提高系统的吞吐量和扩展性而舍弃了

11

B

技术方案

Technology Scheme

2

电力大数据平台关键技术

电力大数据平台的核心是HBase,所有的采集设 备指标数据将持久化到HBase中。对HBase进行深入 研究鞋鍾要的。

数据通信2019.1

Region的返回结给客户步3.

Spark。Spark是新一代大数据计算框架。

Spark相比MapReduce具有基于内存if負;、可以完成复 杂的迭代以及DAG Scheduler等优势,运行效率远超MapReduce 〇

2.1 HBase数据模型和物理模型

HBase只支持主键索引,有三种查询方式。一是 精确行键访问,实现毫秒级别响应;二是行键正则访 问,实时性较差;三是全表扫描,实时性很差[4]〇列族

Schema的一列属于一^歹IJ族。

表1 HBase中电力数据模型

3基于HBase的实时性优化方案及应用

本文架构如下图1所示,做了以下两处改进:1■碰Spark对HBase数据分片的感知。实现了

针对以HBase表作为数据源的算子,该算子实现了对 HBase表中数据进行髙级别本地化if負:。

2.改进HBase的实用性和实时性。实现一个增 强SQL徽插件,使HBase支持SQL语句操作;建立 二级索引,提升HBase对非IWkey字段操作的实

CeEaan F_l lirprof

Culm

if itir

T iaa Mncr

种:11

MWH'P

PMKT

ra

TiTlTI

&IIH FullY:[ir〇

VITdIihri_ MudViiLi*ILOIsTKprodra!〇l»SM»r2»棚

dih

i ETccfral

1#

_iUK

ft

TI£uib07

ZD刚

时性。

如表1所示,将采集设备名作为行键,属性和信息 是列族。设备devl的a相电压(UA)110kv,b相电压 (UB)35kv,额定功率(P)50000kvA,设备dev2的温度为 18丈,a相电压为10kv。不同设备的采集信息不同,因 此

物理上,底层存储的是以RowKey, ColuimiFamily: ColmmiQualifier,数据类型,版本标识的多层嵌套有序 Map结构的数据,同时具有稀疏,分布式,持久化,多维度雜点。

表中的行都按照Rowkey的字典序排列,表在行的 方向上分割为多个Region

RegionServer管理多个

Region。Region由一^或者多个Store组成,每个Store 代表一^列族,每个Store由一^MeraStore或0至多个 StoreFile构成,StoreFile便是HDFS中的文件。 MemStore负责缓存增删改的数据。StoreFile、HLog存 在HDFS中,依靠HDFS备份机制实现容错。当集群中 出现单点故障时可以備HLog进行隊

图1本文系统架构

3.1实现HBase数据高级^本地化计算

Spark通过缓存和划分有向无环图,计算效率高; 通过算子血统和check point实现髙容错。如果计算时 数据本地化级别达到进程本地化,性能最好;如果只能 达到节点本地化和机架本地化则需要消耗一定的1/0, 通过BlockManager的getRemote()方法获取计算数 据[5]。Spark框架并不能感知HBase表的Region分布 从而进行进程本地化计算,只能操作HFile进行读写, 无法充分利用读缓存BlockCahce和写缓存MemStore, 因此需要麵实现4

RDD,感知HBase麵分片。

本文计算架构如图2所示,改进Spark感知HBase 的数据分片。Spark运行时,每个任务线程Task是工 utor 进程的 JVM 堆中。 本文将 Task 的 Partition 和 Re- gion—一对应起来,实现本地化计算。MapReduce直 接操作HFile,效率低,本文Spark Task利用Region的 BlockCache读缓存和MemStore写缓存读取源数据,加

2.2其他工具

1. JSQLParser。JSQLParser 是常用的 SQL 解析 器,可将SQL解析为Java类啟躺。

2.

Observer和 Endpoint。Observer 类似于 RDBMS 的触发 器,当发生某些事件的时候预定义的协处理器会被服 务器端J_〇 Endpoint类似于RDBMS的存储过程,客 户端可以调用Endpoint执行一段Server端代码,并将

协处理器。HBase的协处理器分为两种: 作在其Partition上的,Task需要将源数据读取到Exec­

12

技术方案|

2019.1数据通信

Technology Scheme I/

可臟。

修改Spark框架,实现一个对HBase表数据分片 感知的算子是本文改进HBase实时_

基础。使用髙

效的it算框架,可以完成大数据场景下索引表的快速 构建、按条件对非主键字段的高效更新以及高效迭代

3.2增强SQL插件

本文不修改HBase源码,实现了一个增强SQL插

图2本地化计算架构

件。增强SQL插條构如图1中增强SQL模块所示, 其麵流如下文。

用户職作HBase有两种途径,一种是使用原生 HBase Client API,另一种是使用SQL语句。使用SQL 操作HBase表是本文实现的重点。用户键入的SQL语 句字符串被JSQHW解析为Java的类层次结构,例 如:一^查询SQL语句字符串解析为Select对象,该对 象包含表名,字段名和where子句表达式。在图1 Schema转换和选取操作模块中,本文的工作主要将 JSQLParser解析出的字段映射为HBase行键、列限定 符等并选择下一步的执行策略,映射方案详见3.2.1。 撕策_

1. 2. 3.

含三种:

当SQL的where子句包含行键时,使用HBase 当SQL的where子句不包含行键但包含索引 当SQL的where子句不包含行键和索引字段

快读取效率。

改进的HBaseTableScanRDD,主要实现以下方法 (_Scala语言实现):

1. protected def getPartitions : Array [ Partition ] 〇 ^ 施在DAGScheduler贿任射細寸调用,且只调用一 次,返回这个RDD的所有Partition。本文定义 HBaseScanPartition继承 Partition,将 HBase 表的 Region樹噴序编号对应Partition的index方法的返回值,并额外定义Region的开始结束范围、所在节点。从而将HBase 的Region和Spaik的讨算分片Partition对应起来。

2. protected def getDependencies : Seq[ Dependency [_]] = deps。该方法只被调用一次,用于在 DAGScheduler对任务切分时返回血继依赖。由于此 RDD是直接贴近数据源,属于初始RDD,只需返回 臟,転没有舖〇

3. def compute ( split : Partition, context : TaskContext): Iterator[T]。

法对分区进衍返

回一个可遍历的结果。本文在该方法中,利用HBase 读写缓存,将HBase表中的每一行数据转换为Spark中 的一^ Row对象,Row中的域对应表中的字段。

4. protected def getPreferredLocations ( split: Partition): Seq[String]。指定优先位置,输入参数是 split分片,输出结果是一组优先的节点位置。对于每 个Partiton,最佳计^节点是其对应的Region,如果对应 节点压力过大,将会选择其他节点进行计算。本文返 回的优先节点只会是HBase集群上的RegionServer,如 果所有RegionServer资源紧缺,Spark的task将会等待, 考虑到数据量的规模,花费少量等待的延时避免长时 间的耗费网络资源I/O是值得的。

HBase数据分区Region与|雕节点的映射情况都 存储在-ROOT _表和.META.表中,这两张表的结构 和普通用户表一样。HBase将这两张表的地址存储在 Zookeeper集群中,降低HMaster的压力,提升HBase的

Api直接操作麵;

字段时,麵索引操作时,使S Spark操作|雕。

此外,本文考虑到HBase连接线程的复用性,在图 1的HTableConnectionPool模块中使用线程池保存连接 HBase的线程。

3.2.1 Schema

HBase在创建数据表时必须指定表名和列族,插 入数据时还需要指定行键和值。这与标准的SQL语句 只需要包含列字段名不R。因此,需要对Schema字段 进行转化,把SQL中的字段转化为HBase中的主键、列 族以及列限定符。

本錄用规格化的施处理SQL i詢的字段。

表2 Schema字段转化要求

ICrfHilfnlpcrt

cfiwtor«f ucr.,B

Efcfcr_a

13

B

技术方案

Technology Scheme

列族在可以自独定义其下的存储结构,为了不丢 失这个特匣,因此建表、操作数据时必须在SQL中指定 列族。

建■,如“create table student (info F, score F)新建名为student的表,用F指代列族类型,不需要指 定列名。插人新数据时必须指定行键,相当于RDBMS 的主键,用“rowkey”指代行键类型。其它字段类型用 “列族_列名”指代。插入语句“insert into student (rowkey, info_name, info_age, scorejmth, score_english) Values(‘00Q2’,‘张三’,‘18’,‘94’,‘88’)”。类似其 它SQL语句,如索引创建、删除、更新和查询等SQL语 句

“列制名”指定非獅!1类型。

数据通信2019.1

位信息为列值。稀疏的点位信息和随着时间推移需要 不断存储的数据使得HBase能最大程度发挥它的优 势。支持SQL语句后,能大幅度降低平台的使用门檻, 増加查询雖的实时性。

4实验结果及分析

为了对本文系统的性能进行评估,分析不足和优

点,本章将改进的HBase分布式系统和传统的 Hive +1^3^分布式系统进行SQL增改查消耗时延进 行测试,并雕果进行对比分析。

4.1实验环境

1.虚拟机

本文使用VMWare ESXi 6.3新建3个虚拟机,虚 拟机上安装Red Hat 4.4.7 _ 17操作系统,每个虚拟机

分配4&内存和2个

1她1(11)乂6〇11(11)0?11£5_ 2630

3.2.2二级索引构建策略

在HBase中,只有按RowKey的操作是一定能保 踐秒侧应。若只按其他字段进行操作只能全表扫 描,找出每一行符合要求的RowKey,然后通过RowKey 进行下一步的操作。当表中的数据太多时,全表扫描 会消耗大量时间以及集群资源。因此在HBase的非 RowKey字段上建立索引是非常有必要的。

1•创建索引。当增强SQL插件接收到创建索引语 句时,插件会在服务端创建一张索引表,表名为“原表 S_index”,行键是“列族名^1』名_值”的格式,列族名为 “index”,勸原数据行键。

2.

的prePut()、preDelete()方法,对数据表的增、删、改进 行拦截,拦截方法中获取列信息,按索引列值对索引表 第彌进行修改〇 RegionObserver以Region分区为单位, 在该Region上的Put/Delete操作都会被拦截,检查操 作中携带的数据中包含有索引的字段,将按照 索引表的Schema修改索引表中数据。

3.

v3 @ 2.40GHz 处理器。

2■软件环境

本文在虚拟机上部署分布式HBase系统和 Hive +HBase系统,HBase 系统包含一■个 Master、3 个 RegionServer 和3 个ZooKeeper,Yarn 集群包含一^ Re- sourceManager 和 3 个 NodeManager。

JDK 版本:1. 8.0_152、Scala 版本:2.11. 8、Hadoop 版本:2. 7. 4、HBase 版本:1. 2. 6、ZooKeeper 版本:

管理索弓|。重写协处理器BaseRegionObserver 3.4.10、Hive 版本:2.3.2、Spark 版本:2.1.0。

4.2实验数据

实验为电力系统数据,每行数据包含设备名称和 时间戳组成的IWKey,列值包括电流、电压、温度和正 向有功。

4.3测试与分析

1•插入测试

本节使用Insert SQL语句在HBase已有573M、 1.02G、2.16G数据时,插人1500万条数据测试,对比有 无索引两种情况平均每条数据的用时。测试结果 如下:

表3插入数据测试结果

ri■本 Viirq •ftXi H

d. iA»

l.Wf2. Iffi

#. in?4■测

Q•晒L

i. + at-.io

构建索引数据。如果是在用户表已经有大量数

据后再创建索引表,则必须对已有的数据建立索弓丨来 保证数据一致性。使用下文改进的Spark框架对已有 鎌

4•使用索引。当插件接受的SQL i吾句中不包含行 键字段时,查看是否有索引字段,当有多个索引字段 时,选取第一个字段索引,组织索引Rowkey,通过索引

mnmm

R〇wkey

本文对HBase和Spark的改进应用于电力大数据 系统的持久化存储和日常计算,主要负责对接物联网 的采集设备数据,是大数据平台的核心。HBase表中 主要以设备和时间戳组合为主键,设备的各个采集点

有索引插入数据比无索引插入数据耗时更多,这 是因为有索引时,需

RegionObserver的'Kl#理器

处理。但是由于插入操作都是基于写缓存进行处理

14

技术方案|

2019.1数据通信

Technology Scheme I/

据的插人性能产生一定的影响;本文的索引在按条件 操作下对作效轉常好,如果条件是范围,需要 碰索引表的機册。参考文献

的,只有在刷写缓存时才会将数据写入磁盘,因此耗时 不会随增加而显著变化。

2查询测试分析

查询使用“select * from t_remote_pulse where info _voltage = x”。其中x从表中已有电压等级随机取 出,测试结果为查询1500万次,对比每次查询的平均 用时。

表4根据非RowKey字段查询数据测试结果

BWU

< + t收iD■如

I.ILU

± 14;

' Ptti ft. K.i&T.3L

m?r

(LM

[1 ][美]乔治.HBase权威指南.出版社:人民邮电出版社 [2 ][美]迪米拉克.HBase实战.出版社:人民邮电出版社

[3 ]郭建伟•实战Hive和Hbase集成管理[J] •网络安全和信息

化,2018(10) :67 -71[4 ]冯心欣,胡淑英,邹其昊,徐艺文.基于HBase的车联网海

量数据查询[J ].福州大学学报(自然科学版),2018,46

(04) :466 -471

[5 ]程炎敏.基于大_ Spark架构的铁路货物在途时间预测

并行计^设计与实现[D].北京交通大学,2018

同数据量下,对非RowKey字段有索引,无索引以 及Hive + HBase查询耗时依次递增,且后两者远大于 前者。基于索引,只需要两次基于RowKey的RPC便 可以取得麵;无索引时只能进行全表扫描,耗时与数 据量线性相关;Hive + HBase采用MapReduce进行全 表扫描,耗时更长。

3•批量更新测试分析

使用“update t_remote_pulse set info_wp = y

whereinfo_voltage = x”。其中x从表中已有电压等级 随机取出,麵此SQL i詢对HBase麵行1500万次麵,平均每次时如下表。

表5按非RowKey字段条件批量更新数据的结果

Bast 钉索引耗时4审位^ 无3fe引Sptirk 耗时 iiive-'ll

TOft秒/条> i.:利心秒.•来 >(本文优ft)H秒■■浓丨本文优

79L^»fl. 212■1^ 392

I以腊\\,m■I.5I0

MS. 0^ft, mgylTI

作者简介:方威,四川大学计算机学院学生,主要研究大数据存 储和计算。

同数据量下,非Rc^Key有索引字段条件更新和 无索弓丨Spark Job条件更新比Hive有较大提升。基于 索引,只需要两次基于Rowkey的RPC操作即可;使用 改进的Spark Job对HBase数据进行高级别本地化更 新,效率也不错。

4.4实验结果综合分析

采用索引能够极大地提高HBase的非RowKey删 改查效率,并且不会随数据量增加而显著增加,满足大 数据的实时查询。基于改进Spark的批量修改厕以 达到大数据场景下快速响应的需求,并且节省了构建 索引而占用的相輕间。

本文也存在一些不足。不支持group by和having 类型的SQL i吾句;RegionObserver的prePut()函数需要 额外的查询开销区分插人操作和更新操作,这样对数

15

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 69lv.com 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务