存储 频道

基于Alluxio提升数据访问性能系统稳定

  【IT168 现场报道】随着云计算和大数据时代的来临,数据正在以前所未有的速度成为各个领域价值创造的核心驱动力。在此背景下,国内最受关注的数据库技术盛会——2017第八届中国数据库技术大会(DTCC2017)将于2017年5月11-13日如约而至。

  本届大会以“数据驱动?价值发现”为主题,汇集来自互联网、电子商务、金融、电信、政府、行业协会等20多个领域的120多位技术专家,共同探讨Oracle、MySQL、NoSQL、云端数据库、智能数据平台、区块链、数据可视化、深度学习等领域的前瞻性热点话题与技术。大会共设定2大主场和20个技术专场,将吸引5000多名IT人士参会,为数据库人群、大数据从业人员、广大互联网人士及行业相关人士提供最具价值的交流平台。

  5月13日,在《数据存储与加速技术专场》上,南京大学讲师顾荣对时序数据存储做了精彩的演讲。在此次分享中,顾荣也介绍了Alluxio可以给与HDFS共同部署的计算集群的两大好处:性能的高可预测性使得SLA(service-level agreement服务级别协议)很容易满足。例:作业运行时间的变化范围从100秒以上缩短至2秒;高达10倍的性能提升。

  Alluxio是什么?

  Alluxio是世界上首个以内存为中心的虚拟的分布式存储系统。它为上层计算框架和底层存储系统构建了桥梁,应用可以通过Alluxio提供的统一数据访问方式访问底层任意存储系统(例如Hadoop HDFS)中的数据。此外,Alluxio以内存为中心的架构使得数据的访问速度能比常规方案快几个数量级。

  据了解,Alluxio开源项目从诞生的4年来发展迅速,已有超过100个组织机构的 400多贡献者参与开源系统的开发。本技术分享将首先介绍Alluxio开源项目最新版本的一些重要特性,包括:Restful API、与Apache Hive的整合等;然后将重点介绍如何基于Alluxio存储系统的提升Spark中单应用的DataFrame/RDD数据的访问性能并提供多应用的数据快速共享;最后还会分析如何利用Alluxio提升Hadoop HDFS集群的数据访问性能与一致性。

基于Alluxio提升数据访问性能系统稳定
▲南京大学讲师顾荣

  基于Alluxio的Spark DataFrame/RDD性能调优

  顾荣介绍,RDD被保存后(无论存储在Spark内存还是Alluxio中),应用可以读取RDD以进行后续的计算任务。利用缓存RDD或者以文件形式存储的RDD运行count()函数,并分别统计运行时间。下图展示了在不同存储方式下操作的完成时间。

基于Alluxio提升数据访问性能系统稳定

  顾荣说,读取存储在alluxio中的RDD数据具有比较稳定的执行性能。对于从Spark缓存中读取持久化数据,在数据集规模较小时执行性能具有一定优势,但是随着数据集规模的增长,性能急剧下降。例如,Spark程序在配了61GB内存的节点上调用persist(MEMORY_ONLY)API,当数据集超过10GB时,Spark内存无法全部存放job所需数据,执行时间会下降。

  另一方面,相比使用Spark内置缓存,使用Alluxio存储RDD并执行count()函数,其性能在小规模数据上略有劣势。然而,随着数据规模的增长,从Alluxio中读取文件性能更好,因为这种方式耗时几乎始终随着数据规模线性增长。因此,对于一个给定内存大小的节点,Alluxio可以使应用以读取内存的速率处理更多数据。

  使用Alluxio共享存储的RDD

  同时,使用Alluxio存储RDD的另一大优势是可以在不同Spark应用或作业之间共享存储在Alluxio中的数据。当一个DataFrame文件被写入Alluxio后,它可以被不同的作业、SparkContext、甚至不同的计算框架共享。因此,如果一个存储在Alluxio中的RDD被多个应用频繁地访问,那么所有的应用均可以从Alluxio内存中直接读取数据,并不需要重新计算或者从另外的底层外部数据源中读取数据。

  为了验证采用Alluxio共享内存的优势,顾荣分享了其应用相同的配置运行一个简单实验。应用50GB大小的数据集,我们在RDD上执行不同Spark job,并且记录count()操作的耗时。没有使用Alluxio时,Spark应用需要每次都从数据源读取数据(在本次实验中是一个本地SSD)。在使用Alluxio时,数据可以直接从Alluxio内存中读取。下图展示了程序在这两种情况下,运行count()函数完成时间性能对比。

基于Alluxio提升数据访问性能系统稳定

  结果显示了Spark程序如果不使用Alluxio,必须从数据源处重新读取RDD,本例中是本地SSD。然而,将Alluxio和Spark一起使用时,数据已经存储在Alluxio内存中,所以Spark可以快速地读取RDD。当Spark从Alluxio中读取RDD时,读取速度可以提升4倍。如果RDD来自访问起来更慢或不稳定的数据源,Alluxio的优势就更加明显了。下图显示了RDD位于某公有云存储时程序的执行时间。

  在这种情况下,RDD数据集远离计算程序,读取数据花费更多时间,当应用Alluxio时,数据仍然在Alluxio内存中,所以计算可以快速完成。在这种情况下,应用Alluxio可以加速16倍。

  这个实验证明了通过Alluxio共享RDD这一方式,可以在多个Spark应用读取相同数据时提升性能。

  Alluxio 1.4版本新功能介绍

  Alluxio 1.4.0已经发布了大量的新功能和改进。顾荣还在演讲中分享了Alluxio 1.4.0开源版本的一些重要特性。其中包括改进的Alluxio底层存储API,文件系统REST接口、数据包流。同时,顾荣分享了四个测试场景下的应用分析。

基于Alluxio提升数据访问性能系统稳定

基于Alluxio提升数据访问性能系统稳定

基于Alluxio提升数据访问性能系统稳定

基于Alluxio提升数据访问性能系统稳定

基于Alluxio提升数据访问性能系统稳定

  提升Spark和Hadoop应用小结

  Alluxio可以在多个方面帮助Hadoop/Spark应用

  Alluxio可以直接在内存中保存大规模的数据来加速 Spark应用

  Alluxio能够共享内存中的数据

  Alluxio可以提供稳定和可预测的性能。

基于Alluxio提升数据访问性能系统稳定
▲更多精彩请点击:http://tech.it168.com/topic/2017/5-10/DTCC2017/

0
相关文章