有两周没有看过论文了,五一假期抽空看了Berkeley的PH.D Ganesh的最新发表在Eurosys11上的牛文---Scarlett:coping with Skewed Content Popularity in MapReduce Clusters
收获良多,这里和大家分享一下。
背景:经过对于Bing上执行Hadoop和Dryad的集群的日志分析,框架为了提高作业的执行效率,使得尽可能地将计算迁移到数据所在位置,这里位置可以是数据块所在的节点或者所在rack。一般认为,Rack之间的数据传输是应该尽量避免的。但是,Hadoop和Dryad分别都是如何做的呢?
1) Scarlett通过增加热点数据的拷贝,使得数据更容易实现Data Locality.
2)Hadoop的调度在优先使用Data Locality所在节点的同时,同时也容忍sub-optimial的情况,在一个rack上找到数据所在节点,如果这些都不行,就只能通过Read remote from another rack.
3)Dryad会杀死优先级不高的task,以释放slot,满足task的Data Locality特性。
Scarlett是如何做到这一点的呢?
1)对于Bing下生产环境和试验环境的Hadoop、Dryad集群进行分析,分析出当前作业存取文件的特点有:
1. The number of concurrent accesses is a sufficient metric to capture popularity of files.
2. Large files contribute to most accesses in the cluster, so reducing contention for such files improves overall performance.
3. Recent logs are a good indicator of future access patterns.
4. Hotspots in the cluster can be smoothened via appropriate placement of files.
2)Scarlett设置一个监控的滑动窗口,设置窗口的长度为12小时,在该段时间内推测出在接下来的12个小时内可能会引起数据竞争的文件,然后按照文件的大小进行排序,按照可以使用Budget的存储,来增加文件的备份的个数。在增加文件的备份的过程中,有两种策略:
假设当前可以使用的存储为B,L为需要增加备份的文件列表,按照文件大小DESC降序排列,
左图为一次性满足文件的全部拷贝,按照文件的优先级来进行,这里是按照文件的大小由大到小的顺序进行。这样在B确定的情况下,优先级较小的文件可能得不到拷贝。
右图采用的Round-Robin,每次为L队列上的文件增加一个拷贝,循环式地增加文件的拷贝。
选择了合适的文件,然后按照上述的方式进行拷贝,但是又出现一个问题是,如何平滑地分配这些block,让Data Locality的性能更好。所以Data Locality不仅要选择拷贝哪些文件,拷贝多少,还要考虑如何分配这些block到合适的节点,以进一步平缓负载。
3)在尽可能多的rack上来分散数据的拷贝,尽量避免在不同rack之间的数据的传输;将节点负载因素作为选择数据拷贝节点的一个因素。通过数据压缩和扩散式的拷贝,进一步提高生产备份的效率。
Ganesha在MapReduce领域还做了一个很不错的工作,就是发表在OSDI10上的Reining in the Outliers in Map-Reduce Clusters using Mantri.