我的编程空间,编程开发者的网络收藏夹
学习永远不晚

全面解析Apache Beam

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

全面解析Apache Beam

  Apache Beam 主要针对理想并行的数据处理任务,并通过把数据集拆分多个子数据集,让每个子数据集能够被单独处理,从而实现整体数据集的并行化处理。今天小伙伴们一起随编程学习网来探讨一下Apache Beam吧!

全面解析Apache Beam_大数据_编程语言_开发_编程学习网教育

     1.概述

  在大数据的浪潮之下,技术的更新迭代十分频繁。受技术开源的影响,大数据开发者提供了十分丰富的工具。但也因为如此,增加了开发者选择合适工具的难度。在大数据处理一些问题的时候,往往使用的技术是多样化的。这完全取决于业务需求,比如进行批处理的MapReduce,实时流处理的Flink,以及SQL交互的Spark SQL等等。而把这些开源框架,工具,类库,平台整合到一起,所需要的工作量以及复杂度,可想而知。这也是大数据开发者比较头疼的问题。而今天要分享的就是整合这些资源的一个解决方案,它就是 Apache Beam。

  2.内容

  Apache Beam 最初叫 Apache Dataflow,由谷歌和其合作伙伴向Apache捐赠了大量的核心代码,并创立孵化了该项目。该项目的大部分大码来自于 Cloud Dataflow SDK,其特点有以下几点:

  统一数据批处理(Batch)和流处理(Stream)编程的范式

  能运行在任何可执行的引擎之上

  那 Apache Beam到底能解决哪些问题,它的应用场景是什么,下面我们可以通过一张图来说明,如下图所示:

所需要的工作量以及复杂度,可想而知。这也是大数据开发者比较头疼的问题。而今天要分享的就是整合这些资源的一个解决方案,它就是 Apache Beam。

  通过改图,我们可以很清晰的看到整个技术的发展流向;一部分是谷歌派系,另一部分则是Apache派系。在开发大数据应用时,我们有时候使用谷歌的框架,API,类库,平台等,而有时候我们则使用Apache的,比如:HBase,Flink,Spark等。而我们要整合这些资源则是一个比较头疼的问题,Apache Beam 的问世,整合这些资源提供了很方便的解决方案。

  ApacheBeam的特点

  统一了数据批处理(batch)和流处理(stream)编程范式,

  能在任何执行引擎上运行。

  它不仅为模型设计、更为执行一系列数据导向的工作流提供了统一的模型。这些工作流包括数据处理、吸收和整合。[1]

  ApacheBeam的解决方案

  大数据处理领域的一大问题是:开发者经常要用到很多不同的技术、框架、API、开发语言和SDK。取决于需要完成的是什么任务,以及在什么情况下进行,开发者很可能会用MapReduce进行批处理,用ApacheSparkSQL进行交互请求(interactivequeries),用ApacheFlink实时流处理,还有可能用到基于云端的机器学习框架。

  近两年开启的开源大潮,为大数据开发者提供了十分富余的工具。但这同时也增加了开发者选择合适的工具的难度,尤其对于新入行的开发者来说。这很可能拖慢、甚至阻碍开源工具的发展:把各种开源框架、工具、库、平台人工整合到一起所需工作之复杂,是大数据开发者常有的抱怨之一,也是他们支持专有大数据平台的首要原因。

  2.1 Vision

  下面,我们通过一张流程图来看Beam的运行流程,如下图所示:

把各种开源框架、工具、库、平台人工整合到一起所需工作之复杂,是大数据开发者常有的抱怨之一,也是他们支持专有大数据平台的首要原因。

 

  通过上图,我们可以清楚的知道,执行一个流程分以下步骤:

  End Users:选择一种你熟悉的编程语言提交应用

  SDK Writers:该编程语言必须是 Beam 模型支持的

  Library Writers:转换成Beam模型的格式

  Runner Writers:在分布式环境下处理并支持Beam的数据处理管道

  IO Providers:在Beam的数据处理管道上运行所有的应用

  DSL Writers:创建一个高阶的数据处理管道

  2.2 SDK

  Beam SDK 提供了一个统一的编程模型,来处理任意规模的数据集,其中包括有限的数据集,无限的流数据。Apache Beam SDK 使用相同的类来表达有限和无限的数据,同样使用相同的转换方法对数据进行操作。Beam 提供了多种 SDK,你可以选择一种你熟悉的来建立数据处理管道,如上述的 2.1 中的图,我们可以知道,目前 Beam 支持 java,Python 以及其他待开发的语言。

  2.3 Pipeline Runners

  在 Beam 管道上运行引擎会根据你选择的分布式处理引擎,其中兼容的 API 转换你的 Beam 程序应用,让你的 Beam 应用程序可以有效的运行在指定的分布式处理引擎上。因而,当运行 Beam 程序的时候,你可以按照自己的需求选择一种分布式处理引擎。当前 Beam 支持的管道运行引擎有以下几种:

  Apache Apex

  Apache Flink

  Apache Spark

  Google Cloud Dataflow

  3.示例

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

  3.1 开发环境

  下载安装 JDk 7 或更新的版本,检测 JAVA_HOME环境变量

  下载 Maven 打包环境。

  关于上述的安装步骤,并不是本篇博客的重点,这里笔者就不多赘述了,不明白的可以到官网翻阅文档进行安装。

  3.2 下载示例代码

  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

  此时,命令会创建一个文件夹 word-count-beam,里面包含一个 pom.XML 和相关的代码文件。命令如下所示:

  $ cd word-count-beam/ $ ls pom.xml class="lazy" data-src $ ls class="lazy" data-src/main/java/org/apache/beam/examples/ DebuggingWordCount.java WindowedWordCount.java common MinimalWordCount.java WordCount.java

  3.3 运行 WordCount 示例代码

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

  下面,你可以按需选择你想执行程序的引擎:

  对引擎进行相关配置

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

  运行示例程序

  3.3.1 Direct

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

  3.3.2 Apex

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

  3.3.3 Flink-Local

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

  3.3.4 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

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

  3.3.5 Spark

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

  3.3.6 Dataflow

  $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \\ -Dexec.args="--runner=DataflowRunner --gcpTempLocation=gs:///tmp \\ --inputFile=gs://apache-beam-samples/shakespeare/* --output=gs:///counts" \\ -Pdataflow-runner

  3.4 运行结果

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

  3.4.1 Direct

  $ ls counts* $ more counts* api: 9 bundled: 1 old: 4 Apache: 2 The: 1 limitations: 1 Foundation: 1 ...

  3.4.2 Apex

  $ cat counts* BEAM: 1 have: 1 simple: 1 skip: 4 PAssert: 1 ...

  3.4.3 Flink-Local

  $ ls counts* $ more counts* The: 1 api: 9 old: 4 Apache: 2 limitations: 1 bundled: 1 Foundation: 1 ...

  3.4.4 Flink-Cluster

  $ ls /tmp/counts* $ more /tmp/counts* The: 1 api: 9 old: 4 Apache: 2 limitations: 1 bundled: 1 Foundation: 1 ...

  3.4.5 Spark

  $ ls counts* $ more counts* beam: 27 SF: 1 fat: 1 job: 1 limitations: 1 require: 1 of: 11 profile: 10 ...

  3.4.6 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 ...

  4.总结

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

     结束语:这篇文章就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以到编程学习网上提问。如果你还想了解更多关于这方面的知识,随时可以登录编程学习网,我们一直在这里等你哟~

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

全面解析Apache Beam

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

全面解析Apache Beam

Apache Beam 主要针对理想并行的数据处理任务,并通过把数据集拆分多个子数据集,让每个子数据集能够被单独处理,从而实现整体数据集的并行化处理。今天小伙伴们一起随编程学习网来探讨一下Apache Beam吧!编程学习网教育
全面解析Apache Beam

全方面解析Spark知识体系

Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map函数和reduce函数及计算模型,还提供更为丰富的算子,如filter、join、groupByKey等。是一个用来实现快速而同用的集群计算的平台。编程学习网教育
全方面解析Spark知识体系

全面解析负载均衡原理

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。今天编程学习网就来和大家说说负载均衡的原理,有需要的小伙伴,可以参考一下。编程学习网教育
全面解析负载均衡原理

全面解析Http报文工作原理

超文本传输协议(HypertextTransferProtocol,简称HTTP)是应用层协议。HTTP是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求服务器接到请求后,给予相应的响应信息。今天我们就来全方面的了解Http报文工作原理,有需要的小伙伴,参考一下。编程学习网教育
全面解析Http报文工作原理

纯干货:HLS 协议详解及优化技术全面解析

编程学习网:HLS (HTTP Live Streaming), 是由 Apple 公司实现的基于 HTTP 的媒体流传输协议。他跟 DASH 协议的原理非常类似,通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件,然后提供一个配套的媒体列表文件给客户端,让客户端顺序地拉取这些媒体文件播放, 来实现看上去是在播放一条流的效果。HLS 目前广泛地应用于点播和直播领域。
纯干货:HLS 协议详解及优化技术全面解析

全面讲解RAID

RAID,为RedundantArraysofIndependentDisks的简称,中文为廉价冗余磁盘阵列。RAID磁盘阵列简单的解释,就是将多台硬盘透过RAIDController(分Hardware,Software)结合成虚拟单台大容量的硬盘使用。编程学习网教育
全面讲解RAID

全面讲解数据分析的一些常见问题

业领域的数据科学家和侦探类似:去探索未知的事物。不过,当他们在这个旅程中冒险的时候,他们很容易落入陷阱。所以要明白,这些错误是如何造成的,以及如何避免。什么事情都可能犯错误和出现问题,发现问题要时去改正。今天编程学习网和大家一起探讨数据分析的一些常见问题和怎么去改正。编程学习网教育
全面讲解数据分析的一些常见问题

全面分析Python与Unicode

您对大数据是否非常了解,您是否了解大数据的所有,您是否已经非常了解大数据呢?您知道大数据里的Python与Unicode,如果您觉得大数据非常重要,不管您是否真的非常了解大数据还是不了解大数据。请好好阅读本篇文章吧,本篇文章带你了解大数据中Python与Unicode。编程学习网教育提醒您:要仔细阅读哦~~
全面分析Python与Unicode

全面解析互联网常见的4种web防御体系

大多数互联网公司的业务开展都依赖互联网,所以我们这里讨论的是基于数据中心/云环境下的web安全问题。甲方安全的主要职责也是保护公司互联网业务的安全,比如业务持续性、业务数据的私密性,所以优先解决的以下问题。编程学习网教育
全面解析互联网常见的4种web防御体系

面向数据架构内部解析

面向数据主要是指面向数据解析(DOP,Data-oriented parsing),也称为面向数据编程(data-oriented processing),是一种形式主义概率语法的计算语言学。编程学习网教育
面向数据架构内部解析

关于Python 代码全面分析

欢迎各位阅读本篇,Python(KK 英语发音:/ˈpaɪθən/)是一种面向对象、直译式计算机程序设计语言。本篇文章讲述了关于Python 代码全面分析。
关于Python 代码全面分析

全面学习10大框架对比分析

对于那些听说过深度学习但还没有太过专门深入的人来说,TensorFlow 是他们最喜欢的深度学习框架,但在这里我要澄清一些事实。 在 TensorFlow 的官网上,它被定义为「一个用于机器智能的开源软件库」,但我觉得应该这么定义:TensorFlow 是一个使用数据流图(data flow graphs)进行数值计算的开源软件库。在这里,他们没有将 TensorFlow 包含在「深度学习框架」范围内,而是和 Theano 一起被包含在「图编译器(graph compilers)」类别中。 在结
全面学习10大框架对比分析

全面讲解ML能用上的实用数据集

机器学习中重要的一步是创建或寻找合适的数据来训练和检验算法。使用好的数据集可以帮助你规避或发现算法中的错误,改善程序的结果。在多数情况下,创建自己的数据集是一件费时的事。本文会向介绍一些有用的数据集,用于文本分类和图像分类问题。编程学习网教育
全面讲解ML能用上的实用数据集

全面讲解数据存储系统的 80/20 法则

80/20 法则通常被认为是源于意大利经济学家维尔弗雷多·帕累托。帕累托出生于1848年,他是(至少被认为是)占领运动的早期成员之一。他发现意大利国家财富的80%是掌握在几乎少于20%的人口手中的。由此发散开来看,80/20法则在其他方面的应用同样值得注意,也是很有趣的:因为帕累托观察发现他的园子里的80%的豌豆产自于20%的作物上(他似乎更喜欢数豌豆而不是其他豆子,哈哈)。无论如何,帕累托是不相信均匀分布的理论的。编程学习网教育
全面讲解数据存储系统的 80/20 法则

全面讲解数据可视化技术的误区

种类繁多的信息源产生的大量数据,远远超出了人脑分析解释这些数据的能力。由于缺乏大量数据的有效分析手段,大约有95%的计算被浪费,这严重阻碍了科学研究的进展。为此,美国计算机成像专业委员会提出了解决方法——可视化。可视化还出现一些误区,本文就此进行补充分析。需要的小伙伴,可以参考一下。编程学习网教育
全面讲解数据可视化技术的误区

全面教你用Spark学习矩阵分解推荐算法

在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法。编程学习网教育
全面教你用Spark学习矩阵分解推荐算法

全面教你如何建立数据分析的思维框架

这是一道分水岭,“我觉得”是一种直觉化经验化的思维,工作不可能处处依赖自己的直觉,公司发展更不可能依赖于此。数据证明则是数据分析的最直接体现,它依托于数据导向型的思维,而不是技巧,前者是指导,后者只是应用。编程学习网教育
全面教你如何建立数据分析的思维框架

编程热搜

  • Mysql分表查询海量数据和解决方案
    众所周知数据库的管理往往离不开各种的数据优化,而要想进行优化通常我们都是通过参数来完成优化的。那么到底这些参数有哪些呢?为此在本篇文章中编程学习网笔者就为大家简单介绍MySQL,以供大家参考参考,希望能帮助到大家。以上就是关于大数据的知识点了。喜欢的可以分享给你的朋友,也可以点赞噢~更多内容,就在编程学习网!
    Mysql分表查询海量数据和解决方案
  • 大数据的妙用及17年趋势
    2017年,支持大量结构化和非结构化数据的系统将继续增长。市场需要数据平台来帮助数据管理人员管理和保护大数据,同时允许最终用户进行数据分析。这些系统将逐步成熟,在企业内部的IT系统中更好地运行。所以,我们更要了解大数据!互联网普及使得网民的行为更加多元化,通过互联网产生的数据发展更加迅猛,更具代表性。互联网世界中的商品信息、社交媒体中的图片、文本信息以及视频网站的视频信息,互联网世界中的人与人交互信息、位置信息等,都已经成为大数据的最重要也是增长最快的来源。大家都了解到了吗!更多内容就在编程学习网哟
    大数据的妙用及17年趋势
  • 5G大数据时代空降来袭
    欢迎各位阅读本篇文章,本文主要讲了5G大数据时代。如今 5G 概念已不再陌生,按照行业认同的说法:2017年至2018年 5G 将在国内开始有序测试,2019年进行预商用。工信部之前已表示,中国将在2020年启动 5G 商用。编程学习网教育平台提醒各位:本篇文章纯干货~因此大家一定要认真阅读本篇文章哦!
    5G大数据时代空降来袭
  • es详解-原理-从图解构筑对es原理的初步认知
    在学习ElasticSearch原理时,我推荐你先通过官方博客中的一篇图解文章(虽然是基于2.x版本)来构筑对ES的初步认知(这种认识是体系上的快速认知)。ES详解 - 原理:从图解构筑对ES原理的初步认知前言图解ElasticSearch图解LuceneSegmentInverted IndexStored Fiel
    es详解-原理-从图解构筑对es原理的初步认知
  • elasticsearch-wrapperquery
    在工作中遇到ElasticSearch版本升级时出现Java High Level接口变更导致的兼容性问题: 之前使用的是2.4.x,考虑性能和功能的增强,需要更换为6.4.x; 2.4.x中我们使用DSL语句直接查询(数据的不确定性和方便动态建立查询规则等因素),而新的ES Java 高阶API中去掉了相关接口的支持
    elasticsearch-wrapperquery
  • 学习大数据营销思维(下)
    编程学习网: 其实,通过上面的介绍,我们知道苹果通过各类产品与服务销售相互促进以理及薄利多销的方式来盈利第二种战略联盟类型是合作方的共同赢利。苹果公司打造了一个参与方共同受益的业务系统。
    学习大数据营销思维(下)
  • 纯干货:HLS 协议详解及优化技术全面解析
    编程学习网:HLS (HTTP Live Streaming), 是由 Apple 公司实现的基于 HTTP 的媒体流传输协议。他跟 DASH 协议的原理非常类似,通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件,然后提供一个配套的媒体列表文件给客户端,让客户端顺序地拉取这些媒体文件播放, 来实现看上去是在播放一条流的效果。HLS 目前广泛地应用于点播和直播领域。
    纯干货:HLS 协议详解及优化技术全面解析
  • 关于Python 代码全面分析
    欢迎各位阅读本篇,Python(KK 英语发音:/ˈpaɪθən/)是一种面向对象、直译式计算机程序设计语言。本篇文章讲述了关于Python 代码全面分析。
    关于Python 代码全面分析
  • es详解-原理-es原理之索引文档流程详解
    ElasticSearch中最重要原理是文档的索引和文档的读取,本文带你理解ES文档的索引过程。ES详解 - 原理:ES原理之索引文档流程详解文档索引步骤顺序单个文档多个文档文档索引过程详解整体的索引流程分步骤看数据持久化过程深入ElasticSearch索引文档的实现机制写操作的关键点Lucene的写Elastics
    es详解-原理-es原理之索引文档流程详解
  • 五大“网管”必备的网络数据分析工具
    是不是在为如何分析统计网络数据和流量烦恼呢?想不想监控、运维、排障轻松一些?下面给大家提供一些免费网络分析工具,以帮助大家更好的掌控自己的网络!编程学习网教育
    五大“网管”必备的网络数据分析工具

目录