大数据统一SQL引擎研究与设计
丁岩; 杨万祥; 汪清; 杨乐; 胡晓
【期刊名称】《《科技视界》》
【年(卷),期】2019(000)029
【总页数】4页(P1-4)
【关键词】大数据; 统一SQL引擎; 集成; 访问接口
【作 者】丁岩; 杨万祥; 汪清; 杨乐; 胡晓
【作者单位】南京中兴新软件有限责任公司 云计算研究院 江苏 南京 210012; 南京市公安局 科技信息化处信息中心 江苏 南京 210012
【正文语种】中 文
【中图分类】TP311.13
0 引言
目前大数据技术发展及应用越来越成熟[1-4],从工程或者技术的角度来看,大数据的核心是如何存储[5]、分析、挖掘海量[6]的数据来解决实际的问题。对于一个工程师或者分析师来说,如何查询和分析TB/PB 级别的数据是在大数据时代不可回避的问题,所以基于大数据的SQL 引擎成了大数据应用的重要手段[7-8]。
但对于传统的基于SQL 实现的应用如何快速移植到大数据平台上来以及在现有的多个SQL 引擎间如何进行选型是个难题。
1 大数据统一SQL 引擎相关技术研究
1.1 背景介绍
大数据可以说无所不在,社交媒体、传感设备、机器生成的信息、手持终端设备产生的信息等等,这些“新数据”有相当一大部分都是非结构化的,而且产生速度非常快,是大数据的一个重要部分。通过这些数据的分析,可以更加全面的了解用户的心理、习惯、喜好等等,从而为提供更好的产品和服务。 但是也不要忽略了,其实对于很多企业来说,有一些
传统的关系型数据可能会是他们更加关心的。比如曾经存储在企业数据库、商业智能应用等中的历史数据,企业为了保证在线平台的实时查询,不得不将这些数据导出来。 但这些庞大的历史数据中潜藏着巨大的价值,例如公安交警部门可以通过对车辆过车数据几月、几年的分析,从而分析出交通的拥堵情况、哪些线路需要优化等等。 这些数据虽然数据量庞大但是是关系型的,那么对于这类数据,自然的就会产生这样一种需求: 能不能利用已经非常熟悉的 SQL 来对这种类型的大数据进行分析?
或许有人会问,MapReduce[9]不能够做这样的分析吗? 为什么需要再开发一种新的技术呢? 原因有很多方面,但是最重要的原因有以下几个方面:
1) 与关系型数据库技术相比,Hadoop 还比较年轻,那么对于Hadoop 中的MapReduce 技术掌握的开发人员相对来说还是少数的。 开发人员需要额外的花费很多时间去学习这一新的技术框架,这不是很多人所愿意的。
2)如果去直接开发 MapReduce 程序去做数据仓库里面操作,比如最常见的连接查询,代码量、性能调优需要的精力等,都还是蛮大的。
3)提供大数据之上的 SQL 技术会吸引更多的人加入到大数据分析这个方向上来。 因为 SQL 的语法大家已经非常熟悉,这之上产品、工具、应用也已经有非常多,所以这是推动大数据广泛应用很吸引人的一件事。
正是在这种需求下, 现在市场上出现了大量的Hadoop 之上的 SQL 产品, 所有的这些产品基本都会去考虑以下几个方面, 这些也是衡量一个产品是否足够强大的标准:
1)性能,查询速度是否足够快。
2)对SQL 语法的支持程度。
因为传统的 SQL 是运行在关系型数据库中的表上的, 表中是一条条的记录。 但是 Hadoop 之上的文件全部存储在 HDFS 上,没有真正的“表”的概念。 SQL 去运行在这些 HDFS 文件上,并不是容易的事情,它需要在底层做很多工作,来完善对SQL 语法的支持。不光要简单的能够运行,还要对它进行优化,尽量让查询速度比较快。
3)企业级的特性。
比如安全性, 是不是支持类似数据库里面的行安全性、列安全性? 比如跟企业其他信息系统的集成,是否支持标准的 JDBC/ODBC 接口等?
4)与 Hadoop 生态系统里面的其他组件的集成。
比如能不能直接访问 Hbase 里面的数据? 数据能不能被类似于Pig 这样的高级MapReduce 语言进行查询等等?
综上,基于Hadoop 系统的SQL 引擎种类繁多,就会面临应用开发选型难等问题。
1.2 现状与优缺点分析
目前业界使用最广泛的大数据SQL 引擎有Impala[7]、Hive[8]、Spark SQL[10]和Phoenix[11]等,下面分别进行介绍。
Hive 是目前处理大数据、构建数据仓库最常用的解决方案, 甚至在很多公司部署了Hadoop 集不是为了跑原生MapReduce 程序,而全用来跑Hive SQL 的查询任务。 Hive 是一个基于hadoop 的开源数据仓库工具,采用HQL(类SQL)对数据进行自动化管理和处
理。 支持处理存储在HBase 上的数据,将HQL 语句解析成MR 任务运行,获取结果,适合于长时间的批处理查询分析[12]。
但是存在以下问题:
1)data shuffle 时 的 网 络 瓶 颈,Reduce 要 等Map 结束才能开始,不能高效利用网络带宽。
2)一个SQL 经常会解析成多个job,输出都直接写HDFS,大量磁盘IO 导致性能比较差。
sql自学难吗3)每次执行Job 都要启动Task,花费很多时间,无法做到实时。
Impala 在HDFS 或HBase 上提供快速、 交互式SQL查询,使用与商用并行关系数据库中类似的分布式查询引擎,适合于实时交互式SQL 查询。 Impala 各个任务之间传输数据采用的是push 的方式(MR 采用的是pull 的方式),也就是上游任务计算完就会push 到下游,这样能够分散网络压力, 提高job 执行效率, 所以在性能上有大大地提高。 但是在支持group by 排序、非结构化到结构化的数据转换、并行化以及表或者列级别的授权等安全问题上存在较多问题。
Spark SQL 与 传 统 “DBMS 查 询 优 化 器+执 行 器”的架构较为类似,只不过其执行器是在分布式环境中实现的,并采用Spark 作为执行引擎 。 与传统方法的区别在于,SQL 经过查询优化器最终转换为可执行的查询计划是一个查询树 , 传统DB 可以执行这个查询计划 ,而Spark SQL 会在Spark 内将这棵执行计划树转换为有向无环图(DAG)再进行执行。中间输出和结果保存在内存中, 所以具备较高的查询性能。 由于Spark SQL 处理数据的原则是能放到内存尽量放到内存,优点是做JOIN时会比较快,缺点是占用内存太大,且自行管理内存,占用内存后不会释放。
Phoenix 是一个java 中间层,可以在HBase 上执行SQL查询。 不像Hive 那样使用MR 任务, 而是直接使用HBase api 进行操作。 基本原理是将一个对于HBase client 来说比较复杂的查询转换成一系列Region Scan, 结合coprocessor和custom filter 在多台Region Server 上进行并行查询,汇总各个Scan 结果。 优点是相对于Hbase 支持更多的数据类型、直接使用JDBC 操作数据、支持二级索引等,但在JOIN支持上、大规模数据传输、计算逻辑复杂时的内存占用上存在较多问题。
由上面的分析可以看出,大数据生态系统中的不同SQL 引擎都有各自适合的应用场景, 性
能指标也不相同,很难选择一种SQL 引擎覆盖所有的应用需求,为了解决上述问题,本方案及系统提供统一的大数据SQL 引擎,集成多个SQL 引擎,并提供统一的访问接口,用户可以根据需要灵活选用相应的SQL 执行引擎。
图1 I mpala 系统架构
2 大数据统一SQL 引擎
2.1 系统概述
本方案及系统的总体目标是提供统一的大数据SQL 引擎, 集成多个SQL 引擎, 并提供统一的访问接口, 用户可以根据需要灵活选用相应的SQL 引擎,解决传统应用如何快速移植到大数据平台以及多个大数据SQL 引擎选型难的问题。
项目主要研究的内容包括:
1)面向警务云平台中的各种大型应用系统
通过SQL 处理海量数据的共性需求,基于Hadoop 的海量数据存储和并行计算框架,研究
和建立一个统一的大数据SQL 引擎。
2)在综合分析和抽象提炼各应用系统在通过SQL方式处理分析海量数据的共性问题的基础上,面向警务云应用的数据多样性,建立一种统一SQL 引擎,提供适应于应用系统中不同场景的SQL 应用需求。
3) 为了解决基于SQL 的海量数据分析查询问题,在总结各种应用数据共性的基础上, 引入并集成了Hive、Impala、Spark SQL 和Phoenix 等 大 数 据SQL 引 擎,并提供统一的SQL 引擎接口, 以便能应用系统能根据需要灵活选择合适的SQL 引擎实现基于SQL 的数据查询与分析。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。