前言
美团最初的数据处理以 Hive SQL 为主, 底层计算引擎为 MapReduce, 部分相对复杂的业务会由工程师编写 MapReduce 程序实现. 随着业务的发展, 单纯的 Hive SQL 查询或者 MapReduce 程序已经越来越难以满足数据处理和分析的需求.
一方面, MapReduce 计算模型对多轮迭代的 DAG 作业支持不给力, 每轮迭代都需要将数据落盘, 极大地影响了作业执行效率, 另外只提供 Map 和 Reduce 这两种计算因子, 使得用户在实现迭代式计算 (比如: 机器学习算法) 时成本高且效率低.
另一方面, 在数据仓库的按天生产中, 由于某些原始日志是半结构化或者非结构化数据, 因此, 对其进行清洗和转换操作时, 需要结合 SQL 查询以及复杂的过程式逻辑处理, 这部分工作之前是由 Hive SQL 结合 Python 脚本来完成. 这种方式存在效率问题, 当数据量比较大的时候, 流程的运行时间较长, 这些 ETL 流程通常处于比较上游的位置, 会直接影响到一系列下游的完成时间以及各种重要数据报表的生成.
基于以上原因, 美团在 2014 年的时候引入了 Spark. 为了充分利用现有 Hadoop 集群的资源, 我们采用了 Spark on Yarn 模式, 所有的 Spark App 以及 MapReduce 作业会通过 Yarn 统一调度执行. Spark 在美团数据平台架构中的位置如图所示:
下面将介绍 Spark 在美团的实践, 包括基于 Spark 所做的平台化工作以及 Spark 在生产环境下的应用案例. 其中包含 Zeppelin 结合的交互式开发平台, 也有使用 Spark 任务完成的 ETL 数据转换工具, 数据挖掘组基于 Spark 开发了特征平台和数据挖掘平台, 另外还有基于 Spark 的交互式用户行为分析系统以及在 SEM 投放服务中的应用, 以下是详细介绍.
Spark 交互式开发平台
在推广如何使用 Spark 的过程中, 我们总结了用户开发应用的主要需求:
数据调研: 在正式开发程序之前, 首先需要认识待处理的业务数据, 包括: 数据格式, 类型(若以表结构存储则对应到字段类型), 存储方式, 有无脏数据, 甚至分析根据业务逻辑实现是否可能存在数据倾斜等等. 这个需求十分基础且重要, 只有对数据有充分的掌控, 才能写出高效的 Spark 代码;
代码调试: 业务的编码实现很难保证一蹴而就, 可能需要不断地调试; 如果每次少量的修改, 测试代码都需要经过编译, 打包, 提交线上, 会对用户的开发效率影响是非常大的;
来源: http://www.jianshu.com/p/13c44634e533