一种堆外内存缓存策略加速数据写OSS

简介:

1. 背景介绍

EMR集群中作业写数据到OSS时,需要先将数据缓存在本地,然后再一次性上传到OSS中。EMR支持两种缓存策略:

  • disk
  • off-heap

两种缓存测试使用场景略有区别:

  • 本地磁盘缓存策略适用到任何场景,且能满足较大文件上传需求。
  • 堆外内存缓存策略在性能上较磁盘缓存有优势,但是受限于内存资源。在实现上,堆外内存的申请会限制在一定范围内,当数据产生速率超过数据上传速率时,输出流会block住,需要等待进行中的上传任务完成。

潜在问题:

  • 作业提交到Yarn:当使用堆外内存策略时,存在内存超用被Yarn杀掉的风险。所以在内存参数设置上需要格外小心,不然会影响到作业的稳定性。

2. 如何使用

作业参数中配置"fs.oss.upload.bufferType",可选值为"disk"或者"off-heap"。以下举例:

1. hadoop fs -Dfs.oss.upload.bufferType=disk -put a.txt oss://xxx/xxx/

2. Hadoop作业: 
           Configuration conf = new Configuration()
           conf.set("fs.oss.upload.bufferType", "off-heap")
           ...
           
3. Spark作业:
           val conf = new SparkConf()
           conf.set("spark.hadoop.fs.oss.upload.bufferType", "off-heap")
           ...

3. Benchmark

VPC网络,SSD云盘/高效云盘,MN4,4核16G机型,测试纯写数据时间。

文件大小 块大小 并发度 Disk buffer (SSD云盘) Disk buffer (高效云盘) Off-heap buffer vs. SSD云盘 性能提升(%) vs.高效云盘 性能提升(%)
1024MB 256KB 5 23009ms 20773ms 18661ms +18.8% 10.2%
1024MB 1MB 5 11310ms 18524ms 10233ms +9.5% +44.8%
1024MB 4MB 5 10318ms 18001ms 10191ms +1.5% +43.4%
1024MB 16MB 5 10212ms 17796ms 10184ms +0.3% +42.8%
1024MB 64MB 5 10945ms 18612ms 10216ms +6.7% +45.1%
1024MB 128MB 5 13240ms 20181ms OOM: Direct buffer memory N/A N/A
256MB 256KB 5 4511ms 4968ms 4636ms -2.7% +6.7%
256MB 1MB 5 2417ms 4474ms 2381ms +1.5% +46.8%
256MB 4MB 5 2417ms 4386ms 2433ms -0.7% +44.3%
256MB 16MB 5 2433ms 4337ms 2465ms -1.3% +43.2%
256MB 64MB 5 3232ms 5273ms 2411ms +33.7% +54.3%
256MB 128MB 5 4392ms 6197ms 3118ms +29.0% +49.7%
64MB 256KB 5 1252ms 1337ms 1252ms +0% +6.4%
64MB 1MB 5 611ms 1117ms 577ms +5.6% +48.3%
64MB 4MB 5 567ms 1084ms 559ms +1.4% +48.4%
64MB 16MB 5 597ms 1108ms 624ms -4.5% +43.7%
64MB 64MB 5 1569ms 1491ms 1499ms +4.5% -0.5%
64MB 128MB 5 1459ms 1730ms 1412ms +3.2% +18.4%
16MB 256KB 5 459ms 417ms 383ms +16.6% +8.2%
16MB 1MB 5 221ms 307ms 220ms +0% +28.3%
16MB 4MB 5 254ms 327ms 198ms +22.0% +39.4%
16MB 16MB 5 431ms 398ms 418ms +3.0% -5%
16MB 64MB 5 412ms 425ms 400ms +2.9% +5.9%
16MB 128MB 5 418ms 405ms 443ms -5.9% -9.3%
目录
相关文章
|
8月前
|
Web App开发 存储 缓存
如何精准清除特定类型或标签的缓存数据?
如何精准清除特定类型或标签的缓存数据?
699 57
|
10月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
11月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
2130 0
|
7月前
|
存储 缓存 监控
一次缓存引发的文件系统数据不一致问题排查与深度解析
本文详述了一次由自研分布式文件系统客户端 EFC 的缓存架构更新所引发的严重数据不一致问题的完整排查过程。
一次缓存引发的文件系统数据不一致问题排查与深度解析
|
8月前
|
存储 缓存 监控
手动清除Ubuntu系统中的内存缓存的步骤
此外,只有系统管理员或具有适当权限的用户才能执行这些命令,因为这涉及到系统级的操作。普通用户尝试执行这些操作会因权限不足而失败。
1567 22
|
10月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
334 32
|
9月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
10月前
|
缓存 搜索推荐 CDN
HTTP缓存策略的区别和解决的问题
总的来说,HTTP缓存策略是一种权衡,需要根据具体的应用场景和需求来选择合适的策略。理解和掌握这些策略,可以帮助我们更好地优化网页性能,提高用户的浏览体验。
275 11
|
数据采集 缓存 JavaScript
数据抓取的缓存策略:减少重复请求与资源消耗
本教程聚焦于提升爬虫效率与稳定性,通过结合缓存策略、代理IP技术(如爬虫代理)、Cookie和User-Agent设置,优化数据采集流程。以知乎为例,详细讲解如何抓取指定关键词的文章标题和内容。内容涵盖环境准备、代码实现、常见问题及解决方案,并提供延伸练习,帮助读者掌握高效爬虫技巧。适合具备Python基础的初学者,助你规避网站机制,顺利获取目标数据。
346 2
数据抓取的缓存策略:减少重复请求与资源消耗
|
9月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
341 0