闫泽轩 李牧龙 罗浩铭 汤皓宇 徐航宇
What's our project
使用Rust编程语言对Apache Spark性能瓶颈的优化
基于Rust版Spark开源项目vega
Why we're doing so
一大堆五颜六色的彩虹豆,若干个人来数一数各种颜色的豆子
将彩虹豆堆划分开,每个人来数一堆
每个人数到一种颜色的豆子,就在一个小本本上记上一行
| color | 1 |
|---|---|
小本本上的东西最后汇总起来,这时候就不需要去盯着豆子数了,最后在总表上记好
| color | num |
|---|---|
| color1 | num1 |
| color2 | num2 |
| ... | ... |
| colorx | numx |
之前的模型就是MapReduce,其已足够强大,但是仍然面临一些问题。
map, reduce两种算子(Resilient Distributed Dataset)
transformation操作:通过存储系统和其他的 RDDs 进行操作而创建一个新的 RDD,如 map, filter以及join等
jni crate对JNI提供了安全的Rust接口。
How we'll get there
JobStage
ShuffleMapStageResultStageTask
ShuffleMapTaskResultTaskTaskSetSchedulable
PoolTaskSetManager
在Spark框架中,Shuffle阶段(类似于MapReduce中的Shuffle)涉及十分密集的磁盘的读写和网络I/O,是极为重要的性能瓶颈。
被用于管理块数据
其优化至关重要,必须使用当前的SOTA算法。
HashShuffleManager(vega已经实现)
为每个Reduce端的Task生成一个文件,从而生成数量惊人的文件,降低I/O吞吐率,并导致Shuffle阶段时内存中积攒大量文件句柄。
SortShuffleManager (vega还未实现)
根据分区ID进行排序,然后输出到单个数据文件中,同时生成对应的索引文件。
Streaming Context:Spark Streaming的起始点和上下文
DStream和DStream Graph:封装流式数据和依赖关系
JobScheduler和ReceiverTracker:调度,生成作业,控制Receicer状态
| 时间进度 | 进度概览 |
|---|---|
| 第八周 | 系统学习rust |
| 第九周 | 编译,测试vega模块 |
| 第十周 | 定位vega模块 |
| 第十一周~第十四周 | 编写优化对象模块 |
| 第十五周 | 添加拓展模块 |
| 第十六周 | 跑benchmark部署测试 |