文章插图
以上内容介绍了美团基于Spark所做的平台化工作,这些平台和工具是面向全公司所有业务线服务的,旨在避免各团队做无意义的重复性工作,以及提高公司整体的数据生产效率 。
随着Spark的发展和推广,从上游的ETL到下游的日常数据统计分析、推荐和搜索系统,越来越多的业务线开始尝试使用Spark进行各种复杂的数据处理和分析工作 。
下面将以Spark在交互式用户行为分析系统以及SEM投放服务为例,介绍Spark在美团实际业务生产环境下的应用 。
Spark在交互式用户行为分析系统中的实践 美团的交互式用户行为分析系统,用于提供对海量的流量数据进行交互式分析的功能,系统的主要用户为公司内部的PM和运营人员 。
普通的BI类报表系统,只能够提供对聚合后的指标进行查询,比如PV、UV等相关指标 。但是PM以及运营人员除了查看一些聚合指标以外,还需要根据自己的需求去分析某一类用户的流量数据,进而了解各种用户群体在App上的行为轨迹 。根据这些数据,PM可以优化产品设计,运营人员可以为自己的运营工作提供数据支持,用户核心的几个诉求包括:
自助查询,不同的PM或运营人员可能随时需要执行各种各样的分析功能,因此系统需要支持用户自助使用 。
响应速度,大部分分析功能都必须在几分钟内完成 。
可视化,可以通过可视化的方式查看分析结果 。
要解决上面的几个问题,技术人员需要解决以下两个核心问题:
海量数据的处理,用户的流量数据全部存储在Hive中,数据量非常庞大,每天的数据量都在数十亿的规模 。
快速计算结果,系统需要能够随时接收用户提交的分析任务,并在几分钟之内计算出他们想要的结果 。
要解决上面两个问题,目前可供选择的技术主要有两种:MapReduce和Spark 。在初期架构中选择了使用MapReduce这种较为成熟的技术,但是通过测试发现,基于MapReduce开发的复杂分析任务需要数小时才能完成,这会造成极差的用户体验,用户无法接受 。
因此我们尝试使用Spark这种内存式的快速大数据计算引擎作为系统架构中的核心部分,主要使用了Spark Core以及Spark SQL两个组件,来实现各种复杂的业务逻辑 。实践中发现,虽然Spark的性能非常优秀,但是在目前的发展阶段中,还是或多或少会有一些性能以及OOM方面的问题 。
因此在项目的开发过程中,对大量Spark作业进行了各种各样的性能调优,包括算子调优、参数调优、shuffle调优以及数据倾斜调优等,最终实现了所有Spark作业的执行时间都在数分钟左右 。并且在实践中解决了一些shuffle以及数据倾斜导致的OOM问题,保证了系统的稳定性 。
结合上述分析,最终的系统架构与工作流程如下所示:
用户在系统界面中选择某个分析功能对应的菜单,并进入对应的任务创建界面,然后选择筛选条件和任务参数,并提交任务 。
由于系统需要满足不同类别的用户行为分析功能(目前系统中已经提供了十个以上分析功能),因此需要为每一种分析功能都开发一个Spark作业 。
采用J2EE技术开发了Web服务作为后台系统,在接收到用户提交的任务之后,根据任务类型选择其对应的Spark作业,启动一条子线程来执行Spark-submit命令以提交Spark作业 。
Spark作业运行在Yarn集群上,并针对Hive中的海量数据进行计算,最终将计算结果写入数据库中 。
用户通过系统界面查看任务分析结果,J2EE系统负责将数据库中的计算结果返回给界面进行展现 。
文章插图
该系统上线后效果良好:90%的Spark作业运行时间都在5分钟以内,剩下10%的Spark作业运行时间在30分钟左右,该速度足以快速响应用户的分析需求 。通过反馈来看,用户体验非常良好 。目前每个月该系统都要执行数百个用户行为分析任务,有效并且快速地支持了PM和运营人员的各种分析需求 。
Spark在SEM投放服务中的应用
流量技术组负责着美团站外广告的投放技术,目前在SEM、seo、DSP等多种业务中大量使用了Spark平台,包括离线挖掘、模型训练、流数据处理等 。美团SEM(搜索引擎营销)投放着上亿的关键词,一个关键词从被挖掘策略发现开始,就踏上了精彩的SEM之旅 。它经过预估模型的筛选,投放到各大搜索引擎,可能因为市场竞争频繁调价,也可能因为效果不佳被迫下线 。而这样的旅行,在美团每分钟都在发生 。如此大规模的随机“迁徙”能够顺利进行,Spark功不可没 。
推荐阅读
- 什么是IDS?IDS的作用
- 什么是C# 委托?这篇文章让你困惑全摆脱
- 玄米茶的冲泡方法讲解
- 擂茶怎么喝
- 拼多多搜索排名底层逻辑算法
- 普洱茶基本概念,什么是普洱茶熟茶和普洱茶生茶
- 如何在WordPress添加联系表单
- 淘宝微淘改版 微淘公布名单如何查看
- 梦见吃青枣很脆很甜 梦见吃青枣子是什么预兆?
- 淘宝直播直通车怎么开 淘宝直播都是怎么开通的