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

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介:

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%
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
2月前
|
存储 算法 Java
Java内存管理深度剖析与优化策略####
本文深入探讨了Java虚拟机(JVM)的内存管理机制,重点分析了堆内存的分配策略、垃圾回收算法以及如何通过调优提升应用性能。通过案例驱动的方式,揭示了常见内存泄漏的根源与解决策略,旨在为开发者提供实用的内存管理技巧,确保应用程序既高效又稳定地运行。 ####
|
21天前
|
算法 Java
堆内存分配策略解密
本文深入探讨了Java虚拟机中堆内存的分配策略,包括新生代(Eden区和Survivor区)与老年代的分配机制。新生代对象优先分配在Eden区,当空间不足时执行Minor GC并将存活对象移至Survivor区;老年代则用于存放长期存活或大对象,避免频繁内存拷贝。通过动态对象年龄判定优化晋升策略,并介绍Full GC触发条件。理解这些策略有助于提高程序性能和稳定性。
|
1月前
|
NoSQL 算法 Redis
redis内存淘汰策略
Redis支持8种内存淘汰策略,包括noeviction、volatile-ttl、allkeys-random、volatile-random、allkeys-lru、volatile-lru、allkeys-lfu和volatile-lfu。这些策略分别针对所有键或仅设置TTL的键,采用随机、LRU(最近最久未使用)或LFU(最少频率使用)等算法进行淘汰。
47 5
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
142 7
|
2月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
79 11
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
75 1
|
2月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
47 5
|
2月前
|
存储 分布式计算 算法
1GB内存挑战:高效处理40亿QQ号的策略
在面对如何处理40亿个QQ号仅用1GB内存的难题时,我们需要采用一些高效的数据结构和算法来优化内存使用。这个问题涉及到数据存储、查询和处理等多个方面,本文将分享一些实用的技术策略,帮助你在有限的内存资源下处理大规模数据集。
37 1
|
2月前
|
存储 监控 Java
深入理解计算机内存管理:优化策略与实践
深入理解计算机内存管理:优化策略与实践
|
3月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
101 14

热门文章

最新文章