前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Beam研究

Apache Beam研究

作者头像
哒呵呵
发布2018-09-18 12:27:24
1.5K0
发布2018-09-18 12:27:24
举报
文章被收录于专栏:鸿的学习笔记
介绍

Apache Beam是Google开源的,旨在统一批处理和流处理的编程范式,核心思想是将批处理和流处理都抽象成Pipeline、Pcollection、PTransform三个概念。Apache Beam本身是不具备计算功能的,数据的交换和计算都是由底层的工作流引擎(Apache Apex, Apache Flink, Apache Spark, and Google Cloud Dataflow)完成,由各个计算引擎提供Runner供Apache Beam调用,而Apache Beam提供了Java、Python、Go语言三个SDK供开发者使用。

批处理和流处理的简述

批处理最经典的编程模型莫过于MapReduce,通过提供统一的抽象接口(文件),不可变的编程模型实现对数据的切分计算,而流处理的编程模型则是事件流的概念,把每一次流过窗口的数据作为一次事件处理。批处理和流处理的数据最关键的区别在于批处理的数据集合是有界的,文件或者数据具有固定的大小,不会发生改变,而流处理的数据集合是无界的,理论上来说,事件是无穷无尽的。现在分布式系统里,批处理和流处理的统一最知名的莫过于lambda架构。

Apache Beam的编程模型

Apache Beam的编程模型的核心概念只有三个:

  • Pipeline:包含了整个数据处理流程,分为输入数据,转换数据和输出数据三个步骤。
  • PCollection:Pipeline操作符对应的数据集,PCollection可以是有边界的(固定的文件),也可以是无边界的(事件流)
  • PTransform:整个Pipeline的操作算子,对PCollection进行处理

在使用Apache Beam时,需要创建一个Pipeline,然后设置初始的PCollection从外部存储系统读取数据,或者从内存中产生数据,并且在PCollection上应用PTransform处理数据(例如修改,过滤或聚合等),一个PTransform过程会重新生成一个PCollection,而不是原地修改(类似与Spark的RDD)。

具体编程细节可以参考:Apache Beam Programming Guide

有一些点值得注意:

  • PCollection本身是不可变,每一个PCollection的元素都具有相同的类型,PCollection不具备随机读写的能力。有两种类型的PCollection,分为有界和无界,有界的PCollection对应的是批处理的数据,无界的PCollection对应的是流处理,但是无界的PCollection本身也会在逻辑上切分成一个个window,不同的window通过时间戳联系。
  • PTransform是应用在PCollection之上,可以将数据操作应用在每一个元素之上,也可以聚合元素等等。例如:
代码语言:javascript
复制
[Output PCollection 1] = [Input PCollection] | [Transform 1]
Apache Beam的执行

关于PCollection中的元素,Apache Beam会决定如何进行序列化、通信以及持久化,对于Beam的runner而言,Beam整个框架会负责将元素序列化成下层计算引擎对应的数据结构,交换给计算引擎,再由计算引擎对元素进行处理。而正因为PCollection的不可变性以及元素统一的类型,可以对PCollection进行优化和拆分交给不同的机器进行计算,这也意味着每一个PTransform都是可以允许失败,进行重新计算。

如何设计Apache Beam的Pipeline

在官方文档中给出了几个建议:

  • Where is your input data stored?
  • What does your data look like?
  • What do you want to do with your data?
  • What does your output data look like, and where should it go?

有下面几种类型的Pipeline:

  • 最简单的Pipeline,从头到尾执行过去
  • 带分支的Pipeline
  • 合并的Pipeline
  • 多个数据源的Pipeline
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 批处理和流处理的简述
  • Apache Beam的编程模型
  • Apache Beam的执行
  • 如何设计Apache Beam的Pipeline
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档