近年来,随着大数据规模的增长,以及大数据应用的发展,大数据技术的架构也在持续演进。早期的技术架构是计算资源和存储资源高度融合,计算和存储资源一体化存在以下明显的挑战:
数据孤岛:如今,企业拥有PB级数据已经成为常态,EB级数据时代也将很快到来。企业需要面向结构化数据、非结构化数据、实时数据等多种类型的数据提供高扩展且统一的数据管理和数据存储能力。
刚性扩容:在数据空间持续增长的背景下,大数据应用场景不断增加,对企业算力的需求也在加剧提升。而同时,新品发布、热点事件等带来的业务浪涌,也需要企业大数据系统拥有极致的弹性能力。
利用率低:大数据行业技术栈迭代迅速,企业自行构建IDC中心和自行部署软件,一次性投资大,且折旧成本高,运营运维负担沉重。
作业拥塞:随着业务的发展,在数据量巨大的背景下,单次分析作业常需要读取TB-PB级的数据,多任务并发下,极易出现作业拥塞。
面对以上挑战,传统的以私有数据中心为基础的存算一体大数据架构,已无法满足企业海量数据分析的需求。业界知名分析机构IDC在最新的报告中明确指出:企业上云已成必然趋势。因此,在公有云上部署更灵活高效的大数据分析平台,将成为企业的必然选择。
目前越来越多的企业开始选择使用计算和存储分离的架构,以应对更低成本的要求,和兼顾资源扩展的灵活性。
目前腾讯云弹性MapReduce(EMR)[1]支持了三种存储系统:EMR-HDFS、EMR-COS[2]、EMR-CHDFS[3],其中EMR-COS EMR-CHDFS在EMR中都是开箱即用的原生支持计算存储分离的方案,其具体应用场景及特点如下:
特点 | EMR-HDFS | EMR-COS | EMR-CHDFS |
---|---|---|---|
存储空间 | 集群规模相关 | 海量 | 海量 |
可靠性 | 高 | 高 | 高 |
元数据效率 | 快 | 慢 | 快 |
弹性效率 | 中 | 高 | 高 |
数据本地化 | 高 | 低 | 低 |
带宽成本 | 低 | 高 | 高 |
网络风暴 | 低 | 高 | 中 |
元数据操作效率高,能够与HDFS相当,能够有效规避COS文件系统元数据操作耗时以及高频访问下可能引发不稳定的问题。但在实际使用场景中,因为可能存在多个数据存储源管理复杂,部分业务场景对数据源的IO访问密集造成网络压力大,访问不稳定等问题。所以我们基于Alluxio进一步优化计算和存储架构,更好的满足业务应用上的需求。
传统计算存储分离,解决了计算量和存储量不匹配问题, 实现了算力的按需使用,大幅节省了运维规划时间以及闲置的算力成本。但直接使用计算存储分离架构,也引入了新的问题:
1.在IO密集型的场景下,网络带宽会成为瓶颈, 可能导致计算 & 存储资源利用不充分
2.数据本地化不够,导致很多shuffle过程的重复计算,造成部分浪费计算资源的浪费
3.可能存在多种甚至异构的存储源,增加了管理难度
为此,腾讯云EMR团队与Alluxio社区合作,引入最新alluxio2.3.0 Release版本进行深度优化,推出开箱即用的计算存储分离优化版本:EMR2.5.0/EMR3.1.0/EMR-TianQiong-1.0,解决上述问题。
在引入Alluxio后,EMR基于Alluxio的存算分离的整体架构变成了:
这样,EMR的计算引擎(Spark,MapReduce,Presto等)就可以统一通过Alluxio来提升性能,降低网络峰值带宽,以及简化数据管理。
为了分析理解使用Alluxio存储在主流查询引擎Spark性能上差异,我们使用大数据压测工具TPC-DS进行了一些性能压测。
我们使用的环境及配置如下:
EMR版本:EMR-2.5.0
选择组件:zookeeper-3.6.1,hadoop-2.8.5,hive-2.3.7,spark_hadoop2.8-3.0.0,tez-0.9.2,alluxio-2.3.0,knox-1.2.0
压测配置,使用了1个EMR的Master节点和25个CORE节点,具体如下:
MASTER | CORE | |
---|---|---|
数量 | 1 | 25 |
机型 | EMR-SA2 | EMR-IT3 |
CPU | 8C | 16C |
MEMORY | 32G | 64G |
磁盘 | 高效云盘 1*500G | 本地SSD 2*3720T |
从压测结果可以看到,能大幅优化计算存储分离网络带宽,节省峰值带宽(削峰)20%-50%,节省总带宽(10%-50%)。
从压测结果可以看到,在大部分场景下能优化性能,特别是IO密集型,优化性能5%-40%。
为了更好满足计算存储分离场景,EMR团队针对Alluxio做了专项调优,具体包括:
为了更好满足数据本地,EMR在部署Alluxio时,在core节点把alluxio-worker 同计算节点部署在一起,这样yarn等计算服务节点可以在同一个节点中与alluxio-worker节点通信,大量提升了效率。
另一方面,结合alluxio已经提供的读写策略,结合存算分离场景优化了block.read.location.policy,writetype.default等策略,让alluxio的缓存能力更好满足本地性。
Alluxio基于Presto实现了Catalog Service,并且实现了计算框架端的Connector,Alluxio可以感知并管理结构化数据的元数据,大大简化表级别的使用成本。同时,腾讯内部在大规模使用Alluxio时,我们发现Alluxio本身的inode元数据也面临着膨胀的风险。为此结合Alluxio提供的Catalog Service和Path缓存能力,优化了path.caching.thread和path.cache.capacity等策略。
更多meta具体优化可参考,社区meta优化[4]及catalog介绍[5]。
Alluxio作为Java的进程,其GC的经常影响其性能表现,为此,EMR团队引入了 Tencent Kona,经过了内部大数据和AI等业务场景的验证,为JAVA生态提供专业持续的保障。Kona在GC 线程调度优化,物理内存释放优化等方面有优秀表现,更多功能特性可见,Kona JDK[6]。
上述的这些能力和优化,在存算分离场景下,腾讯云EMR产品针对这种场景都已经直接提供了开箱即用的能力,直接在腾讯云EMR产品购买页创建,或者在已有支持了alluxio的EMR版本上安装,即可达到性能评估中效果。
从上述的压测结果看到,一方面有效的降低了带宽峰值和总带宽,从而降低带宽成本,加速访问;另一方面,IO密集型场景下的性能也有不少提升,能更好的支持IO密集型场景下的业务。此次基于Alluxio的优化,让腾讯云弹性MapReduce(EMR)产品更好的支持存储计算分离架构,为用户更好的满足业务需求的同时,降低成本,且保持资源扩展的灵活性。
参考资料:
[1] 腾讯云弹性MapReduce(EMR):
https://intl.cloud.tencent.com/zh/product/em
[2] 腾讯云COS:
https://cloud.tencent.com/product/cos/details
[3] 腾讯云 云HDFS(CHDFS):
https://cloud.tencent.com/document/product/1105
[4] meta优化:
https://docs.alluxio.io/ee/user/stable/en/operation/Performance-Tuning.html
[5] catalog介绍:
https://docs.alluxio.io/os/user/stable/cn/core-services/Catalog.html
[6] Kona JDK:
https://cloud.tencent.com/document/product/589/50714
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。