Spark Streaming 在腾讯广点通的应用

lwlin发布于2018/09/10

注脚

展开查看详情

1.中国 Spark 技术峰会 2016 Spark Streaming 在腾讯广点通的应用

2.关于腾讯广点通 腾讯社交广告 ( Tencent Social Ads ) • 基于腾讯社交网络体系的广告平台 流量覆盖 • QQ 客户端、手机 QQ • 微信 • QQ 音乐客户端、腾讯新闻客户端 主动型效果广告 • 有效实现更加智能的广告匹配和高效的广告资源利用 广告形式 • Banner 广告、插屏广告、开屏广告、信息流广告等

3.广点通与 Spark Streaming Spark 0.x ~ 1.1 社区贡献 • 调研、试验 Spark 1.2 ~ 1.6 • 使用 • 1.2 加入了 driver 故障恢复 左侧图片来源:https://databricks.com/blog/2015/07/30/diving-into-spark-streamings-execution-model.html

4.Agenda 概述 • Spark Streaming 基本架构 • Spark Streaming at 广点通 特性与应用 优化经验

5.Spark Streaming 基本架构 图片来源:http://www.datanami.com/2015/11/30/spark-streaming-what-is-it-and-whos-using-it/

6.Spark Streaming 基本架构 Worker Node Driver Program Executor StreamingContext input Long stream Task Receiver Spark Jobs to process received data Spark context Worker Node tasks Executor output process results received data in batches Task Task

7.Spark Streaming at 广点通 腾讯 Spark 技术栈(powered by ) TDBank Tesla message queue Spark Streaming 监控与拉起 Spark Streaming at 广点通 #apps #cores data volume peak rate ~30 ~2000 ~70 TB/day ~600 k/sec

8.Agenda 概述 特性与应用 • (1) exactly-once • (2) 可靠状态 • (3) batch 调度 优化经验

9.特性与应用-(1) exactly-once Spark 执行单元 input … … output • 任务(即一批数据) (5) (5) (10) (10) • 一批数据全部成功/全部失败 … Task 重做 input (5) (5) … … output • 失败重做:task 重做、stage 重做 (5) (10) (10) • 推测执行:另一个节点同时做 … … output • Committer: 任务唯一成功 input (5) (10) (10) (5) … … output (5) (10) (10) 其它系统 • Storm: at-most-once input … … output (5) (5) (11) (12) Storm: at-least-once input … … output • MapReduce: exactly-once (5) (5) (9) (8)

10.特性与应用-(1) exactly-once 应用:实时准确数据转移 Dedupli Trans Clean Join cate form 应用:反作弊 + 计费!!! Anti Clean Join Billing Strategies Spam

11.特性与应用-(2) 可靠状态 Spark Streaming 天然面向状态 • RDD: Resilient Distributed Datasets • RDD lineage - 容错:重做 • rdd.checkpoint() - HDFS, S3… 等 可靠状态管理 • Spark 1.5: updateByKey() • Spark 1.6: [kv store] mapWithState() • Spark 2.0: [kv store] StateStore 图片来源:https://databricks.com/blog/2015/06/22/understanding-your-spark-application-through- visualization.html

12.特性与应用-(2) 可靠状态 应用:跨 batch 聚合(pv/uv 计算,记录去重,微额记账等)

13.特性与应用-(2) 可靠状态 应用:跨 batch 聚合(pv/uv 计算,记录去重,微额记账等)

14.特性与应用-(3) 快速 batch 调度 MapReduce 的实例调度 • 一级调度系统(oozie 等) 10m 10m 10m - 最小间隔 10 min - 进程调度 ... - 需要一定启动时间 Spark Streaming 的 batch 调度 • 一级调度系统(oozie 等) • 二级调度系统 5s 5s - Driver / JobScheduler 调度 ... 5s 5s - 间隔 1s ~ 60s - 进程常驻+线程调度、无启动时间 5s 5s

15.特性与应用-(3) 快速 batch 调度 应用:数据指标监控 30s input result input 30s input result input 应用:复杂 pipeline 的 未成功数据唯一快速重试 30s fail 1 30s fail 1 30s

16.Agenda 概述 特性与应用 优化经验 • (1) 增加 Memory Back Pressure • (2) 为 Spark 增加新特性(无需编译 Spark 优化) • (3) SparkSQL API > RDD API • (4) async execution within a task • (5) try-cath • (6) concurrentJobs 开启 • (7) Spark 远程调试

17.优化经验 (1) 增加 Memory Back Pressure • Receiver 的接收速率随 Executor 的内存使用动态放缩,避免 OOM

18.优化经验 (2) 为 Spark 增加新特性(无需编译 Spark 工程) • A. 直接改源文件 ***.scala - src 原包名下,如 src/o/a/s/streaming/receiver/RateLimiter.scala - 运行参数:spark.driver/executor.userClassPathFirst=false; spark.driver/executor.extraClassPath=app.jar • B. 直接改字节码 ***.class - resources 原包名下,如 resources/o/a/s/executor/Executor.class - 运行参数:spark.driver/executor.userClassPathFirst=false; spark.driver/executor.extraClassPath=app.jar A B

19.优化经验 (3) SparkSQL API > RDD API • Run faster - Catalyst Optimizer - Tungsten Engine – Memory Management – Cache-aware Algorighms – Whole Stage Codegen • Spark 1.x - dstream.foreachRDD { rdd => rdd.toDF().select… } • Spark 2.x: Structured Streaming - spark.….stream.….startStream() 图片来源:Real-time Spark: From interactive queries to streaming

20.优化经验 async execution / within a task (4) async execution within a task • 应对外部操作:线程池+异步 (5) try-catch val inputDStream = ssc.fileStream("...") inputDStream.foreachRDD(rdd => { try { • task 的错误,会在 driver 端抛出 // do something } catch { • 屏蔽 "Could not compute split" 等问题 } case NonFatal(e) => errorHandler(e) }) (6) concurrentJobs 开启 • 内部参数,同时执行 n 个 output - 一般 1 个 batch 对应 1 个 output • spark.streaming.concurrentJobs = n

21.优化经验 (7) Spark 远程调试 • your profiler 按需分发 图片来源:https://www.ej-technologies.com/products/jprofiler/whatsnew91.html

22.总结与展望 总结 特性 应用 实时准确数据转移 (1) exactly-once 反作弊 + 计费!!! 跨 batch 聚合 (2) 可靠状态 (pv/uv 计算,记录去重,微额记账等) 数据指标监控 (3) 快速 batch 调度 复杂 pipeline 的未成功数据唯一重试 展望 • From Lambda Architecture(MR + Storm) to Spark Streaming • Spark 2.0: Structured Streaming - High-level streaming API built on Spark SQL engine - Event time, windowing, sessions, sources & sinks

23.Thanks!