1. 简介
1.1. 近期工作
- 研究工作鼓励运行大量小任务
小任务能提高并行性,减少端到端耗时 - 工程经验反对运行过多的任务
过多的task在shuffle阶段会引入大量IO开销,根本原因在于map和reduce阶段之间的shuffle IO请求数量随着任务数量的增长呈现指数级的增长,每个request的平均大小在线性下降;又因为shuffle期间的数据需要保存在HDD磁盘上(为了容错),因此在shuffle期间存在大量小的随机IO导致耗时变长。执行task数量多的job时会拆分IO请求,进一步加剧问题。
1.2. Riffle解决方案
显著提高IO效率,扩展到pb级别数据处理,Riffle通过大量随机小IO转换为更少的连续的大IO提高shuffle性能和资源效率;核心是由一个集中的调度程序 scheduler 和一个shuffle merge service组成,前者跟踪中间shuffle文件并动态协调合并操作,后者运行在每个物理集群节点上,以很少的资源开销将小文件合并为大文件。
1.3. 挑战和解决方案
- Riffle节省计算和存储资源
- 易于配置,适用不同的存储系统和硬件设备
- 容错性强:Riffle跟踪合并和未合并格式的中间文件,一旦出现故障,返回未合并格式的文件(放弃本次合并操作)
- 开销小