技术迭代
- 2006,Apache Hadoop 发布,基于 MapReduce 计算模型
- 2009,Spark 计算框架在 加州伯克利大学诞生,于 2010 年开源,于 2014 年成为 Apache 的顶级项目
- Spark 的数据处理效率远在 Hadoop 之上
- 2014,Flink 面世,流批一体,于 2018 年被阿里收购
Apache Beam
- Apache Beam 根据 Dataflow Model API 实现的,能完全胜任批流一体的任务
- Apache Beam 有中间的抽象转换层,工程师无需学习新 Runner 的 API 的语法,减少学习新技术的时间成本
- Runner 可以专心优化效率和迭代功能,而不必担心迁移
Beam Runner
- 迭代非常快 - 如 Flink
Author: zhongmingmao
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2024-09-24
Beam - Paradigm
Why Apache Beam 本身并不是一个数据处理平台,本身也无法对数据进行处理 Apache Beam 所提供的是一个统一的编程模型思想 通过 Apache Beam 统一的 API 来编写处理逻辑,该处理逻辑会被转化为底层运行引擎相应的 API 去运行 SDK 会变,但背后的设计原理却不会改变 生态 Layer Desc Runner 现有的各种大数据处理平台,如 Apache Spark、Apache Flink 可移植的统一模型层 各个 Runner 将会依据中间抽象出来的模型思想Runner 将提供一套符合该模型的 APIs 出来,以供上层转换 SDK 提供不同语言版本的 API 来编写数据处理逻辑这些数据处理逻辑会被转换成 Runner 中相应的 API 来运行 基本概念 数据可以分成有界数据和无界数据 其中有界数据是无界数据的特例,可以将所有的数据抽象看作无界数据 每个数据都有两个时域,即事件时间和处理时间 处理无界数据时,数据会有延迟、丢失的情况 因此,无法保证是否接收完了所有发生在某一时刻之前的数据 - 事件时间 流处理必须在数据的完整性和数据...

2024-09-25
Beam - PCollection
数据抽象 Spark RDD 不同的技术系统有不同的数据结构, 如在 C++ 中有 vector、unordered_map 几乎所有的 Beam 数据都能表达为 PCollection PCollection - Parallel Collection - 可并行计算的数据集,与 Spark RDD 非常类似 在一个分布式计算系统中,需要为用户隐藏实现细节,包括数据是怎样表达和存储的 数据可能来自于内存的数据,也可能来自于外部文件,或者来自于 MySQL 数据库 如果没有一个统一的数据抽象的话,开发者需要不停地修改代码,无法专注于业务逻辑 Coder 将数据类型进行序列化和反序列化,便于在网络上传输 需要为 PCollection 的元素编写 Coder Coder 的作用与 Beam 的本质紧密相关 计算流程最终会运行在一个分布式系统 所有的数据都可能在网络上的计算机之间相互传递 Coder 就是告诉 Beam 如何将数据类型进行序列化和反序列化,以便于在网络上传输 Coder 需要注册进全局的 CoderRegistry 为自定义的数据类型建立与 Coder 的对应关系,无...

2024-09-27
Beam - Pipeline
创建 在 Beam 中,所有的数据处理逻辑都会被抽象成 Pipeline 来运行 Pipeline 是对数据处理逻辑的一个封装 包括一整套流程 - 读取数据集、将数据集转换成想要的结果、输出结果数据集 创建 Pipeline 12PipelineOptions options = PipelineOptionsFactory.create();Pipeline p = Pipeline.create(options); 应用 PCollection 具有不可变性 一个 PCollection 一旦生成,就不能在增加或者删除里面的元素了 在 Beam 中,每次 PCollection 经过一个 Transform 之后,Pipeline 都会创建一个新的 PCollection 新创建的 PCollection 又成为下一个 Transform 的输入 原先的 PCollection 不会有任何改变 对同一个 PCollection 可以应用多种不同的 Transform 处理模型 Pipeline 的底层思想依然是 MapReduce 在分布式环境下,整个 Pipeline...

2024-09-29
Beam - Pattern
Copier Pattern 每个数据处理模块的输入都是相同的,并且每个数据处理模块都可以单独并且同步地运行处理 1234567891011121314151617181920212223242526272829303132333435363738394041PCollection<Video> videoDataCollection = ...;// 生成高画质视频PCollection<Video> highResolutionVideoCollection = videoDataCollection.apply("highResolutionTransform", ParDo.of(new DoFn<Video, Video>(){ @ProcessElement public void processElement(ProcessContext c) { c.output(generateHighResolution(c.element())); }}));// 生成低画质视频...

2024-10-02
Beam - WordCount
步骤 用 Pipeline IO 读取文本 用 Transform 对文本进行分词和词频统计 用 Pipeline IO 输出结果 将所有步骤打包成一个 Pipeline 创建 Pipeline 默认情况下,将采用 DirectRunner 在本地运行 1PipelineOptions options = PipelineOptionsFactory.create(); 一个 Pipeline 实例会构建数据处理的 DAG,以及这个 DAG 所需要的 Transform 1Pipeline p = Pipeline.create(options); 应用 Transform TextIO.Read - 读取外部文件,生成一个 PCollection,包含所有文本行,每个元素都是文本中的一行 123String filepattern = "file:///Users/zhongmingmao/workspace/java/hello-beam/corpus/shakespeare.txt";PCollection<String> lines = ...

2024-09-23
Beam - Context
MapReduce架构思想 提供一套简洁的 API 来表达工程师数据处理的逻辑 在这套 API 底层嵌套一套扩展性很强的容错系统 计算模型 Map 计算模型从输入源中读取数据集合 这些数据经过用户所写的逻辑后生成一个临时的键值对数据集 MapReduce 计算模型会将拥有相同键的数据集集中起来发送到下一阶段,即 Shuffle 阶段 Reduce 接收从 Shuffle 阶段发送过来的数据集 在经过用户所写的逻辑后生成零个或多个结果 划时代意义 Map 和 Reduce 这两种抽象,其实可以适用于非常多的应用场景 MapReduce 的容错系统,可以让数据处理逻辑在分布式环境下有很好的扩展性(Scalability) 不足 使用 MapReduce 来解决一个工程问题,往往会涉及非常多的步骤 每次使用 MapReduce 时,都需要在分布式环境中启动机器来完成 Map 和 Reduce 步骤 并且需要启动 Master 机器来协调两个步骤的中间结果,存在不少的硬件资源开销 FlumeJava 将所有的数据都抽象成名为 PCollection 的数据结构 无论是从内存中读取的数据,...
Announcement
Things are always unexpected!




