论文部分内容阅读
近年来Spark内存计算框架快速崛起,数据处理速度得到极大的提高,但是其速度上限却受限于Spark内存规模。当数据量小于或接近内存容量时Spark性能最好,反之则性能较差。因此Spark SQL在处理以4G行业卡数据为代表的通信大数据时暴露出了诸多问题,如读写速度和查询速度缓慢、系统资源分配不均或不足、大表Join效率低等。本文从Spark SQL的数据组织方式、Spark资源管理机制和Join算法三个方面处理结构化数据并进行相关的性能优化。首先提出了改进的数据组织框架以提高Spark SQL的读写和查询速度,其次建立了资源监控模型合理的分配和使用资源,最后基于改进的数据组织框架和监控模型改进了大表Join算法。主要工作如下:(1)本文通过分析和对比Spark SQL和Hbase的数据组织方式,提出了一种改进的数据组织框架。该框架首先改进了Parquet文件格式的读写接口,其次利用Hbase+Phoenix构建了二级索引,大幅提升了4G行业卡数据的读写和查询速度。(2)本文进一步研究了Spark的内存模型和资源使用情况,通过性能监控获取集群底层各项参数,建立了内存监控模型对资源使用情况进行分级和预警。最后将预警结果通过观察者模型反馈给订阅者,订阅模块就可以根据它的反馈来动态调整数据流量。(3)本文基于改进的数据组织框架和监控模型对大表关联算法进行优化,提出了一种基于内存监控和分批处理的Join算法。该算法通过监控模型动态地控制数据流量和Join批次,并通过改进的数据组织方式加快数据读写和查询速度。实验表明该算法从一定程度上缓解了内存不足的问题,也降低了数据倾斜导致的负载不均衡影响,总体运行时间优于默认的Join算法。综上所述,Spark SQL处理结构化数据的性能受数据组织方式和内存模型的影响,具体表现为Join效率低下。本文首先改进了数据组织框架,然后建立了内存监控模型,最后优化了Join算法,平均处理时间缩短了31.49%。