一种堆外内存缓存策略加速数据写OSS
1. 背景介绍
EMR集群中作业写数据到OSS时,需要先将数据缓存在本地,然后再一次性上传到OSS中。EMR支持两种缓存策略:
- disk
- off-heap
两种缓存测试使用场景略有区别:
- 本地磁盘缓存策略适用到任何场景,且能满足较大文件上传需求。
- 堆外内存缓存策略在性能上较磁盘缓存有优势,但是受限于内存资源。在实现上,堆外内存的申请会限制在一定范围内,当数据产生速率超过数据上传速率时,输出流会block住,需要等待进行中的上传任务完成。
潜在问题:
- 作业提交到Yarn:当使用堆外内存策略时,存在内存超用被Yarn杀掉的风险。所以在内存参数设置上需要格外小心,不然会影响到作业的稳定性。
2. 如何使用
作业参数中配置"fs.oss.upload.bufferType",可选值为"disk"或者"off-heap"。以下举例:
1. hadoop fs -