1.4 大数据计算系统的性能优化
随着大数据计算系统中需要存储和处理的数据不断增加,系统的性能问题日益突出,导致系统处理速度下降,不能及时返回处理结果。严重时,系统甚至不能提供服务。为了提升系统性能,需要根据大数据计算系统的架构,从多个方面进行优化。大数据计算系统的性能优化是一项非常复杂的工作,涉及系统的许多方面,因此,在系统的优化过程中需要考虑影响系统性能的所有因素。第14章将介绍大数据计算系统的性能优化。
1.4.1 提升大数据计算系统性能的途径
系统优化是一个非常复杂的过程,需要借助诊断工具找出系统瓶颈,利用优化机制对系统进行合理优化,以保证系统高效运行。大数据计算系统的架构、技术及使用场景比较特殊,有很多与其他系统不一样的特点,其性能优化也与其他系统有所不同。提升大数据计算系统性能可以从物理优化、系统参数优化、数据收集优化、数据处理优化4个方面着手。
1)物理优化。物理优化是最简单的优化方式,包括增加设备,扩大集群规模等。物理优化是一种相对昂贵但有效的优化方式。同时,系统的物理设备和集群规模决定了系统性能的上限。
2)系统参数优化。随着Hadoop和Spark的广泛使用,系统配置参数的设定成为影响程序处理效率的重要因素,系统参数配置不当是这类系统性能降低的一个重要原因。参数优化的主要任务是针对不同的计算任务,对系统参数进行较为合理的配置,以实现资源的有效利用和数据处理的高效执行。
3)数据收集优化。在进行数据分析前,大数据计算系统需要收集数据。在数据收集的过程中,不仅要保证数据的准确性,还要保证收集速度。数据收集的效果将直接影响数据处理的效果,如果数据收集速度慢,将导致数据分析过程无法进行,或者由于数据过少导致数据分析结果不正确。收集的数据可以是日志文件、网络数据或者科研数据等。收集日志文件和科研数据时,可以和数据源之间建立专有网络,直接通过网络将数据高速传输到处理端。对于网络数据,可以通过网络爬虫从网站上爬取数据信息,用这种方式获取的数据可以是网页、音频和视频等。网络爬虫(又称为网页蜘蛛、网络机器人)是按照事先定义的策略,对网络上的信息进行自动采集的脚本或者程序。网络爬虫具有特殊性,它使得网络数据的收集具有很大的优化空间。
4)数据处理优化。当系统面对计算任务时,对于数据的处理主要是读取前的预处理和根据任务需求进行的分析。由于数据庞杂且处理逻辑复杂,如果不能对数据处理进行很好的优化,将会造成很大的性能损失。在数据处理中,缓存优化、分布式处理优化、使用消息机制、提升程序并发性和并行性等都对提升系统性能有显著效果。
1.4.2 提升大数据计算系统性能的难度
采取何种方式进行大数据计算系统的性能优化,应结合实际情况,针对系统现状来确定。
物理优化通常是最无奈的选择,因为这种优化方式昂贵,但却是某些情况下不得不采用的方式。例如,当集群规模较小或者机器性能较差时,除了物理优化,其他优化方式都难以对系统性能起到优化作用。因为系统的物理组成决定了系统的性能上限,其他优化方式只能无限接近这个上限。此时,应当及时提升单机性能或者扩大集群规模,这样才能改善系统性能。
较为复杂的是系统参数优化和数据处理优化。系统参数优化的难度源于任务的不确定性,系统管理员可以手动对系统参数进行较为合理的配置,以实现资源的有效利用和数据处理的高效执行。但这种方法有很大的局限性,即使是经验丰富的系统管理员,面对输入数据量和数据分布等方面的巨大差异,也很难对每个配置参数做出最为合理的判断。数据处理优化则需要从系统架构出发,对系统有全面和清晰的了解之后才能确定采取的技术手段。
数据收集优化较为简单,但是这种方式对于系统性能的提升也极其有限。这种优化方式只是使系统数据更加理想,对系统计算性能并没有直接的提升,它的作用通常是以结果的形式表现出来的。
总之,在实际工作中采用何种优化方式,应根据系统的特点和性能瓶颈来确定。
1.4.3 运维与性能优化的关系
运维是性能优化的前提,在某些情况下,运维也是性能优化的执行者和实现形式。在一个完整的大数据计算系统中,运维与性能优化的方式通常如图1-6所示。
图1-6 运维与性能优化的方式
系统性能瓶颈通常是由监控系统最先捕捉到的,一旦监控指标超过预先设定的阈值,监控系统将会发出预警并向性能优化工具发送监控结果,或者监控系统周期性地将系统运行情况发送给性能优化工具供其分析。无论是哪种情况,性能优化工具在收到预警或者系统运行状况报表之后,会对系统进行计算和分析并得出优化建议。此时需要将优化建议返回给运维系统,运维系统根据实际情况采取资源调度、容灾处理、数据恢复等不同的技术手段对系统进行运维。可见,系统中的运维与性能优化是相互依存又相互作用的有机整体。本书将在第14章重点介绍大数据计算系统的调优。