不多说,直接上干货!

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

  1. 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 来完成,你可以尝试运行在不同的执行引擎上。

第一步:设置开发环境

  1. 下载并安装 Java Development Kit (JDK) 1.7 或更高版本。检查 JAVA_HOME 环境变量已经设置并指向你的 JDK 安装目录。
  2. 照着 Maven 的 安装指南 下载并安装适合你的操作系统的 Apache Maven 。

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

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

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

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

  1. $ mvn archetype:generate \
  2. -DarchetypeRepository=https://repository.apache.org/content/groups/snapshots \
  3. -DarchetypeGroupId=org.apache.beam \
  4. -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
  5. -DarchetypeVersion=LATEST \
  6. -DgroupId=org.example \
  7. -DartifactId=word-count-beam \
  8. -Dversion="0.1" \
  9. -Dpackage=org.apache.beam.examples \
  10. -DinteractiveMode=false

  这是官网推荐的

  1. $ mvn archetype:generate \
  2. -DarchetypeGroupId=org.apache.beam \
  3. -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
  4. -DarchetypeVersion=2.1. \
  5. -DgroupId=org.example \
  6. -DartifactId=word-count-beam \
  7. -Dversion="0.1" \
  8. -Dpackage=org.apache.beam.examples \
  9. -DinteractiveMode=false

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

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

  1. $ cd word-count-beam/
  2.  
  3. $ ls
  4. pom.xml src
  5.  
  6. $ ls src/main/java/org/apache/beam/examples/
  7. DebuggingWordCount.java WindowedWordCount.java common
  8. MinimalWordCount.java WordCount.java

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

运行 WordCount 示例代码

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

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

  1. 对引擎进行相关配置,确保你已经正确配置了该runner。
  2. 使用不同的命令:通过 --runner=<runner>参数指明引擎类型,默认是 DirectRunner;添加引擎相关的参数;指定输出文件和输出目录,当然这里需要保证文件目录是执行引擎可以访问到的,比如本地文件目录是不能被外部集群访问的。
  3. 运行示例程序,你的第一个WordCount 管线。

Direct

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  2. -Dexec.args="--inputFile=pom.xml --output=counts" -Pdirect-runner

Apex

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  2. -Dexec.args="--inputFile=pom.xml --output=counts --runner=ApexRunner" -Papex-runner

Flink-Local

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  2. -Dexec.args="--runner=FlinkRunner --inputFile=pom.xml --output=counts" -Pflink-runner

Flink-Cluster

  1. $ mvn package exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  2. -Dexec.args="--runner=FlinkRunner --flinkMaster=<flink master> --filesToStage=target/word-count-beam-bundled-0.1.jar \
  3. --inputFile=/path/to/quickstart/pom.xml --output=/tmp/counts" -Pflink-runner
  4.  
  5. You can monitor the running job by visiting the Flink dashboard at http://<flink master>:8081

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

Spark

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  2. -Dexec.args="--runner=SparkRunner --inputFile=pom.xml --output=counts" -Pspark-runner

Dataflow

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  2. -Dexec.args="--runner=DataflowRunner --project=<your-gcp-project> \
  3. --gcpTempLocation=gs://<your-gcs-bucket>/tmp \
  4. --inputFile=gs://apache-beam-samples/shakespeare/* --output=gs://<your-gcs-bucket>/counts" \
  5. -Pdataflow-runner

 

运行结果

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

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

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

Direct

  1. $ ls counts*
  2.  
  3. $ more counts*
  4. api: 9
  5. bundled: 1
  6. old: 4
  7. Apache: 2
  8. The: 1
  9. limitations: 1
  10. Foundation: 1
  11. ...

Apex

  1. $ cat counts*
  2. BEAM: 1
  3. have: 1
  4. simple: 1
  5. skip: 4
  6. PAssert: 1
  7. ...

Flink-Local

  1. $ ls counts*
  2.  
  3. $ more counts*
  4. The: 1
  5. api: 9
  6. old: 4
  7. Apache: 2
  8. limitations: 1
  9. bundled: 1
  10. Foundation: 1
  11. ...

Flink-Cluster

  1. $ ls /tmp/counts*
  2.  
  3. $ more /tmp/counts*
  4. The: 1
  5. api: 9
  6. old: 4
  7. Apache: 2
  8. limitations: 1
  9. bundled: 1
  10. Foundation: 1
  11. ...

Spark

  1. $ ls counts*
  2.  
  3. $ more counts*
  4. beam: 27
  5. SF: 1
  6. fat: 1
  7. job: 1
  8. limitations: 1
  9. require: 1
  10. of: 11
  11. profile: 10
  12. ...

Dataflow

  1. $ gsutil ls gs://<your-gcs-bucket>/counts*
  2.  
  3. $ gsutil cat gs://<your-gcs-bucket>/counts*
  4. feature: 15
  5. smother'st: 1
  6. revelry: 1
  7. bashfulness: 1
  8. Bashful: 1
  9. Below: 2
  10. deserves: 32
  11. barrenly: 1
  12. ...

总结

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

Beam编程系列之Java SDK Quickstart(官网的推荐步骤)的更多相关文章

  1. Beam编程系列之Python SDK Quickstart(官网的推荐步骤)

    不多说,直接上干货! https://beam.apache.org/get-started/quickstart-py/ Beam编程系列之Java SDK Quickstart(官网的推荐步骤)

  2. Beam编程系列之Apache Beam WordCount Examples(MinimalWordCount example、WordCount example、Debugging WordCount example、WindowedWordCount example)(官网的推荐步骤)

    不多说,直接上干货! https://beam.apache.org/get-started/wordcount-example/ 来自官网的: The WordCount examples demo ...

  3. Java并发编程系列-(5) Java并发容器

    5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...

  4. Java并发编程系列-(6) Java线程池

    6. 线程池 6.1 基本概念 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数 ...

  5. Java并发编程系列-(7) Java线程安全

    7. 线程安全 7.1 线程安全的定义 如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的. 类的线程安全表现为: 操作的原子性 内存的可见性 不 ...

  6. Java 银联支付官网demo测试及项目整合代码

    注:原文来源与 < Java 银联支付官网demo测试及项目整合代码  > 银联支付(网关支付B2C) 一.测试官网demo a)下载官网开发包,导入eclipse等待修改(下载的开发包没 ...

  7. 【ABAP系列】SAP LSMW(摘自官网)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP LSMW(摘自官网)   前 ...

  8. Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...

  9. Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 14.04.4 LTS ...

随机推荐

  1. JavaScript补充:BOM(浏览器对象模型)

    一些公共对象.详细参考手册. 一.Window 对象 Window 对象表示浏览器中打开的窗口. 如果文档包含框架(<frame> 或 <iframe> 标签),浏览器会为 H ...

  2. 【单例模式】Singleton pattern

    前言:有很多时候,在一个生命周期中我们只要一个对象就可以了,比如:线程池,缓存,对话框,日志,显卡驱动等等.如果造出多个实例,就会导致许多问题产生,例如:程序的行为异常.资源使用过量,或者说不一致的结 ...

  3. 【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

    原文地址:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量—— ...

  4. Winform中的DatagridView显示行号

    1.设置 RowPostPaint 为true 2.启用RowPostPaint事件 /// <summary> /// DataGridView显示行号 /// </summary ...

  5. Android学习笔记 Toast屏幕提示组件的使用方法

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  6. Stars in Your Window(线段树求最大矩形交)

    题目连接 http://poj.org/problem?id=2482 Description Fleeting time does not blur my memory of you. Can it ...

  7. NSCache 缓存

    前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本. 用法与 NSMutableDicti ...

  8. Jmeter_Beanshell_使用Java处理JSON块

    版权声明:本文为博主原创文章,转载请注明出处. [环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该j ...

  9. vim文本编辑

    6.1 vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),插入模式(Insert mode)和底线命令模式(Last line mode). 6. ...

  10. I/O(输入/输出)---序列化与反序列化

    概念: 序列化就是将对象的状态存储到特定的介质中的过程,也就是将对象状态转换为可保持或传输格式的过程. 反序列化则是从特定存储介质中将数据重新构建对象的过程.可以将存储在文件上的对象信息读取,然后重新 ...