2.5.5 性能提升
本平台的性能提升需要综合考虑以下5个方面的问题:硬盘的I/O成本、冗余计算成本、网络传输成本、作业调度和慢节点的处理。
(1)降低硬盘I/O的成本。由于硬盘I/O的成本过高,本平台中iRDD的生成采用惰性计算模式,只在进行信息资源的利用(如碎片图谱的绘制或可视化处理)时才计算对应的iRDD,即iRDD的生成推迟至其实际应用时。
(2)降低冗余计算带来的成本。由于iRDD的计算采用的是惰性计算模式,当某个iRDD被多次调用时会加大平台的计算成本,进而降低性能。为此,可以采用缓存技术和检查点技术,对该iRDD进行序列化处理,以便在后续操作中直接访问,避免重复计算。从计算角度看,导致冗余计算成本高的主要原因有两个:
•iRDD之间的继承关系过长或过于复杂。
•iRDD本身的计算复杂度过高。
(3)降低网络传输带来的成本。为了减少网络传输带来的成本,本平台采用本地化计算方法,使计算靠近数据,进而降低数据传输的成本。本地化计算的具体实现方法有两种:
•让计算优先访问本地存储的数据或就近存储的数据。
•用广播计算的方式,让计算“找到”数据,从而实现本地化计算的目的。
(4)作业调度。作业调度机制的设计和选择对于系统整体性能的提升有一定影响。对于本平台而言,作业调度的主要实现方法有两种:
•FIFO Scheduler。这是Hadoop默认的调度方法,使用FIFO调度算法来运行作业,并且可以设置优先级。但是FIFO调度并不支持抢占,所以后来的高优先级的作业仍然会被先来的低优先级的作业所阻塞。
•Fair Scheduler。其目标是让每个用户公平地享有集群中的资源。多个作业提交过来后,空闲的任务槽资源可以按“让每个用户公平共享集群”的原则被分配,某个用户一个很短的作业将在合理时间内完成,即便另一个用户有一个很长的作业正在运行。一般作业都放在作业池当中,默认时,每个用户都有自己的作业池,当一个用户提交的作业数超过另一个用户时,不会因此得到更多的集群资源。另外,Fair Scheduler支持抢占,如果一个作业池的资源未在一段时间内公平地得到集群资源,那么Fair Scheduler会终止得到多余集群资源的任务,分给前者。
当然,也可以考虑引入其他作业调度方式,如Capacity Scheduler。在Capacity Scheduler中,集群资源会有很多队列,每个队列有一定的分配能力,在每个队列内会按照FIFO Scheduler去分配集群资源。
(5)慢节点的处理。慢节点会导致本平台的整体性能下降。为此可以采用推测执行(speculative execution)机制。推测执行机制是为了解决Hadoop中出现某些缓慢任务拖延整个作业运行的问题,推测执行会针对那些落后于平均进度的任务启动推测任务(Speculative Task),此时如果原任务在推测任务前完成,则推测任务会被终止;同样,如果推测任务先于原任务完成,则原来的任务会被终止。