11 Beam 之 PCollection 和 Transform

这篇总结来自极客时间专栏《大规模数据处理实践》的 24-25 节。

PCollection:Beam 的 数据封装

这里先来看下 为什么 Beam 要如此抽象封装数据

为什么需要 PCollection

这个比较好理解,就跟 Spark 需要 RDD 一样,有了对数据统一封装,会极大简化处理层的实现,Beam 这里也是,几乎所有数据都能表示为 PCollection。

PCollection,就是 Parallel Collection,意思是可并行计算的数据集,对于任何一个分布式计算系统,架构设计者都是需要为用户隐藏具体的实现细节,这就包括数据是怎样表达和存储的

对数据的统一抽象就非常重要,就像我前面说的,它相当于数据层与计算层的解耦,让计算层关注于计算层的实现。

为什么 PCollection 需要 Coders

在 Beam 中,每个 PCollection 都需要一个 Coders,它主要是告诉 Beam,怎么把你的数据类型序列化和反序列化,以便在网络上传输,当然对于基本的数据类型是不需要的,其他的情况下是需要的。

这个有点类似于指定序列化和反序列类,其实可以做到对于输入指定反序列化类,输出指定序列化类,中间其他算子全都走统一的数据抽象,这样会更友好一些,不过 PCollection 这样,也给了用户更多灵活性,但如果在公司内部用的话,还是需要更加用户友好一些。

无序性

PCollection 的无序也与其分布式本质有关,一旦一个 PCollection 被分配到不同的机器上执行,它的执行顺序是无法保证的,这个跟 RDD 是一样的。

没有固定大小

Beam 要统一批处理和流处理,PCollection 既会对有界数据抽象,又会对无界数据抽象,所有它是没有固定大小的。但 PCollection 的有界和无界会影响到 Beam 的数据处理方式,需要不同的 Runner 去执行。

不可变性

一个 PCollection 一旦 生产就不可变,只能通过 Transform 转化为一个新的 PCollection。

在一个 pipeline 中,Beam 会对生成的有向无环图,也就是执行计划,做一个优化,而不是直接按照用户的原意去执行。

总结

这节课有点水,介绍得不是很熟,其实可以多加一些代码讲解,不如 Spark RDD 介绍得那么详细,不过好在可以自己去研究 Beam 看。

有兴趣的同学,可以通过下面的链接购买,会有一些优惠

二维码扫描购买有一定优惠

推荐阅读更多精彩内容