不多说,直接上干货!

https://beam.apache.org/get-started/beam-overview/

https://beam.apache.org/get-started/quickstart-java/

Apache Beam Java SDK Quickstart

This Quickstart will walk you through executing your first Beam pipeline to run WordCount, written using Beam’s Java SDK, on a runner of your choice.

我这里为了方便大家快速入手,翻译并整理为中文。

本博文通过使用 Java SDK 来完成,你可以尝试运行在不同的执行引擎上。

第一步:设置开发环境

下载并安装 Java Development Kit (JDK) 1.7 或更高版本。检查 JAVA_HOME 环境变量已经设置并指向你的 JDK 安装目录。

照着 Maven 的 安装指南 下载并安装适合你的操作系统的 Apache Maven 。

第二步:获取 示例的WordCount 代码

获得一份 WordCount 管线代码拷贝最简单的方法,就是使用下列指令来生成一个简单的、包含基于 Beam 最新版的 WordCount 示例和构建的 Maven 项目:

Apache Beam 的源代码在 Github 有托管,可以到 Github 下载对应的源码,下载地址:https://github.com/apache/beam

然后,将其中的示例代码进行打包,命令如下所示:(这是最新稳定版本)(所以一般用这个)

$ mvn archetype:generate \

-DarchetypeRepository=https://repository.apache.org/content/groups/snapshots \

-DarchetypeGroupId=org.apache.beam \

-DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \

-DarchetypeVersion=LATEST\

-DgroupId=org.example \

-DartifactId=word-count-beam \

-Dversion="0.1" \

-Dpackage=org.apache.beam.examples \

-DinteractiveMode=false

这是官网推荐的

$ mvn archetype:generate \

-DarchetypeGroupId=org.apache.beam \

-DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \

-DarchetypeVersion=2.1.0 \

-DgroupId=org.example \

-DartifactId=word-count-beam \

-Dversion="0.1" \

-Dpackage=org.apache.beam.examples \

-DinteractiveMode=false

那是因为,最新的Bean为2.1.0。

这将创建一个叫 word-count-beam 的目录,其中包含了一份简单的 pom.xml 文件和一套示例管线,用来计算某个文本文件中的各个单词的数量。

$ cd word-count-beam/

$ ls

pom.xml src

$ ls src/main/java/org/apache/beam/examples/

DebuggingWordCount.java WindowedWordCount.java common

MinimalWordCount.java WordCount.java

关于这些示例中用到的 Beam 的概念的详细介绍,请阅读 WordCount Example Walkthrough 一文。这里我们只聚焦于如何执行 WordCount.java 上。

运行 WordCount 示例代码

一个 Beam 程序可以运行在多个 Beam 的可执行引擎上,包括 ApexRunner,FlinkRunner,SparkRunner 或者 DataflowRunner。 另外还有 DirectRunner。不需要特殊的配置就可以在本地执行,方便测试使用。

下面,你可以按需选择你想执行程序的引擎,即哪个runner后:

对引擎进行相关配置,确保你已经正确配置了该runner。

使用不同的命令:通过 --runner=参数指明引擎类型,默认是 DirectRunner;添加引擎相关的参数;指定输出文件和输出目录,当然这里需要保证文件目录是执行引擎可以访问到的,比如本地文件目录是不能被外部集群访问的。

运行示例程序,你的第一个WordCount 管线。

Direct

$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \

-Dexec.args="--inputFile=pom.xml --output=counts" -Pdirect-runner

Apex

$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \

-Dexec.args="--inputFile=pom.xml --output=counts --runner=ApexRunner" -Papex-runner

Flink-Local

$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \

-Dexec.args="--runner=FlinkRunner --inputFile=pom.xml --output=counts" -Pflink-runner

Flink-Cluster

$ mvn package exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \

-Dexec.args="--runner=FlinkRunner --flinkMaster= --filesToStage=target/word-count-beam-bundled-0.1.jar \

--inputFile=/path/to/quickstart/pom.xml --output=/tmp/counts" -Pflink-runner

You can monitor the running job by visiting the Flink dashboard at http://:8081

然后,你可以通过访问 http://:8081 来监测运行的应用程序。

Spark

$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \

-Dexec.args="--runner=SparkRunner --inputFile=pom.xml --output=counts" -Pspark-runner

Dataflow

$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \

-Dexec.args="--runner=DataflowRunner --project= \

--gcpTempLocation=gs:///tmp \

--inputFile=gs://apache-beam-samples/shakespeare/* --output=gs:///counts" \

-Pdataflow-runner

运行结果

当程序运行完成后,你可以看到有多个文件以 count 开头,个数取决于执行引擎的类型。当你查看文件的内容的时候,每个唯一的单词后面会显示其出现次数,但是前后顺序是不固定的,也是分布式引擎为了提高效率的一种常用方式。

一旦管线完成运行,你可以查看结果。你会注意到有多个以 count 打头的输出文件。具体会有几个这样的文件是由 runner 决定的。这样能方便 runner 进行高效的分布式执行。

当你查看文件内容的时候,你会看到里面包含每个单词的出现数量。文件中的元素顺序可能会和这里看到的不同。因为 Beam 模型通常并不保障顺序,以便于 runner 优化效率。

Direct

$ ls counts*

$ more counts*

api: 9

bundled: 1

old: 4

Apache: 2

The: 1

limitations: 1

Foundation: 1

...

Apex

$ cat counts*

BEAM: 1

have: 1

simple: 1

skip: 4

PAssert: 1

...

Flink-Local

$ ls counts*

$ more counts*

The: 1

api: 9

old: 4

Apache: 2

limitations: 1

bundled: 1

Foundation: 1

...

Flink-Cluster

$ ls /tmp/counts*

$ more /tmp/counts*

The: 1

api: 9

old: 4

Apache: 2

limitations: 1

bundled: 1

Foundation: 1

...

Spark

$ ls counts*

$ more counts*

beam: 27

SF: 1

fat: 1

job: 1

limitations: 1

require: 1

of: 11

profile: 10

...

Dataflow

$ gsutil ls gs:///counts*

$ gsutil cat gs:///counts*

feature: 15

smother'st: 1

revelry: 1

bashfulness: 1

Bashful: 1

Below: 2

deserves: 32

barrenly: 1

...

总结

Apache Beam 主要针对理想并行的数据处理任务,并通过把数据集拆分多个子数据集,让每个子数据集能够被单独处理,从而实现整体数据集的并行化处理。当然,也可以用 Beam 来处理抽取,转换和加载任务和数据集成任务(一个ETL过程)。进一步将数据从不同的存储介质中或者数据源中读取,转换数据格式,最后加载到新的系统中。

java中quickstart_Beam编程系列之Java SDK Quickstart(官网的推荐步骤)相关推荐

  1. 【Java编程系列】java用POI、Itext生成并下载PPT、PDF文件

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  2. 【Java编程系列】Java判断世界各时区的夏令时、冬令时

    热门系列: [Java编程系列]java用POI.Itext生成并下载PPT.PDF文件 [Java编程系列]二进制如何表示小数?0.3+0.6为什么不等于0.9?纳尼!!! 程序人生,精彩抢先看 目 ...

  3. 【Java编程系列】Java自定义标签-Tag

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  4. 在Java中异步编程,同事非要用rxJava,被我一顿吐槽!

    在Java中异步编程,不一定非要使用rxJava, Java本身的库中的CompletableFuture可以很好的应对大部分的场景. 这篇文章介绍 Java 8 的 CompletionStage ...

  5. java中的jpa_JPA教程–在Java SE环境中设置JPA

    java中的jpa JPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法. 我们可以将其视为类似于Hibernate之类的 ...

  6. Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位

    Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位 一.概述 1.在浏览一篇文章时,看到一个介绍 ,使用位移操作替代乘除法 ,若位移多位该怎么计算呢?  二.代码理解 ...

  7. Java中的字符集编码入门Java中的增补字符

    转载自:http://jiangzhengjun.iteye.com/blog/512083 Java中的字符集编码入门Java中的增补字符 博客分类: 字符集编码 Java Java号称对Unico ...

  8. java计算机毕业设计桂林恒保健康防护有限公司官网MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计桂林恒保健康防护有限公司官网MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计桂林恒保健康防护有限公司官网MyBatis+系统+LW文档+源码+调试部署 本源 ...

  9. 如何学IT?零基础入门自学Java编程系列:java简介跟计算机常识

    学习Java我们应该懂的一些常识 作为IT人士,那什么叫IT呢? 即信息技术,主要用于管理和处理信息所采用的各种技术的总称.IT业务是很广的.比如经历了最早一批大型机发展到PC电脑端,再到互联网高速发 ...

  10. Java中注解学习系列教程-2

    简介 在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解.本文是注解系列教程中的第二篇.来看看今天主要内容:1:注解的分类2:元注解说明3:自定义注解声明一:注解的分类注解 ...

最新文章

  1. 微信、移动端css布局的那些坑
  2. 在linux下查询日志
  3. MySQL数据库的账户管理
  4. 编程软件python t-Python 3.7 64位下载
  5. 有跳板机时,如何使用sshfs挂载远程服务器文件夹
  6. [SHOI2008]小约翰的游戏
  7. MySQL临时表的操作使用
  8. 对比Compose 、kotlin、flutter 移动端跨平台的未来。
  9. mysql专门导入程序_从MySQL导入导出大量数据的程序实现方法
  10. [Ajax]ajax学习与理解
  11. MVC和WebForm区别
  12. 关于TCP/IP协议及网络通信相关问题
  13. 28. 智慧医疗--AI将成为医生的好帮手
  14. Neutron/ML2学习
  15. java 变量 安全访问_访问java变量
  16. Java自学路线图之Java进阶自学
  17. 普通二重积分计算的难点、易错点
  18. 怎么使用计算机操作鼠标,鼠标操作怎么用?电脑鼠标操作图文教程
  19. base64和base32的区分方法
  20. 一文述说人工智能(AI)发展史,几经沉浮!

热门文章

  1. SpringCloud集成分布式事务LCN (一)
  2. rabbitmq的基本安装、配置,以及整合springboot,gradle的hello.demo
  3. delphi 10.3.1 android沉浸式透明状态栏
  4. Sticky footers 粘住底部布局
  5. [Javascript]js中所学知识点回顾总结
  6. 推荐使用maven生成mybatis代码
  7. lstm数学推导_ICML 2019 | 神经网络的可解释性,从经验主义到数学建模
  8. Python使用matplotlib可视化模拟龟兔赛跑折线图
  9. mysql 删除用户下的所有表_使用PL/SQL快速删除用户下的所有表数据
  10. python判断汉字偏胖_写了2年python,知道 if __name__ == '__main__' 什么意思吗?