大数据开发实践:美团如何使用Spark处理大数据?
数据处理
大数据开发
大数据技术
浏览:1326 次

前言
美团最初的数据处理主要基于Hive SQL,底层计算引擎是MapReduce,一些相对复杂的业务将由编写MapReducer程序的工程师来实现。随着业务的发展,简单的HiveSQL查询或MapReduce程序越来越难以满足数据处理和分析的需要。
一方面,MapReduce计算模型不支持多轮迭代DAG作业。每一轮迭代都需要下载数据,这大大影响了作业执行的效率。此外,仅提供了Map和Reduce两个计算因素,这使得用户实现迭代计算(如机器学习算法)的成本高昂且效率低下。
另一方面,在数据仓库的日常生产中,由于一些原始日志是半结构化或非结构化数据,因此在清理和转换它们时需要将SQL查询和复杂的过程逻辑处理结合起来。这部分工作之前由HiveSQL与Python脚本结合完成。这种方法存在效率问题。当数据量很大时,进程的运行时间很长。这些ETL流程通常处于上游位置,这将直接影响一系列下游流程的完成时间和各种重要数据报告的生成。

基于上述原因,美团在2014年引入了Spark。为了充分利用现有Hadoop集群的资源,我们采用了Spark-on Yarn模式。所有Sparkapp和MapReduce作业将通过Yarn统一调度和执行。Spark在美团数据平台架构中的地位如图所示:
接下来,我们将介绍Spark在美团的实践,包括基于Spark的平台工作以及Spark产品在生产环境中的应用案例。它包括与Zeppelin结合的交互式开发平台,以及使用Spark任务完成的ETL数据转换工具。数据挖掘小组开发了一个基于Spark的特征平台和数据挖掘平台。此外,还有一个基于Spark的交互式用户行为分析系统及其在SEM交付服务中的应用。以下是详细介绍。
Spark交互式开发平台
在推广如何使用Spark的过程中,我们总结了用户开发app的主要要求:

数据研究:在正式开发程序之前,需要首先了解要处理的业务数据,包括:数据格式、类型(如果存储在表结构中,则对应于字段类型)、存储方法、是否存在脏数据,甚至根据业务逻辑实现分析是否可能存在数据歪斜。这一要求非常基本和重要。只有当您完全控制数据时,才能编写高效的Spark代码;
代码调试:很难确保业务的编码实现能够在一夜之间实现,可能需要不断的调试;如果每次进行少量修改都需要在线编译、打包和提交测试代码,这将极大地影响用户的开发效率;
联合开发:为了实现整个业务,通常需要多方协作。此时,有必要有一种方便的方式来共享代码和执行结果,以共享他们的想法和测试结论。【大数据开发学习资料领取方式】:加入大数据技术学习交流扣分群458345782,点击加入群聊,私信管理员即可免费领取
基于这些需求,我们调查了现有的开源系统,最终选择了Apache孵化项目Zeppelin作为基于Spark的交互式开发平台。齐柏林飞船集成了Spark、Markdown、Shell、Angular等引擎,并集成了数据分析、可视化等功能。

我们在原生齐柏林飞艇上添加了用户登录身份验证、用户行为日志审核、权限管理和Spark作业资源隔离,为美团Spark创建了一个交互式开发平台,不同的用户可以在该平台上调查数据、调试程序、共享代码和结论。
Zeppelin中集成的Spark提供了三种解释器:Spark、Pyspark和SQL,它们分别适用于编写Scala、Python和SQL代码。对于上述数据研究要求,无论是在程序设计之初还是在编码实现过程中,当需要检索数据信息时,都可以通过齐柏林提供的SQL接口轻松获得分析结果;此外,Scala和Pytho的交互功能