度过了浮躁的第一个月,第二个月开始接手Trumpet的测试任务,要求在月底之前完成Trumpet中Bicluster,SVD,LinearRegression的性能优化并发布第一个release。
第一周
follow up,在学弟离职前学习如何修改scala代码,编译并在集群上运行。在集群上部署spark的分析系统dew并生成分析图表,用于分析spark运行阶段的各个stage的情况,内存使用情况以及网络通信情况。
第二周
看懂bicluster, svd, linearRegression, wilcox, covariance的源码,从读取输入到调用mllib中算法运算再到最后输出。同时学习spark的逻辑执行流程,物理执行流程。spark根据action的类型划分job,每次job从最后的partition回溯到最一开始的输入partition,根据其中的shuffle类型划分出stage。最后按照partition的数目划分task并分配到各个executors上面。了解了这些原理为之后优化和测试的工作提供了理论的支持。
第三周
修改bicluster,svd代码。
svd中把对于dom的调用去掉了,降低了对于内存的要求,使得我们可以采用更小的partitions,减少了shuffle的数量。最终性能提升了一倍。
bicluster是主要修改的程序,起初的思想很简单,参照svd降低对于内存的要求,采用更小的partitions。同时重写原来的矩阵乘法和矩阵转置乘,利用rdd的窄映射把rdd直接作为矩阵乘的参数,减少一次collect的shuffle。但是在测试的时候发现有一次调用bicluster时间很短,后来每一次都达到了迭代的上限而不能收敛。后来的时间全部花在解决这个问题上面,经过一步步的排查发现在bic