ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java Spring Batch与Apache Spark基准测试中的ETL

2019-08-23 11:19:43  阅读:338  来源: 互联网

标签:etl apache-spark spring spring-boot spring-batch


我已经使用Apache Spark Scala超过5年了(学术和专业经验).我总是发现Spark / Scala是用于构建任何类型的批处理或流式ETL / ELT应用程序的强大组合之一.

但最近,我的客户决定在我们的两个主要管道中使用Java Spring Batch:

>从MongoDB中读取 – >业务逻辑 – >写入JSON文件(~2GB | 600k行)
>阅读Cassandra – >业务逻辑 – >写JSON文件(~4GB | 2M行)

这个企业级决策令我感到非常困惑.我同意业内有更多的思想,但我无法理解采取这一行动的必要性.

我的问题是:

>有人比较过Apache Spark和Java Spring Batch之间的表现吗?
>使用Spring Batch而不是Spark有什么好处?
>与Apache Spark相比,Spring Batch是“真正分布式的”吗?我在offcial docs遇到了chunk(),partition等方法,但我并不相信它真正的分布式.在所有Spring Batch在单个JVM实例上运行之后.不是吗???

我无法绕过这些.所以,我想使用这个平台进行Spring Batch和Apache Spark之间的公开讨论.

解决方法:

作为Spring Batch项目的领导者,我相信你会理解我有一个特定的观点.但是,在开始之前,我应该说我们所讨论的框架是针对两个非常不同的用例而设计的. Spring Batch旨在处理JVM上的传统企业批处理.它旨在应用在企业批处理中常见的易于理解的模式,并使它们在JVM的框架中方便.另一方面,Spark专为大数据和机器学习用例而设计.与传统的企业批处理系统相比,这些用例具有不同的模式,挑战和目标,这反映在框架的设计中.话虽这么说,这是我对你的具体问题的答案.

有人比较过Apache Spark和Java Spring Batch之间的表现吗?

没有人能真正为你回答这个问题.性能基准是一个非常具体的事情.用例很重要.硬件很重要.我鼓励您进行自己的基准测试和性能分析,以确定哪种方法最适合您的部署拓扑中的用例.

使用Spring Batch而不是Spark有什么好处?

编程模型类似于其他企业工作负载
企业在制定架构决策时需要了解他们手头的资源.使用新技术X是否值得重新培训或招聘技术Y?在Spark vs Spring Batch的情况下,Spring Batch上现有Spring开发人员的增加非常少.我可以选择任何对Spring感到满意的开发人员,并使用Spring Batch快速完成工作. Spark为普通企业开发人员提供了更陡峭的学习曲线,这不仅是因为学习Spark框架的开销,而且还包括所有相关技术,以预测该生态系统中的Spark工作(HDFS,Oozie等).

无需专用基础设施
在分布式环境中运行时,您需要使用YARN,Mesos或Spark自己的群集安装来配置群集(在撰写本文时,有一个实验性的Kubernetes选项,但如上所述,它被标记为实验性的).这需要针对特定​​用例的专用基础架构. Spring Batch可以部署在任何基础架构上.您可以通过Spring Boot使用可执行JAR文件执行它,您可以将其部署到servlet容器或应用程序服务器中,并且可以通过YARN或任何云提供程序运行Spring Batch作业.此外,如果您使用Spring Boot的可执行JAR概念,即使在运行其他工作负载的同一个基于云的基础架构上运行分布式应用程序,也无需提前设置.

更多开箱即用的读者/作者简化了创造就业机会
Spark生态系统专注于大数据用例.因此,它开箱即用的读取和写入组件专注于这些用例.诸如用于读取大数据用例中常用文件的不同序列化选项之类的东西是本地处理的.但是,处理诸如事务中的记录块之类的事物不是.

另一方面,Spring Batch为声明性输入和输出提供了一整套组件.读取和写入平面文件,XML文件,数据库,NoSQL存储,消息队列,编写电子邮件……列表继续. Spring Batch提供所有开箱即用的产品.

Spark是为大数据而构建的……并非所有用例都是大数据用例
简而言之,Spark的功能特定于其构建的域:大数据和机器学习. Spark中不存在事务管理(或根本不涉及事务)之类的事情.如果没有自定义代码,则在发生错误时回滚的想法(据我所知)不存在.在框架级别不提供更强大的错误处理用例,例如跳过/重试.重新启动等事情的状态管理在Spark中要比Spring Batch重得多(持久化整个RDD与存储特定组件的琐碎状态).所有这些功能都是Spring Batch的原生功能.

Spring Batch“真正分布式”

Spring Batch的一个优点是能够将批处理过程从简单的顺序执行的单个JVM进程演变为完全分布式的集群解决方案,只需进行最少的更改. Spring Batch支持两种主要的分布式模式:

>远程分区 – 这里Spring Batch在主/工作配置中运行.主人根据协调机制将工作委托给工人(这里有很多选项).完全可重启性,错误处理等都可用于此方法,只需最少的网络开销(仅描述每个分区的元数据传输)到远程JVM. Spring Cloud Task还提供Spring Batch的扩展,允许云本机机制动态部署工作程序.
>远程分块 – 远程分块仅将步骤的处理和写入阶段委托给远程JVM.仍然使用主/工作配置,主设备负责向工作人员提供数据以进行处理和写入.在此拓扑中,数据通过线路传输,导致更大的网络负载.它通常仅在处理优势可以超过添加的网络流量的开销时使用.

还有其他Stackoverflow答案可以更详细地讨论这些功能(与文档一样):

Advantages of spring batch
Difference between spring batch remote chunking and remote partitioning
Spring Batch Documentation

标签:etl,apache-spark,spring,spring-boot,spring-batch
来源: https://codeday.me/bug/20190823/1697123.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有