闫泽轩 李牧龙 罗浩铭 汤皓宇 徐航宇
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
Job
Stage
ShuffleMapStage
ResultStage
Task
ShuffleMapTask
ResultTask
TaskSet
Schedulable
Pool
TaskSetManager
在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部署测试 |