正在加载图片...
·724· 智能系统学报 第12卷 SUM(field4)as alias2, S ” ORDER AVG(field5)as alias3, AGG3 …, [S2] COUNT(*)as alias4 CROSS TMP2 PRODUCT AGGD FROM TableExpression TMP2 OUTERJOIN WHERE TMPI (AGG2 [field6 <date'yyyy-mm-dd'-interval 'DELTA ] day(3)] Customer TMPI Orders GROUP BY field6.field7 6 Implementation of Q22 ORDER BY field6,field7] Fig.6 Q22的执行过程 根据该语句的执行计划,可以判断查询时对整 个表进行了遍历。对于Spark SQL而言,其在大多 实验分析对比了不同的查询方式在运行Q22时 数查询上的表现优于Hive和Impala。由于Spark的 集群资源使用情况(如图7~11所示),包括CPU、内 接口丰富和$QL优势,在执行查询时的速度较快。 存、网络、磁盘/0。注意到,在查询Q22执行过程 4.3Q22资源消耗情况 中,Impala对集群资源的占用是最少的,其次是 Q22的查询语句如下: Hive,Spark SQL占用资源最多。由于Spark SQL是 基于内存计算的框架,所以在内存占用方面和磁盘 SELECT cntrycode,COUNT (*as numcust,sum (c_ 读取上更为明显。 acctbal)as totacctbal 70 60 Hive FROM Impala Spark SQL SELECT substring (cphone from 1 for 2)as 30 cntrycode, ★ 10 c_acctbal FROM customer 0 102030405060708090 WHERE substring(c_phone from 1 for 2)in 时间/s ('[I1]','[I2]','[I3]','[4]','[5]','[16]', 图7集群平均CPU使用率 [I7]') Fig.7 Average cluster CPU usage and c_acctbal > 由于Hive和Spark SQL均在JVM之上运行,对 SELECT AVG (c_acetbal) CPU和内存的使用依赖于JVM。如图7所示, FROM customer WHERE c_acctbal 0.00 Impala的CPU占用时间要明显少于Hive和Spark and substring (c_phone from 1 for 2)in SQL,这是由于Impala在执行查询过程中,在每个计 ('[1]','[12]','[13]','[14]','[15]',[16]', 算节点上运行只占用一个CPU线程。而Hive和 '[I7]')) Spark SQL在CPU使用上的优化完全依赖于JVM。 and not exists (SELECT FROM orders where 如图8所示,Impala和Hive内存使用率明显小于 o_custkey=c_custkey) Spark SQL,同时使用线程来执行耗费资源较多的 )as custsale Executor Backend进程。 Group BY cntrycode ORDER BY cntrycode; 8230 如图6所示,Q22中作业由3个子查询组成。子 200 150 Hive Impala-Spark SQL 查询S1对customer表进行扫描并将结果保存到临 时表Temp1中;子查询S2对Templ进行聚集操作 AGG1后将结果保存到临时表Temp2中;子查询S3 50 在与表Orders执行聚集操作AGG2后依次与Templ 102030405060708090 时间/s 和Temp2进行关联操作求笛卡尔乘积AGG3然后 排序。 图8集群内存平均使用量 Fig.8 Average cluster memory usageSUM(field4) as alias2, ……, AVG(field5) as alias3, ……, COUNT(∗) as alias4 } FROM TableExpression WHERE [field6 < = date′yyyy⁃mm⁃dd′⁃interval ′[DELTA]′ day (3)] GROUP BY [field6, field7] ORDER BY [field6, field7] 根据该语句的执行计划,可以判断查询时对整 个表进行了遍历。 对于 Spark SQL 而言,其在大多 数查询上的表现优于 Hive 和 Impala。 由于 Spark 的 接口丰富和 SQL 优势,在执行查询时的速度较快。 4.3 Q22 资源消耗情况 Q22 的查询语句如下: SELECT cntrycode, COUNT ( ∗) as numcust, sum ( c _ acctbal) as totacctbal FROM ( SELECT substring ( c _ phone from 1 for 2 ) as cntrycode, c_acctbal FROM customer WHERE substring(c_phone from 1 for 2) in (′[I1]′,′[I2]′,′[I3]′,′[I4]′,′[ I5]′,′[16]′, ′[I7]′) and c_acctbal > ( SELECT AVG (c_acctbal) FROM customer WHERE c_acctbal > 0.00 and substring (c_phone from 1 for 2) in (′[1]′,′[12]′,′[13]′,′[14]′,′[15]′,′[16]′, ′[I7]′)) and not exists ( SELECT ∗ FROM orders where o_custkey = c_custkey) ) as custsale Group BY cntrycode ORDER BY cntrycode; 如图 6 所示,Q22 中作业由 3 个子查询组成。 子 查询 S1 对 customer 表进行扫描并将结果保存到临 时表 Temp1 中;子查询 S2 对 Temp1 进行聚集操作 AGG1 后将结果保存到临时表 Temp2 中;子查询 S3 在与表 Orders 执行聚集操作 AGG2 后依次与 Temp1 和 Temp2 进行关联操作求笛卡尔乘积 AGG3 然后 排序。 图 6 Implementation of Q22 Fig.6 Q22 的执行过程 实验分析对比了不同的查询方式在运行 Q22 时 集群资源使用情况(如图 7~11 所示),包括 CPU、内 存、网络、磁盘 I/ O。 注意到,在查询 Q22 执行过程 中,Impala 对集群资源的占用是最少的, 其次是 Hive,Spark SQL 占用资源最多。 由于 Spark SQL 是 基于内存计算的框架,所以在内存占用方面和磁盘 读取上更为明显。 图 7 集群平均 CPU 使用率 Fig.7 Average cluster CPU usage 由于 Hive 和 Spark SQL 均在 JVM 之上运行,对 CPU 和 内 存 的 使 用 依 赖 于 JVM。 如 图 7 所 示, Impala 的 CPU 占用时间要明显少于 Hive 和 Spark SQL,这是由于 Impala 在执行查询过程中,在每个计 算节点上运行只占用一个 CPU 线程。 而 Hive 和 Spark SQL 在 CPU 使用上的优化完全依赖于 JVM。 如图 8 所示,Impala 和 Hive 内存使用率明显小于 Spark SQL,同时使用线程来执行耗费资源较多的 Executor Backend 进程。 图 8 集群内存平均使用量 Fig.8 Average cluster memory usage ·724· 智 能 系 统 学 报 第 12 卷
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有