阿里云文件存储HDFS服务是阿里云专门针对先进的存储计算分离架构下的大数据分析场景定制推出的文件存储服务。文件存储HDFS采用全自研的底层架构,有效规避了开源HDFS系统的诸多短板,并提供标准的HDFS访问协议,用户无需对现有大数据分析应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、高可靠和高可用等特性的托管型分布式文件系统。CDH是Cloudera公司出品的Hadoop开源版本,广泛应用于大数据分析场景中。利用阿里云文件存储HDFS,用户可以方便的在云上实现存储计算分离架构,降低系统的整体拥有成本的同时,享受先进架构带来的各种优势。
背景介绍
在大数据分析场景中的部署形态大体上可以分为两类:融合部署和分离部署。
- 融合部署指的是计算和存储部署在一个集群中。
- 分离部署指的是计算和存储分别部署在不同的集群中。
作为大数据分析架构的先驱,Hadoop早期设计时将HDFS和上层计算引擎部署在一起。设计假设是在早期低速网络环境下可以利用数据本地化特性来提升作业性能。
随着10年来软件和硬件的不断演进,“数据本地化(data locality)”的收益在不断的减少。
- 在许多大数据分析场景中,即使计算和数据存储部署在一个集群,分析引擎也无法受益于数据本地化。
- 云服务商的内部网络速度从1G网络已经演进到25G甚至100G网络,带宽提升了100倍,用户态TCP和RDMA技术也开始在云网络中大规模应用,但是大数据分析基于的HDD磁盘速度并没有太大变化。在云环境下,内网的网络带宽已经不是性能的瓶颈。
将计算和存储分开可以简化操作,用户可以分别扩展和管理计算和存储系统。
- 从集群扩展角度来说,随着业务的发展,集群的规模常常不能满足业务的需求。也许是数据规模超过了集群存储能力,也许是业务上对数据产出的周期提出新的要求导致计算能力跟不上。这就要求我们能随时应对集群存储空间不足或者计算能力不足的挑战。将计算和存储分离,可以更好地应对单方面的不足。如果将计算和存储混合部署,常常会因为为了扩存储而带来额外的计算扩容,这其实就是一种浪费;同理,只为了提升计算能力,也会带来一段时期的存储浪费。
- 公共云计算服务的一个很大的特性是按需创建集群,也就是需要处理数据时才去创建集群,用完即可销毁,最大程度降低使用成本。这种模式很适合那些只需要每天定时进行数据处理的场景,例如产出每天报表等等。但是,融合部署模式无法支持这种使用模式,融合部署模式的集群释放后数据也就丢失。计算和存储分离可以很好地解决这个问题,计算集群可以随时使用随时创建,增加使用的灵活性。
- 独立的HDFS存储系统可以实现多计算集群对同一数据湖的访问,以及不同业务计算资源的物理隔离,最大程度的保障业务稳定。如离线业务与实时业务的隔离场景,用户可以借助存储计算分离架构,为离线计算与实时计算建立两个独立物理集群,然后访问同一个的文件存储HDFS文件系统实例。独立的HDFS存储系统还可以让多个不同版本Hadoop集群分析底层同一份HDFS存储集群中的数据,满足了由于历史原因导致的业务系统依赖多版本Hadoop计算框架造成的多集群共存数据孤岛问题。
- 存储计算分离以后,托管化的存储系统提供高可靠和弹性扩展,可以让用户更专注与计算本身,不再分散精力到HDFS系统的运维上。
如何构建系统
在线下实现存储计算分离是有一定门槛的,涉及已有硬件架构的大量更新。得益于云上资源的虚拟化和服务化以及高速内部网络,您可以在阿里云上轻松的构建存储计算分离。请参考已下专题文档,一步步构建:
1.CDH6数据迁移:https://help.aliyun.com/document_detail/127300.html
2.配置CDH6使用文件存储HDFS:https://help.aliyun.com/document_detail/127312.html
3.卸载并释放CDH6 HDFS服务使用的云盘:https://help.aliyun.com/document_detail/127418.html
性能测试
集群配置:
架构 | 计算资源 | 内存 | Shuffle | HDFS |
---|---|---|---|---|
存储计算分离集群配置 | 5 x 8 core | 5 x 32 GB | 250GB x 4 TB 云盘 | 阿里云HDFS 30TB |
存储计算融合集群配置 | 5 x 8 core | 5 x 32 GB | 5.5TB本地盘 | 自建30TB |
存储计算分离集群配置:1 master 8cpu 32GB、4 Slave 8cpu 32GB、每个节点4块250GB高效云盘、10TB 文件存储HDFS文件系统实例
存储计算融合集群配置:1 master 8cpu 32GB、4 Slave 8cpu 32GB、每个slave节点5.5T*4本地盘
软件版本:CDH6.0.1、Java 1.8
测试场景:
数据规模:100GB1000T
Driver主进程部署模式:cluster
spark并发度:2000
io.file.buffer.size: 64m
测试结果:
分析:
在数据量相同,使用文件存储hdfs比使用本地磁盘搭建hdfs进行测试运行时间更快,而且各个测试阶段都有明显提升。特别是当数据量为1000g的时候,gendata阶段提升最明显。此时使用hadoop hdfs测试gendata项平均运行时间为1808.514s,而使用文件存储hdfs平均运行时间约为835s。通过监控可知,使用本地磁盘搭建的hdfs的读取吞吐最大值为1.9GB/s,而文件存储HDFS的读取吞吐最大值为2.69GB/s。这完全改变了存储计算分离架构的I/O性能一定低于存储计算混部架构的习惯性印象。同时在整个阶段中,使用文件存储hdfs的集群worker节点无需处理磁盘I/O,系统可以将跟多的CPU用在真是的计算负载上。
结语
我们可以看出,在云上CDH集群中,文件存储HDFS结合ECS可以在让存储计算灵活部署的前提下,让Spark性能得到了显著的提升。文件存储HDFS这个新的针对大数据分析的云存储产品可以极大地提升原有的大数据分析系统的使用感受。当然,除了Spark以外我们会持续推出其他大数据引擎与文件存储HDFS结合的最佳实践,欢迎大家试用文件存储HDFS。