前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谷歌开源的大数据处理项目 Apache Beam

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

作者头像
dys
发布2018-04-04 11:21:57
1.5K0
发布2018-04-04 11:21:57
举报
文章被收录于专栏:性能与架构性能与架构

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

代码语言:javascript
复制
PipelineOptions options = PipelineOptionsFactory.create();
options.setRunner(SparkRunner.class);
Pipeline p = Pipeline.create(options);
  • 读取数据,得到一个集合 PCollection
代码语言:javascript
复制
p.apply(TextIO.Read.from("gs://apache-beam-samples/shakespeare/*"))
  • 对数据集合进行处理,分割语句为单词,形成一个新的数据集合
代码语言:javascript
复制
.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);
            }
        }
    }
}))
  • 统计单词数量
代码语言:javascript
复制
.apply(Count.<String>perElement())
  • 定义输出格式
代码语言:javascript
复制
.apply("FormatResults", MapElements.via(new SimpleFunction<KV<String, Long>, String>() {
    @Override
    public String apply(KV<String, Long> input) {
        return input.getKey() + ": " + input.getValue();
    }
}))
  • 保存结果数据
代码语言:javascript
复制
.apply(TextIO.Write.to("gs://YOUR_OUTPUT_BUCKET/AND_OUTPUT_PREFIX"));
  • 运行
代码语言:javascript
复制
p.run();

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

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

小结

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

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

项目地址

http://beam.apache.org

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache Beam 是什么?
  • 数据处理框架已经很多了,怎么又来一个,Beam有什么优势?
    • Beam的解决思路
    • Beam 怎么用?
    • 小结
    相关产品与服务
    大数据
    全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档