这篇论文在提高像Hadoop这样的以MapReduce为框架的cluster的能源效率做了第一次的尝试
整篇文章分为四个大的部分:
一、讨论Hadoop是否能够使node在active state和standby state之间进行转换,来成为能源的控制者
二、展示可以对cluster中的数据放置进行重新的整理,从而能够使Hadoop能够在fully operational的时候还能够将大部分的node关掉
三、得到最终的结论,就是在不损耗性能的前提下,可以节省能耗,使得在能耗和性能之间取得trade-off
四、详细的介绍一下Hadoop中的节点架构、数据放置、可用性、可靠性、调度以及应用
目标:
使得Hadoop这样的集群可以使用尽可能少的node来实现与原来差不多的性能
cluster中提高能源效率的方法:
1.当前workload需要多少node,就让这些node为active的状态,将其与剩余的node都设置为low-power standby的状态
2.在每个node中只提供workload需要的计算和存储能力,不要浪费能源在一些不必要的组件上
具体的方法:
data layout:首先在Hadoop's filesystem中,data都是分散的放置在cluster中的所有节点中的,这就使得无法预测一个请求会用到那个节点的数据,所以在将某些idpl的节点或者组件关掉的时候不能确保它的安全性(即请求来了是否能访问到想要访问的数据),同时Hadoop为了避免当某一个node failure的时候造成不必要的损失,所以每一个data-block都会有replicas,一般情况默认的是有3个replicas,同时replicates的放置在Hadoop中有两个不变式:
1.没有任何两个同一个block的replica会出现在同一个node中
2.一个data-block的replicas必须至少分布在两个不同的racks中
但是在这种情况之下,最多也就只能保证off掉(replicas数-1)的node还能够保证data都能够被找到,但是提高replicas的个数又会造成过多的资源的浪费,因此又为Hadoop中的data layout提供了第三条不变式:
3.每一个data-block中至少有一个replica是在covering subset中的(此时covering subset中必须包含足够多的node来满足当covering subset之外的所有节点都off了以后,请求的数据任然能够找到,但是要适当的包含较少的节点,以达到最大的能源利用率,但是另一方面包含的节点又不能太少,否则会限制存储能力甚至成为I/O的瓶颈,所以说covering subset差不多要占整个cluster节点的10%-30%)
新的data layout的具体的实施方案:
首先,replicas的放置策略,第一个replica放置在产生它的节点上,第二个replica放置在covering subset中,第三个replica放置在与第一个replica不同的其他的rack中
其次,为了防止Hadoop将一些要删除的数据自动从新生成新的replica放置在covering subset中,提出了NameNode,就像Hadoop本身将一些不用的节点off掉一样,也可以把一些不在使用的数据删除而且不会导致产生新的replica
最后,一些off掉的node也可以重新进入到cluster中,只要他们向NameNode发送请求
具体的实验:
具体的实验是以CPU的利用率来作为实验的能源模型的,将处在active状态的node的网络和disk的能耗都忽略不计,虽然最终的结果是在性能方面也有所下降,但是就它节省的能源来说这些性能的下降是微不足道的。
future work:
本篇论文讨论的节约能源仅是在表面进行了讨论,以后的工作将会面向更深一次去探索,主要探索的方面有以下几点
data layout:虽然在文章中已经讲了,但是还有很多没有考虑,比如说如何判断是否要将某些数据的副本保存在covering subset中,subset中的节点是否要进行轮询,以提高节点的耐用性,covering subset也可能会有写瓶颈,什么时候讲副本写入subset中
data availablity:虽然我们的covering subset基本上包含了所有的数据,但是也有可能要访问的数据没有在subset的节点中,那么就要唤醒那些保存了改数据的节点,以最有效的效率唤醒节点也是要研究的问题,其次,当有某一个subset中的node down掉时,如果将所有的节点恢复来恢复副本的话,可能会以为一个节点的问题,就会造成能耗上面产生毛刺
reliability and durability:不可避免的是故意将有些数据存放在inactive的节点中,所以要定期的唤醒一些节点来进行检查,来提高可靠性,同时生成副本也是为了提高可靠性,但是这同时占用了大量的资源,可能会对性能有影响,所以要在可靠性和性能上实现trade-off
dynamic scheduling policy: Hadoop应该有一个动态的能源控制器,根据cluster的利用情况来进行响应;因为不一样的作业对服务质量的要求是不同的,所以应该将Hadoop的作业调度与能耗控制智能的结合在一起,这样的话作业调度器就会对能耗控制器做出的选择进行进一步的优化。例如,有很多作业提交,但是会有作业标记为优先的,那么这个时候会有两种选择,1.唤醒在队列最前面的作业需要的node 2.将用到当前active node中的数据的tasks提前
node architecture:当前像PowerNap 和PCRAM这样,可能他们的inactive的时间没有到可以降低能耗的时间那么长,但是这些工作目的就是在于提高整体的inactive时间
workload and application:MapReduce框架是用来处理非实时的数据,但是目前有很多的数据都是real-time的,这些相较于作业运行时间来说,对服务质量和吞吐量的要求要更严格,所以说以后还要就这些数据进行研究