访客机中几点吸引我的特性 spark2.3-spark技术分享

中几点吸引我的特性 spark2.3-spark技术分享
首发个人公众号 spark技术分享 , 同步个人网站 coolplayer.net ,未经本人同意,禁止一切转载毫秒延迟的持续流处理
很久之前好像就在哪里看到 spark 未来会支持 毫秒延迟的 持续流处理, 我本来以为会在 spark streaming 这个项目里面实现, 现在来看是放在了 Structured Streaming , 我们都知道, spark 几乎所有的 高层的框架都是基于 spark core 里面的RDD模型来构建的, 所以 spark 里面的流式处理就被设计成了 微批 处理, 对每一 duration 的流数据生成一个 batch, 然后再 把这个 batch 转变成了 spark core 里面的job 去执行,

在持续模式下,流处理器持续不断地从数据源拉取和处理数据,而不是每隔一段时间读取一个批次的数据,这样就可以及时地处理刚到达的数据。如下图所示,延迟被降低到毫秒级别,完全满足了低延迟的要求风暴之门 。

不过有一点需要注意,官方是这样介绍的
Continuous processing is a new姜晶花, experimental streaming execution mode introduced in Spark 2.3 that enables low (~1 ms) end-to-end latency with at-least-once fault-tolerance guarantees. Compare this with the default micro-batch processing engine which can achieve exactly-once guarantees but achieve latencies of ~100ms at best. For some types of queries (discussed below), you can choose which mode to execute them in without modifying the application logic (i.e. without changing the DataFrame/Dataset operations).
这段介绍里面的重点是 微批处理模式最低延迟可以做到 100ms 左右,但是可以做到 exactly-once, 持续模式虽然可以做到 最低 1ms 的延迟,但是只能做到 at-least-once徐则林 , 这个需要使用者去权衡自己的需求来选择。
从介绍来看, 这点是很吸引我的一个特性燃烧的岛群,马来法 因为之前碰到一些对延迟要求极其苛刻的业务,只能使用 flink 或者 storm 来实现龙焱特种部队 , 现在是不是就可以统一使用 spark 来搞了,
具体内部实现代码还没细看, 未来看过实现代码我还会做进一步分享。流到流的连接
Spark 2.0 的 Structured Streaming 已经可以支持 DataFrame/Dataset 的连接操作,但只是流到静态数据集的连接,而 Spark 2.3 带来了期待已久的流到流的连接,支持内连接和外连接,可用在大量的实时场景中。
广告变现是流到流连接的一个典型应用场景雕龙刻凤 。例如,广告 impression 流和用户点击流包含相同的键(如 adld)和相关数据李令月 ,而你需要基于这些数据进行流式分析,找出哪些用户的点击与 adld 相关访客机。
这里值得注意的就是, 如果你想对两个流式数据源进行进行join 操作, 因为流式数据被抽象成无限的大表,这样来看一个极端情况,每条新到的数据是不是应该和 另外一个数据流历史中所有的数据去做 join,这样显然是不现实的, 必须要做一下限制才可以,目前有两种限制
event-time 时间range 限制(e.g. …JOIN ON leftTime BETWEN rightTime AND rightTime + INTERVAL 1 HOUR)。举个例子,对于 impression 流和用户点击流,我们规定 点击时间 和 impression数据流一个时间范围的数据进行 join。
event-time 时间窗口限制,(e.g. …JOIN ON leftTimeWindow = rightTimeWindow),这个更简单粗暴何岩柯 ,就直接对相同时间窗口的数据进行 join 操作
对于两个数据流我们都可以设置 Watermarking 鬼猫屋 , 这个类似对流数据进行聚合的时候设置的 Watermarking, 对于迟到多久的数据,我们不再用来更新结果,这里就是不再更新 join 的结果。Spark 和 Kubernetes

Spark 和 Kubernetes 这两个开源项目之间的功能组合也在意料之内,用于提供大规模分布式的数据处理和编配。在 Spark 2.3 中利华益,用户可在 Kubernetes 集群上原生地运行 Spark,从而更合理地使用资源,不同的工作负载可共享 Kubernetes 集群。

Spark 可以使用 Kubernetes 的所有管理特性,如资源配额、可插拔的授权和日志。另外,要在已有的 Kubernetes 集群上启动 Spark 工作负载就像创建一个 Docker 镜像那么简单汉唐归来 。

欢迎关注spark技术分享

作者:admin 2019年01月09日