京东实战案例:基于Alluxio优化大数据计算框架的容错性和灵活性

编者按:本文是由京东大数据团队撰写的关于Alluxio深度应用到京东大数据平台的实践案例。​

京东(JD)大数据平台是一个开放、安全、智能的平台,它提供了可视化管理和监控系统,可以方便、快捷地定位集群问题。目前,平台上拥有超过4万台服务器,每天处理超过100万个任务,管理的数据总量超过450PB,而且以每天超过800TB的规模增长。这些规模庞大的数据及其处理内容,帮助我们在丰富的场景下实现了诸多相关的智能应用。目前,OLAP已经广泛运用到了京东大数据平台各个业务线,每天提供的查询服务超过50万次,覆盖范围包括从商城APP、微信、手机QQ,到离线数据分析平台。

Alluxio作为一款容错的可插拔的优化组件,应用于京东体系内诸多计算框架。我们利用Alluxio优秀的缓存能力为Ad Hoc和实时流计算框架提供良好的支撑,以降低集群对于网络吞吐的消耗,为统计业务报表以及为营销决策提供数据支撑。京东数名最优秀的研发工程师,根据业务场景和特点,基于京东大数据平台和Alluxio搭建了国内已知最大的Presto集群。我们实现了业界第一款Presto和Alluxio相结合的大数据量企业级交互式查询处理引擎,使Ad Hoc查询性能提升10倍以上。JDPresto on Alluxio目前已经在京东生产环境上线400台节点运行2年多,覆盖从商城APP到微信手机QQ,到离线数据分析平台,多快好省地帮助京东千万商家和10亿消费者提供更加精准的营销和用户体验。另外,在大数据平台的建设和维护过程中,京东的大数据工程师团队也为Alluxio开源社区做出了许多贡献。

一、京东大数据平台的业务问题背景

京东大数据平台拥有巨大的规模以满足京东不断增长的业务需求:

  • 集群规模:服务器数目超过4万台,其中离线集群总规模在2.5万余台,服务超过1.3万用户;
  • 计算能力:日处理离线数据超过40PB,日运行作业数目超过100万;
  • 存储能力:总数据量超过650PB,日增数据量超过800TB,总存储容量达到1EB;
  • 业务能力:覆盖超过40个业务主题,450个数据模型。

图1是京东大数据平台的体系架构。我们的大数据平台是一个开放、安全、智能的平台。HDFS作为分布式存储系统是整个平台的基础,许多计算框架工作在Yarn上。Alluxio作为分布式缓存系统,在计算框架和HDFS之中就像一座桥梁隔离了计算框架和底层存储。
在这里插入图片描述
图1 京东大数据分布式平台的体系架构

二、JDPresto on Alluxio架构与特性的介绍

本小节介绍JDPresto on Alluxio的使用案例。Alluxio作为容错可插拔的优化组件,应用于京东体系内诸多计算框架。利用Alluxio优秀的缓存能力提供对Ad Hoc和实时流计算原生的支撑,降低集群对于网络消耗的依赖。JDPresto on Alluxio已经在我们的生产环境上线400台节点运行2年了,带来了10倍平均性能提升。

图2展示了在使用Alluxio前后,Presto worker读取数据方式的区别。如上图左边所示,在使用Alluxio之前,Prestoworker有大概率从远端datanode读取数据.由于网络延迟,这会消耗很多时间。而上图的右边则显示出在使用Alluxio之后,Presto worker可以从同一节点上的Alluxioworker读到缓存的数据,这能够避免或减少从HDFS的远程读取开销,从而提高访问速度。简言之,Alluxio为Presto带来了更多的本地性和与底层文件系统的隔离性,从而保障了查询性能。
在这里插入图片描述

图2 Presto worker在使用Alluxio前后的读取数据方式区别

图3展示了我们修改后的JDPresto读split的逻辑。通常情况下,Presto从Alluxio读取数据,如果Alluxio发现没有数据,则从HDFS读取数据并缓存到Alluxio中,同时返回给Presto。这之后如果Presto再读取同样的数据,则会从Alluxio中读到缓存的数据,直接返回给Presto。当Alluxio服务不可用时,它可以直接访问HDFS。此外,我们还扩展了Alluxio,增强了Alluxio和HDFS之间的一致性验证。
在这里插入图片描述

图3 修改后的JDPresto读split的逻辑

三、JDPresto on Alluxio的性能评估与分析

如图4所示,我们的性能对比测试使用的是JDPresto的client终端在两个Presto集群,多次执行相同的SQL查询。左边,JDPresto直接访问HDFS,作为参照。右边为实验对象,JDPresto使用Alluxio作为分布式缓存。
在这里插入图片描述
图4 JDPresto和JDPrestoon Alluxio的性能结果对比

红色矩形圈起来的数字是当次SQL耗时。很明显,右边的比左边快。这是因为我们使用Alluxio缓存表格或分区文件。因此,在第一次访问后,Alluxio可以加速查询。图5是另一个视角,Presto的WebUI,我们可以和终端得到相同的结果,并且查询耗时从20秒降低到不到1秒,这是非常令人兴奋的结果!
在这里插入图片描述
图5 Presto WebUI展示的查询性能对比

图6总结了本次测试的结果。本次测试一共执行了6次对比查询。绿线代表JDPresto,黄线代表JDPresto-on-Alluxio。X轴表示查询次数,Y轴表示查询时间,单位是秒。我们可以看到JDPresto-on-Alluxio可以在第一次读之后减少读取时间,相比JDPresto集群快很多。
在这里插入图片描述
图6 JDPresto和JDPresto-on-Alluxio查询6次的性能对比

四、JDPresto on Alluxio的应用总结

为了达到本节中的优化效果,我们开展大量工作,包括修改了Alluxio和JDPresto,以及开发一些测试工具。如图7,我们还围绕App-on-Yarn也进行了一些工作。同时,我们正在积极地调研和评估,把Alluxio应用在其它计算框架中。在应用Alluxio的过程中,我们理解到Alluxio作为分布式缓存未必适用于所有的应用场景。大数据平台架构师需要深入理解Alluxio的工作原理,并结合自己公司的业务特点,找到适合的应用场景。
在这里插入图片描述
图7 京东在Alluxio、Presto、App on YARN上关注的一些工作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值