谷歌开源的大数据处理项目 Apache Beam

时间:2022-05-07
本文章向大家介绍谷歌开源的大数据处理项目 Apache Beam,主要内容包括Apache Beam 是什么?、数据处理框架已经很多了,怎么又来一个,Beam有什么优势?、Beam 怎么用?、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

Apache Beam 是什么?

Beam 是一个分布式数据处理框架,谷歌在今年初贡献出来的,是谷歌在大数据处理开源领域的又一个巨大贡献。

数据处理框架已经很多了,怎么又来一个,Beam有什么优势?

就是因为分布式数据处理技术现在太多了,让人目眩,所以Beam要解决这个问题。

大数据处理领域发展得红红火火,新技术不断,有个笑话:

一个程序员抱怨这个框架的API不好用,同事安慰说:别急,再等几分钟就有新框架出来了,应该会更好。

Hadoop MapReduce、Spark、Storm、Flink、Apex ……

每个技术都有自己的一套API,当新框架出来后,发现功能更强大了、性能更好了,想要切换到新框架,那么开发人员就要开始埋头苦学,然后把之前的业务逻辑重写一遍,这个过程低效而痛苦。

Beam的解决思路

1)定义一套统一的编程规范

Beam有一套自己的模型和API,支持多种开发语言。

开发人员选择自己喜欢的语言,按照Beam的规范实现数据处理逻辑。

2)支持各个分布式执行引擎

自动让Beam的代码可以运行在各大计算引擎上。

Beam的思路简单理解就是:

你们都按照我的规范写代码,然后告诉我你想在哪个框架上运行,我就能自动搞定,如果你什么时候想换个框架了,代码不用动,告诉我要换成谁就行了。

Beam 怎么用?

下面通过经典案例wordcount来了解下Beam的用法

  • 创建数据处理管道Pipeline

指定计算引擎,例如使用 Spark

PipelineOptions options = PipelineOptionsFactory.create();
options.setRunner(SparkRunner.class);
Pipeline p = Pipeline.create(options);
  • 读取数据,得到一个集合 PCollection
p.apply(TextIO.Read.from("gs://apache-beam-samples/shakespeare/*"))
  • 对数据集合进行处理,分割语句为单词,形成一个新的数据集合
.apply("ExtractWords", ParDo.of(new DoFn<String, String>() {
    @ProcessElement
    public void processElement(ProcessContext c) {
        for (String word : c.element().split("[^a-zA-Z']+")) {
            if (!word.isEmpty()) {
                c.output(word);
            }
        }
    }
}))
  • 统计单词数量
.apply(Count.<String>perElement())
  • 定义输出格式
.apply("FormatResults", MapElements.via(new SimpleFunction<KV<String, Long>, String>() {
    @Override
    public String apply(KV<String, Long> input) {
        return input.getKey() + ": " + input.getValue();
    }
}))
  • 保存结果数据
.apply(TextIO.Write.to("gs://YOUR_OUTPUT_BUCKET/AND_OUTPUT_PREFIX"));
  • 运行
p.run();

这样就开发完成了,可以看到Beam的开发思路还是很好理解的:

创建一个数据处理的管道,指定从哪儿取数据、一系列的数据处理逻辑、结果输出到哪儿、使用什么计算引擎,然后启动就可以了。

小结

Beam 目前还在孵化阶段,现在支持的开发语言是Java,Python版正在开发,现在支持的计算引擎有 Apex、Spark、Flink、Dataflow,以后会支持更多的开发语言与计算框架。

Beam 的出发点很好,可以一次编码,多引擎平滑迁移,但他的目标有点大,想做成大数据处理的标准,有点难度,希望能 Beam 能顺利发展起来,值得关注。

项目地址

http://beam.apache.org