闫泽轩 李牧龙 罗浩铭 汤皓宇 徐航宇
将输入的M个分区内的数据“按一定规则”重新分配到R个分区上。
最大的性能瓶颈!
在我们对Vega中shuffle逻辑的优化中,由于使用了DashMap缓存来保存Shuffle记录,我们无需进行排序,直接按reduce端分区号作为键值写入缓存即可。这既避免了排序的开销,又获得了SortShuffle合并shuffle记录以减少shuffle记录条数的效果。这样,shuffle输出只需以reduce端分区号为键值读出即可。
使用两千万条shuffle记录的载量进行单元测试,测试结果如下:
(Map端有M个分区,Reduce端有R个分区,$M\cdot R=20000000$)
时间/s | 1 | 2 | 3 | 平均 |
---|---|---|---|---|
优化前 | 9.73 | 10.96 | 10.32 | 10.34 |
优化后 | 6.82 | 5.46 | 4.87 | 5.72 |
运行速度提升了81%
利用循环队列,在某从机下线时递归地进行任务的重新分发,
保证程序的正常运行,并打印出相关Error信息以供用户检查。
基于Docker直接部署
时间进度 | 计划进度 | 实际进度 |
---|---|---|
第八周 | 系统学习rust | 以lab2, lab3为抓手在实验中学习Rust |
第九周 | 编译,测试Vega模块 | 修复了原版Vega编译失败,部署失效的Bug |
第十周 | 定位Vega模块 | 分配任务量,借鉴Spark对Vega代码进行阅读和理解 |
第十一到十三周 | 编写优化对象模块 | 测试Vega分布式部署,开会写注释 |
第十四到十五周 | 添加拓展模块 | 完成lab4, 推进HDFS加入文件系统及容错机制的编写 |
第十六周 | 跑benchmark部署测试 | 编写测试样例,准备进入考试周 |
第十七周 | 无 | 考试周放空 |
第十八周 | 无 | 连续五天开会高强度工作,完成所有既定任务并撰写报告和展示 |