写点什么

架构师训练营第 2 期 第 13 周总结

用户头像
月下独酌
关注
发布于: 2021 年 01 月 17 日

RDD 弹性分布式数据集

1、Spark 针对数据进行编程,将大规模数据集合抽象为一个 RDD 对象,RDD 对象经过计算处理,得到新的 RDD 对象。编程即针对 RDD 不断得操作,完成大数据作业。


2、一个 RDD 是一个完整的数据集,数据集里分片。计算是针对每个分片进行的。


3、RDD 上转换操作分为两种,一种是不产生新的分片,比如 map,filter 后,结果保留在原分片上;另一种则相反(reduceByKey 等),比如在大部分场景下,执行 groupBy 时,来自不同分片相同的 Key 被聚合在一起,会生成新 RDD 分片。


4、原始与目标的 RDD 里的数据集分片依赖关系是否变动(是否有 shuffle 依赖),分别将这种依赖关系划分为宽依赖(shuffle 依赖)与窄依赖(无 shuffle 依赖)这两种概念。


5、窄依赖:数据内容会被按需要改变,但分片依赖关系不变,哪怕是两个 RDD 进行 union 操作,在逻辑上变成了一个 RDD,没必要在物理层面生成新 RDD。


6、宽依赖:数据内容会改变,分片依赖关系亦会改变,不得不在物理上生成新的 RDD 分片。


7、Spark 的惰性计算体现在以上两点中,当需要产生新的 RDD 分片时,物理上才会有真正的 RDD 分片生成。处理逻辑在某种意义上类似于 jvm 判断,是否需要给 new 出来的对象分配新的内存空间。


8、Spark 的计算阶段是按照 shuffle 划分的,遇到则产生新的阶段。原因是:执行 shuffle 意味着多台服务器,通过网络通信,向目标服务器的新 RDD 位置写入数据。这也表示,未执行 shuffle 前,只在各自的服务器上单独的计算进程进行计算即可。在如此划分后,可将各阶段的计算任务丢到相应的服务器集群去完成。


流处理计算

Storm

Nimbus 进行资源分配与任务调度。

Supervisior 接收 Nimbus 分配的任务,启动与停止 Worker 进程。有多台。

Worker 运行具体处理组件逻辑的进程。

Task 是 Worker 中每一个 Spout/Bolt 的线程。

Topology 是实时应用程序。

Spout 是在一个 Topology 中产生源数据流的组件,它的数据来自外部数据源。也会有多台。具体场景下举例:监听文件系统,读取被修改的文件,获取修改的数据。

Bolt 是在一个 Topology 中接受并处理数据的组件,包含写数据库,函数操作等任务操作。自然也会部署在多台服务器。

Tuple 是消息传递的基本单元,数据结构为 List。

Stream 由不断传递的 Tuple 组成。


Spark Streaming

Spark 是批处理,按照数据分片计算的。现在对于流进来的数据,可以按照时间一批一批的被缓存起来,然后把这个时间窗口包含的数据视作小的批处理输入,丢给 Spark 引擎去处理,模拟流处理计算。java 编程涉及 JavaStreamingContext。


Flink

在使用时,批处理与流处理底层的代码是复用的,仅是初始的声明不同。


用户头像

月下独酌

关注

还未添加个人签名 2019.07.22 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第2期 第13周总结